2012-09-30 20 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中这不是必需的,但是,如果没有虚拟主机,许多网站仍然无法正常工作。 –