2014-11-04 54 views
1

我熟悉301錯誤代碼,但是對於http請求是新的,並且它們正確地格式化。UNIX C HTTP請求返回301永久移動

在我的計劃中,我需要檢索我學校的主頁,但是我得到一個301 Moved Permanently頭。標題的位置說明了頁面移到的位置,但即使這個新的位置也不適合我,可能是因爲我沒有正確格式化它。

最初我送這個請求:

GET/HTTP/1.1\r\nHost: www.cs.uregina.ca\r\nConnection: close\r\n\r\n 

和接收這個頭:

Received: HTTP/1.1 301 Moved Permanently 
Date: Tue, 04 Nov 2014 05:38:42 GMT 
Server: Apache 
Location: http://www.cs.uregina.ca/ 
Connection: close 
Transfer-Encoding: chunked 
Content-Type: text/html; charset=utf-8 

我應該我新的HTTP請求模樣讓上述移動網頁?

如果我嘗試移動的頁面的位置,像它暗示,然後我得到以下400錯誤的請求響應:

GET/HTTP/1.1\r\nHost: http://www.cs.uregina.ca\r\nConnection: close\r\n\r\n 

Received: HTTP/1.1 400 Bad Request 
Date: Tue, 04 Nov 2014 05:52:36 GMT 
Server: Apache 
Content-Length: 334 
Connection: close 
Content-Type: text/html; charset=iso-8859-1 

回答

1

最初我發送此請求:

GET/HTTP/1.1\r\nHost: www.cs.uregina.ca\r\nConnection: close\r\n\r\n 

和接收這個頭:

Received: HTTP/1.1 301 Moved Permanently 
... 
Location: http://www.cs.uregina.ca/ 
... 

這正是我所得到的,當我要求cs.uregina.ca。您可能已連接到cs.uregina.ca(或www以外的某個子域),或者連接到與www.cs.uregina.ca不對應的IP地址。

如果我嘗試移動的頁面的位置,像它暗示然後我得到 以下400錯誤的請求響應:

GET/HTTP/1.1\r\nHost: http://www.cs.uregina.ca\r\nConnection: close\r\n\r\n 

Received: HTTP/1.1 400 Bad Request 
... 

這並不奇怪。您必須從Host:標題中刪除http://協議。例如:

GET/HTTP/1.1\r\nHost: www.cs.uregina.ca\r\nConnection: close\r\n\r\n 

在一般情況下,請求一個URL,如以下時:

  http://domain.example:80/path/to/resource/?query#fragment 
    ---- -------------- ==------------------------ 
    protocol  host  |  path 
          port 

你會:

  • 解決主機名到IP地址,並連接到端口上的IP地址(如果存在於URL中)或與協議相關聯的默認端口。
  • 使用特定於協議的機制與服務器通信。在這種情況下,一個HTTP請求。
  • 請求路徑從服務器與適當的Host:標頭(如果有多個主機在同一個IP上)。
  • 片段標識符與(X)HTML一起使用,實際上並未發送到服務器。

請求應(至少)是這樣的:

+0

非常清楚,謝謝!我還有最後一個問題。如果我需要對我的教授的網頁提出申請,請http://www2.cs.uregina.ca/~hilder/,我可以使用gethostbyname(「www2.cs.uregina.ca」)找到IP地址嗎?由於此函數返回「未知主機」的錯誤,因此如何知道當我需要請求諸如http://www2.cs.uregina.ca/~的網頁時,主機名將放入gethostbyname()中hilder /? – 2014-11-04 09:21:24

+1

@shawna:我從這裏(瑞典)得到'142.3.200.90'。你確定你所有的東西都對嗎?也許有一個暫時的故障,或不是所有的名稱服務器都正確配置? – 2014-11-04 09:34:58

+0

現在我明白了,謝謝Nisse。最佳答案。 – 2014-11-04 09:37:37

0

如果你只是想主頁,下載NC並鍵入「NC www.cs. uregina.ca 80" 當NC啓動鍵入以下內容,然後回車兩次:

GET http://www.cs.uregina.ca HTTP/1.0

+0

其實,如果你使用的返回鍵,而不是\ r \ n您的要求正常工作與NC。我只能假設你正在使用的程序正在逃避你的反斜槓,而不是將字符串解釋爲有回車符和換行符。 – 2014-11-04 06:33:20

+0

我只能使用我的C程序,沒有其他軟件用於此作業。 – 2014-11-04 06:33:39

+0

您的請求格式正確。確保您使用正確的端口將其發送到正確的服務器。 – 2014-11-04 06:39:54