1
我正在编写一个浏览器,它发送http获取请求的方式与浏览器所做的相同。我想测试的“保持活动”头,所以我发送和接收以下封装两次:HTTP套接字保持活着不起作用
"POST /test.php HTTP1.1\r\n" "Host: 192.168.0.1:8000\r\n" "Connection: keep-alive\r\n" "Content-Length: 17\r\n" "Content-Type: application/x-www-form-urlencoded\r\n" "Accept-Language: en-US,en;q=0.8\r\n" "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3\r\n" "User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.106 Safari/535.2\r\n" "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n" "Referer: http://192.168.0.1:8000/test.php\r\n" "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3\r\n" "\r\n\r\n" "para:test_tst_tst"
然而,当我收到的第二次,我得到错误10054(Windows错误)。似乎服务器拒绝向我发送数据。
这是什么问题?
您是否检查过来自服务器的响应,其标头是否也有保持活动状态?另外请记住,服务器上的超时时间可能只有几秒钟。 –
您在“HTTP/1.1”请求的第一行中缺少“/”。你的内容之前还有一个额外的“\ r \ n” - 你有两个空白行而不是一个。因此,你身体的实际内容长度是19,而不是17;那么服务器可能会尝试解析下一个请求,就好像它以“st”开始一样,这是第一个请求结束时的额外两个字符。 –
你有什么尝试?服务器似乎在您的本地网络上,所以您应该能够检查其日志。你有没有看到任何错误?第一个请求的回应是什么?像Fiddler这样的工具对你的请求有什么看法,它们是否有效(根据其他评论者的看法,它不是那么有效)?服务器是否配置为永不履行keepalive(因为它可能会忽略标题并使用'Connection:close'来响应并且这样做)? – CodeCaster