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