http keep-alive簡解
阿新 • • 發佈:2017-10-29
結束 編碼 完全 靜態頁面 1.0 是否 客戶端 問題 connect
http協議中,客戶端發送請求,服務端再接收到請求後返回所需要的數據後即關閉連接,這樣客戶端讀取數據局時會返回EOF(-1),表明數據已接受完全
備註:EOF end of file
什麽是keep-alive
一般情況下,服務端發送完畢後會自動關閉,而keep-alive功能可以使得客戶端與服務端之間建立持續有效的連接,當出現後續請求時不必重新連接。
http1.0中keep-alive默認關閉,需要在請求頭中加入connection: keep-alive,而在1.1中默認開啟,需加入connection: close
優點是減少了建立連接/釋放的開銷
那麽接下來面臨一個問題,沒有了EOF,如何知道服務端已發送完畢?
1.content-length
content-length實體內容的長度(大小,即返回文件的大小),客戶端可根據這個字段來判斷是否發送/接收完畢
2.transfer-enconding
當服務端發送一個圖片或靜態頁面時,它很清楚文件的大小,從而知道content-length的值,但如果是發送動態網頁呢?服務器不知道其實際大小。。這時候就需要transfer-enconding:chunk
設置transfer-encoding:chunk後,會將文件進行chunk編碼,將文件分成一塊一塊再串聯起來,由一個長度為0的chuck結束,客戶端接收到這個chunk後明白發送完畢。
http keep-alive簡解