20200414 http協議的前世今生

2021-10-05 00:21:12 字數 3222 閱讀 3959

http 0.9是第乙個版本的http協議,已過時。它的組成極其簡單,只允許客戶端傳送get這一種請求,且不支援請求頭。由於沒有協議頭,造成了http 0.9協議只支援一種內容,即純文字。不過網頁仍然支援用html語言格式化,同時無法插入。

請求與響應支援頭域

響應物件以乙個響應狀態行開始

響應物件不只限於超文字

開始支援客戶端通過post方法向web伺服器提交資料,支援get、head、post方法

支援長連線(但預設還是使用短連線),快取機制,以及身份認證

http協議的第三個版本是http 1.1,是目前使用最廣泛的協議版本 。http 1.1是目前主流的http協議版本

persistent connection(keepalive連線)

允許http裝置在事務處理結束之後將tcp連線保持在開啟的狀態,一遍未來的http請求重用現在的連線,直到客戶端或伺服器端決定將其關閉為止。

在http1.0中使用長連線需要新增請求頭 connection: keep-alive,而在http 1.1 所有的連線預設都是長連線,除非特殊宣告不支援( http請求報文首部加上connection: close )

請求訊息和響應訊息都應支援host頭域

在http1.0中認為每台伺服器都繫結乙個唯一的ip位址,因此,請求訊息中的url並沒有傳遞主機名(hostname)。但隨著虛擬主機技術的發展,在一台物理伺服器上可以存在多個虛擬主機(multi-homed web servers),並且它們共享乙個ip位址。因此,host頭的引入就很有必要了。

新增了一批request method

http1.1增加了options,put, delete, trace, connect方法

快取處理

http/1.1在1.0的基礎上加入了一些cache的新特性,引入了實體標籤,一般被稱為e-tags,新增更為強大的cache-control頭。

多路復用(二進位制分幀)

http 2.0最大的特點: 不會改動http 的語義,http 方法、狀態碼、uri 及首部字段,等等這些核心概念上一如往常,卻能致力於突破上一代標準的效能限制,改進傳輸效能,實現低延遲和高吞吐量。而之所以叫2.0,是在於新增的二進位制分幀層。在二進位制分幀層上, http 2.0 會將所有傳輸的資訊分割為**更小的訊息和幀,**並對它們採用二進位制格式的編碼 ,其中http1.x的首部資訊會被封裝到headers幀,而我們的request body則封裝到data幀裡面。

ttp 2.0 通訊都在乙個連線上完成,這個連線可以承載任意數量的雙向資料流。相應地,每個資料流以訊息的形式傳送,而訊息由一或多個幀組成,這些幀可以亂序傳送,然後再根據每個幀首部的流識別符號重新組裝。

頭部壓縮

當乙個客戶端向相同伺服器請求許多資源時,像來自同乙個網頁的影象,將會有大量的請求看上去幾乎同樣的,這就需要壓縮技術對付這種幾乎相同的資訊。

隨時復位

http1.1乙個缺點是當http資訊有一定長度大小資料傳輸時,你不能方便地隨時停止它,中斷tcp連線的代價是昂貴的。使用http2的rst_stream將能方便停止乙個資訊傳輸,啟動新的資訊,在不中斷連線的情況下提高頻寬利用效率。

伺服器端推流: server push

客戶端請求乙個資源x,伺服器端判斷也許客戶端還需要資源z,在無需事先詢問客戶端情況下將資源z推送到客戶端,客戶端接受到後,可以快取起來以備後用。

優先權和依賴

每個流都有自己的優先級別,會表明哪個流是最重要的,客戶端會指定哪個流是最重要的,有一些依賴引數,這樣乙個流可以依賴另外乙個流。優先級別可以在執行時動態改變,當使用者滾動頁面時,可以告訴瀏覽器哪個影象是最重要的,你也可以在一組流中進行優先篩選,能夠突然抓住重點流。

http1.0和http1.1的區別

1.長連線

http 1.1支援長連線(persistentconnection)和請求的流水線(pipelining)處理,在乙個tcp連線上可以傳送多個http請求和響應,減少了建立和關閉連線的消耗和延遲,在http1.1中預設開啟connection: keep-alive,彌補了http1.0每次請求都要建立連線的缺點

2.快取處理

在http1.0中主要使用header裡的if-modified-since,expires來做為快取判斷的標準,http1.1則引入了更多的快取控制策略例如entity tag,if-unmodified-since, if-match, if-none-match等更多可供選擇的快取頭來控制快取策略

3.頻寬優化和網路連線的使用

http1.0中,存在一些浪費頻寬的現象,例如:客戶端只是需要某個物件的一部分,而伺服器卻將整個物件送過來了,並且不支援斷點續傳功能,http1.1則在請求頭引入了range頭域,它允許只請求資源的某個部分,即返回碼是206(partial content),方便了開發者自由的選擇以便於充分利用頻寬和連線

4.錯誤通知的管理

在http1.1中新增24個狀態響應碼,如

409(conflict)表示請求的資源與資源當前狀態衝突;.

410(gone)表示伺服器上的某個資源被永久性的刪除

5.host頭處理

在http1.0中認為每台伺服器都繫結乙個唯一的ip位址,因此,請求訊息中的url並沒有傳遞主機名(hostname)。但隨著虛擬主機技術的發展,在一台物理伺服器上可以存在多個虛擬主機(multi-homed web servers),並且它們共享乙個ip位址。http1.1的請求訊息和響應訊息都應支援host頭域,且請求訊息中如果沒有host頭域會報告乙個錯誤(400 bad request)

HTTP協議 與HTTP相關的協議

在tcp ip協議族中與http密不可分的有3個協議,分別是ip tcp和dns。下面簡單介紹下這3種協議。ip internet protocol 網際協議位於網路層,幾乎所有使用網路的系統都會用到 ip 協議。tcp ip 協議族中的 ip 指的就 是網際協議,ip 和 ip位址 是不同的,ip...

http協議 http的成長

http 1.x 實現簡單是以犧牲效能為代價的 二進位制分幀層 http 2.0 將報文分成 headers 幀和 data 幀,它們都是二進位制格式的。在通訊過程中,只會有乙個 tcp 連線存在,它承載了任意數量的雙向資料流 stream 服務端推送 http 2.0 在客戶端請求乙個資源時,會把...

HTTP協議?HTTP協議中POST GET H

head to inde x.html not supported.invalid method in request head htp 1.1 apache 1.3.12 server at www.fudan.edu.cn port 80 關於實體頭部的內容還可以有 last modified ...