2012-09-30 47 views
0

我試圖在客戶端和服務器之間交換HTTP消息。 請求包含HTTP/1.0,當我把它放在請求的開始時,它工作正常。HTTP請求中的Python套接字錯誤

client_socket.send("HTTP/1.0 400 Bad Request") 

但是,當我把它放在最後,它沒有收到另一邊,程序停止。

client_socket.send("GET 1.txt HTTP/1.0") 

當添加一個額外的空間來之間的HTTP和/1.0

client_socket.send請求( 「1.txt的GET HTTP/1.0」)

它工作正常我收到請求的文件的內容。

我認爲問題出在正斜槓上,爲了讓我的客戶端連接到另一個用另一種語言編寫的服務器,我想省略它。

+0

您完全瞭解HTTP協議嗎?第一條消息通常從服務器發送到客戶端,而第二條消息則從客戶端發送到服務器。你試圖發送這個消息的方式是? – buc

+2

首先,所有的請求/響應頭字段都應該以換行符(''\ r \ n'')結尾,整個頭部應該以空行結束。要繼續,請參閱@buc的評論。 –

+0

...和'GET'請求應該總是跟着'Host:'HTTP-header。 – buc

回答

2

在最小甲HTTP 1.0請求是以下格式的:

GET /1.txt HTTP/1.0<CRLF> 
Host: the.server.com<CRLF> 
<CRLF> 

也就是說,所有的行結尾應該是CR + LF(即,ASCII字符13和10進制,或「\ 015 \ 012 「在Python字符串中),並且在第一行出現任意數量的附加頭文件後面跟着一個空行。雖然不是嚴格要求,但您應始終提供Host:標題以輔助虛擬主機;沒有這些,許多網站都無法運作。請注意,GET動詞後面的URI部分必須是絕對的,因此以斜槓開頭。

+0

我正在使用本地主機,並且在發送請求之前指定了端口號並建立了一個TCP連接。 –

+0

'Host:xxx'在HTTP 1.1中是必需的,而不是在HTTP 1.0中; 最重要的是請求後的雙換行符。 嚴格地說它應該是CRLFCRLF,但實際上大多數網絡服務器也理解「\ n \ n」。 –

+0

在HTTP1.0中這不是必需的,但是,如果沒有虛擬主機,許多網站仍然無法正常工作。 –