http處於應用層、tcp處於傳輸層、ip處於網路層
1、http將所需要傳輸的資料以流的形式傳遞給tcp程式
2、tcp解析資料中的ip位址和埠號,將資料流分割成資料段,並新增上tcp段首部,如tcp握手(ack、sync等),源埠,目的埠、tcp校驗和等
3、tcp程式將包裝好的tcp資料段叫給ip程式,ip程式在此基礎上封裝進去ip分組首部,如源ip位址、目的ip位址,資料報總長度、分組id、首部長度、首部校驗和等等
4、最紅交給資料鏈路層去傳送這個ip分組資料段
http緊挨著tcp,所以tcp的鏈結效能考慮直接影響的http事務的效能。
http事務時延
一次http請求可分為 dns查詢、連線、請求、事務處理、響應、關閉連線。每一步都會產生時延。其中,相對於連線、請求所消耗的時間,事務處理的時間是很短的。
對http程式設計師產生影響的時延
a、tcp握手建立鏈結
b、tcp慢啟動擁塞控制
c、資料聚集的nagle演算法
d、用於捎帶確認的tcp延遲確認演算法
e、time_wait 時延和埠耗盡
http連線處理
3.1 connection首部真正用途
http允許客戶端和源伺服器之間存在多個**伺服器或快取記憶體伺服器,進行http連線通訊時,可以將http首部逐跳的經過這些裝置。這個時候,怎麼在相鄰的http應用程式之間的連線應用一些特殊的選項呢?— connection首部,可以承載3種不同型別的標籤,這些標籤不會傳播到其它連線中去。
a、http首部欄位名,列出了只與此連線有關的選項
b、任意標籤,用於描述此連線的非標準選項
c、值close,說明操作完成之後需關閉這條持久連線
由於新增connection首部的其它首部字段,不能隨著報文**出去。因此將逐跳首部放入connection首部,就可以達到對首部的保護。
例:
http/1.1
200 ok
cache
-control: max
-age
=3600
connection: meter,close,bill-my
-credit
-card
meter: max
-uses
=3,max
-refuses
=6,dont-report
例項說明:不應該**meter首部,要應用假想的bill-my-credit-card選項,且本次事務後應關閉持久連線。
3.2 序列事務處理延遲
如果只對http事務進行簡單管理,tcp的效能時延可能會疊加起來,包括多次的建立連線和斷開連線。
提高http連線效能的四個方法:
3.2.1並行連線
通過多條tcp連線發起併發的http請求
並行連線從理論上回提高頁面的載入速度,因為多個請求同時發出,時延可以重疊起來。
但並行連線並不是一點更快,原因可能是:客戶端頻寬限制、消耗更多的記憶體和計算資源。
現代瀏覽器確實使用並行連線,但會限制連線數在乙個較小的值(通常是4),並且伺服器可以關閉來自特定客戶端的超量連線。
3.2.2持久連線
重用tcp連線,以消除連線及關閉的時延
重用連線:http/1.1(http/1.0增強版)允許http裝置在事務處理結束後將tcp連線保持在開啟狀態,以便為未來的http請求重用現存的連線。
3.2.2.1 持久連線+並行連線
持久的連線的管理很重要,不小心會累積出大量的空閒連線
3.2.2.2 http/1.0 + keep-alive連線
connection: keep-alive屬性出現在2023年http/1.0版本中,當初也是被當做實驗型持久連線。
可以用通用首部keep-alive屬性指定由逗號分隔的選項來調節keep-alive的行為。例:
connection:keep-alive
keep-alive: max
=5,timeout=
120
說明:伺服器還會為另外5個事務保持連線的開啟狀態,或者將開啟狀態保持到連線空閒後2分鐘。
connection屬於逐跳首部,只適用於單條傳輸鏈路。
現在http/1.1不再需要此屬性,預設開啟持久連線的。
3.2.2.3 http/1.1 持久連線
http/1.1逐漸停止了對keep-alive連線的支援,用一種名為持久連線(persistentconnection)的改進型設計取代了它。
必須顯示指定connection: close才會指定tcp連線在響應後立即關閉。當客戶端傳送了connection: close請求首部之後,客戶端就無法在那條連線上傳送更多請求了。
只有當連線上所有的報文都有正確的、自定義報文長度時,連線才能持久保持。
3.2.3管道化連線
通過共享的tcp連線發起併發的http請求
http/1.1 允許在持久連線上可選的使用請求管道。在響應到達之前,可以將多條請求放入佇列,降低網路回環時間。
注:http客戶端不應該用管道化的方式傳送會產生***的請求(比如post),因為出錯時,無法安全的重試post這樣的非冪請求。
3.2.4復用的連線
交替傳送請求和相應報文(實驗階段)
前端效能優化之減少Http請求
前言 乙個頁面的 開啟速度是其 效能最直觀的體現,那麼影響其開啟速度的因素有什麼呢?此處不再展開。本文主要聊聊關於減少http請求以達到節省時間的目的 問 減少http請求為什麼能節省時間?頁面資源的請求,80 的時間耗費在http請求上,由於tcp請求是基於連線的請求,其連線與釋放需要一定的時間。...
前端效能優化之http請求的過程
在前端面試中,經常會被問到 乙個頁面從輸入url到頁面載入顯示完成,這個過程都發生了什麼 這是前端的經典面試題之一。這個過程涉及的東西很多,區分度很高。大致分為這幾個過程 1.dns解析 2.tcp連線 3.傳送http請求 4.伺服器處理請求並返回http報文 5.瀏覽器解析渲染頁面 6.連線結束...
前端效能優化之http請求的過程
在前端面試中,經常會被問到 乙個頁面從輸入url到頁面載入顯示完成,這個過程都發生了什麼 這是前端的經典面試題之一。這個過程涉及的東西很多,區分度很高。大致分為這幾個過程 1.dns解析 2.tcp連線 3.傳送http請求 4.伺服器處理請求並返回http報文 5.瀏覽器解析渲染頁面 6.連線結束...