天天看點

用戶端socket模拟http請求,如何判斷http響應結束(http1.1)

1、如果是短連接配接,沒有啟用keepalive,則可以通過是否關閉了連接配接來判斷是否傳輸結束,即在讀取時可判斷 read() != -1。

2、如果時長連接配接,那麼一個socket(tcp)可能發送和接收多次請求,那麼如何判斷每次的響應已經接收?

2-1、先讀請求頭,一直到\r\n\r\n說明請求頭結束,然後解析http頭,如果content-length=x存在,則知道http響應的長度為x。直接讀取x位元組就是響應内容。

2-2、如果content-length=x不存在,那麼頭類型為transfer-encoding: chunked說明響應的長度不固定,則在響應頭結束後标記第一段流的長度

用戶端socket模拟http請求,如何判斷http響應結束(http1.1)

然後用戶端讀取2000個位元組,在接下來如果後續還有資料,那麼會接着标記下一個段流的長度,

用戶端socket模拟http請求,如何判斷http響應結束(http1.1)

然後接着讀,最後會用\r\n0\r\n\r\n表示結束。

用戶端socket模拟http請求,如何判斷http響應結束(http1.1)
用戶端socket模拟http請求,如何判斷http響應結束(http1.1)

繼續閱讀