幾乎所有的http通信都是由tcp/ip承載的。
浏覽網頁時用戶端執行的操作:
如浏覽<code>http://www.joes-hardware.com:80/power-tools.html</code>
浏覽器收到這個url時,會執行如下圖的步驟。
第1-3步會将伺服器的ip位址和端口号從url中分離出來
第4步建立到web伺服器的tcp連接配接,在第5步通過這條連接配接發送一條請求封包
第6步讀取響應,第7步關閉連接配接
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicGcq5SMudmdjBTbnBjMqpWYlt2YpNjMxYWM3dGM4kjZyQTO48CXwkjN312Lc52YucWbpFmbpNnLxc3dvw1LcpDc0RHaiojIsJye.jpg)
http連接配接實際上是tcp連接配接和一些使用連接配接的規則
tcp連接配接是網際網路上的可靠連接配接,tcp為http提供一條可靠的比特傳輸管道,從tcp連接配接一端以原有的順序正确的傳送出來
tcp的資料是通過ip分組的小資料塊發送的。
http就是<code>http over tcp over ip</code>這個協定棧中最頂層的協定了。而https則是在http和tcp之間插入一個(tls或ssl)的密碼加密層
http傳送封包,以流的形式将封包資料的内容通過一條打開的tcp連接配接按序傳輸。tcp收到資料流後,将資料流砍成段(小資料塊),并将段封裝到ip分組中,通過網際網路傳輸。
tcp通過端口号來保持tcp連接配接的正确運作
ip位址和端口号類似于公司總機号碼和分機号
tcp連接配接通過4個值來識别:
這四個值唯一确定一條連接配接。
缺點:
tcp的性能時延疊加
使用者對網頁的加載速度一無所知
在有限的帶寬内,并行加載多個對象,帶來的性能提升很小
打開大量連接配接會消耗很多記憶體資源
浏覽器将并行連接配接的總數限制為一個較小的數值。伺服器可随意關閉來自特定用戶端的超量連接配接。
站點本地性(site locality)
用戶端經常打開同一個站點的連接配接,初始化對某伺服器的http請求的應用程式可能在不久後對那台伺服器發起更多請求
持久連接配接
http/1.1(以及http/1.0的各種增強版本)允許http裝置在事務處理結束後将tcp連接配接保持打開狀态,以便未來的http請求重用現存的連接配接。
避免緩慢的連接配接建立階段
避免慢啟動的擁塞适應階段
易累積大量的空閑連接配接,耗費本地和伺服器的資源
持久連接配接和并行連接配接配合使用可能是最高效的方式。
現在很多web應用程式:少量的并行連接配接,每個都是持久連接配接。
兩種類型:
<code>http/1.0+ "keep-alive"</code>
<code>http/1.1 "persistent"</code>
所有的用戶端、伺服器或代理都可以在任意時刻關閉一條tcp傳輸連接配接。
雙向的,每端都有一個輸入一個輸出隊列
關閉連接配接的輸出信道是安全的,連接配接另一端的對等實體從緩沖區讀出所有資料後收到通知,說明流結束。它就知道流關閉了。
關閉連接配接的輸入信道比較危險,向已關閉的輸入信道發送資料,作業系統會向另一端回送一條<code>tcp連接配接被重置的封包</code>
原文位址:http://www.cnblogs.com/johntsai/p/5197646.html