1. 程式人生 > >http keep-alive簡解

http keep-alive簡解

結束 編碼 完全 靜態頁面 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簡解