HTTP效能優化

2021-07-15 02:23:57 字數 2796 閱讀 4392

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.連線結束...