HTTP的持久連線、管線化技術、Cookie技術
阿新 • • 發佈:2019-02-08
以下內容均為本人學習筆記,若有錯誤,歡迎指正
HTTP的持久連線
HTTP最初的版本中,每進行一次HTTP通訊,就要斷開一次TCP連線。
以當年的通訊情況來看,因為都是一些小的文字傳輸,所以這樣並沒有多大問題。隨著HTTP的普及,文件中包含的圖片越來越多,比如,當你瀏覽一個包含多張圖片的的HTML頁面時,在傳送訪問HTML頁面同時,也會發送包含該頁面的其他資源,這樣每次的請求都會造成無謂的TCP連線建立和斷開,增加通訊量的開銷。
為解決上述問題,HTTP/1.1和部分HTTP/1.0增加了持久連線(HTTP Persistent Connections )的方法,其特點是,只要一方未明確提出斷開連線,則另一方保持TCP連線狀態。
這樣的話,就減少了TCP連線的重複建立連線和斷開連線的開銷,減輕伺服器的負載,另外,減少開銷的那部分時間,HTTP請求和響應能夠更早的結束,這樣,Web頁面顯示速度也就提高了。 在HTTP/1.1中,所有的連線預設都是持久連線,包含伺服器端和客戶端。 但是在HTTP/1.0中未標準化,雖然有一部分伺服器通過非標準手段實現的持久連線,但客戶端不一定支援持久連線。 |
HTTP的管線化技術
管線化是指將多個HTTP請求整批發送,在傳送過程中不用等待對方響應。
很明顯管線化是在持久連線的基礎上實現的,管線化的實現,能夠同時並行傳送多個請求,而不需要一個接一個的等待響應。並且只有GET和HEAD請求可以進行管線化,而POST則有所限制。此外,初次建立連線時也不應啟動管線機制,因為對方(伺服器)不一定支援HTTP/1.1版本的協議。
瀏覽器提交批量的HTTP請求可以縮短頁面載入時間。此技術的關鍵在於HTTP的要求訊息可以同時塞入一個TCP分組中,所以只提交一個分組即可同時發出多個要求。 例如,請求一個包含多張圖片的HTML頁面時,與逐一連線相比,用持久連線可以讓請求更快結束,而管線化技術則更快,並且請求越多,時間差越明顯。 |
HTTP的Cookie技術
HTTP本身是不儲存狀態的,它不對之前的請求和響應的狀態進行管理,就是說,無法根據之前的狀態進行本次的請求處理。
假設要求登入認證的Web頁面本身無法進行狀態管理,不進行狀態儲存,那麼每次跳轉到新頁面就要重新登入。
不可否認,無狀態協議的優點也是顯而易見的,因為不用儲存狀態,自然可以減少伺服器的CPU及記憶體資源的消耗
那麼如何解決上面的矛盾問題呢?
於是引入了Cookie技術,Cookie技術通過在請求和響應報文中寫入Cookie資訊來控制客戶端狀態。 |
- Cookie會根據伺服器發來的響應報文中一個叫做Set Cookie的首部欄位資訊通知客戶端儲存Cookie資訊(該資訊一般問客戶端的身份資訊等)
- 當下次客戶端再往該伺服器上傳送請求時,客戶端會自動將Cookie資訊加入請求報文中傳送出去
- 伺服器端發現客戶端發來的Cookie後,會去檢查是哪一個客戶端發來的Cookie,經對比伺服器上的記錄後,最後得到該客戶端之前的狀態資訊。