HTTP 協議入門

2021-09-26 02:40:33 字數 2294 閱讀 1104

早上看了阮一峰老師寫的 " http 協議入門 ",總結一下。

一、http

http 協議(無狀態協議)是基於 tcp/ip 協議的應用層協議,規定了客戶端與服務端的通訊格式,一般用 80 埠。

無狀態:減少伺服器的 cpu 及記憶體資源的消耗。但是不對之前發生過的請求和響應的狀態進行管理。

解決方法:引入 cookie。客戶端首次傳送請求,收到響應報文內的叫做 set-cookie 的首部字段資訊,儲存 cookie,下次請求時,自動在請求報文中加入 cookie 值後傳送出去。伺服器端收到 cookie,檢查是從哪個客戶端發來的請求,對比記錄,得到之前的狀態資訊。

http 的缺點

為什麼不一直使用 https

因為與純文字通訊對比,加密通訊會消耗更多的 cpu 及記憶體資源。所以,非敏感資訊使用 http 通訊。

二、http/0.9

三、http/1.0

請求格式

回應格式

http/1.0 200 ok   //協議版本 + 狀態碼(status code) + 狀態描述

content-type: text/plain  //回應的資料的格式,可以自定義型別

content-length: 137582

expires: thu, 05 dec 1997 16:00:00 gmt

last-modified: wed, 5 august 1996 15:55:28 gmt server: apache 0.84 hello world

缺點

每個 tcp 連線只能傳送乙個請求,傳送資料完成之後連線就關閉,如果還想請求其他的資源,必須重新建立新的 tcp 連線。

解決該缺點的乙個方法

有的瀏覽器在請求的時候,使用 connection 字段,要求伺服器不關閉 tcp 連線,以便其他請求復用,伺服器同樣回應同樣的字段:

connection: keep-alive 

四、http/1.1

缺點

雖然可以同時傳送請求,但是伺服器的回應依然是按照次序進行的,所以可能造成 「 隊頭堵塞 」。

解決方法

1、減少請求數

2、同時多開持久連線,每個請求分開在不同的 tcp 連線裡

五、http/2

小車廠 說:

引用王軍的發言:
阮老師,

您在管道機制中,提到http1.1已經支援管道機制;在同乙個tcp中,可以同時傳送多個請求;為什麼3.6缺點中卻又說,在同乙個tcp連線中,必須按照次序傳送請求,無法同時傳送?這不是自相矛盾嗎?

3.2 管道機制

1.1 版還引入了管道機制(pipelining),即在同乙個tcp連線裡面,客戶端可以同時傳送多個請求。這樣就進一步改進了http協議的效率。

舉例來說,客戶端需要請求兩個資源。以前的做法是,在同乙個tcp連線裡面,先傳送a請求,然後等待伺服器做出回應,收到後再發出b請求。管道機制則是允許瀏覽器同時發出a請求和b請求,但是伺服器還是按照順序,先回應a請求,完成後再回應b請求。

3.6 缺點

雖然1.1版允許復用tcp連線,但是同乙個tcp連線裡面,所有的資料通訊是按次序進行的。伺服器只有處理完乙個回應,才會進行下乙個回應。要是前面的回應特別慢,後面就會有許多請求排隊等著。這稱為"隊頭堵塞"(head-of-line blocking)。

我理解是這樣:管道機制下,在同乙個時間點,tcp 包含多個請求,但是這些請求有先後的順序(即使看起來好像是客戶端同時發出的,但還是有先後順序的),服務端在回應的時候就按照這種順序一一回應。

在您說的裡面,應該是按照次序回應請求,而不是傳送請求。

個人理解。

http協議入門

1 http協議是什麼?有什麼作用?http協議 超文字傳輸協議 http,hypertext transfer protocol 是網際網路上應用最為廣泛的一種網路協議以www開頭的,必定遵守http協議 有以下三種特性 超文字 超文字效果,超文字內容 傳輸 雙向的傳輸 請求 響應 一問一答機制 ...

HTTP協議入門

http協議是hypertext transfer protocol超文字傳輸協議的縮寫。http協議屬於應用層協議,它構建在tcp和ip協議之上,處於tcp ip體系架構中的頂端,使用tcp ip協議來傳輸資料。這樣一來它就不必處理下層協議間諸如丟包補發 握手及資料的分段和重新組裝等。靈活 htt...

HTTP協議入門

rtt 往返時間,指乙個分組從客戶端傳送到伺服器,然後再返回到客戶端所需的時間,包括分組傳播時延 分組在中間路由器和交換機上的排隊時延以及分組處理時延。connection closeconnection close get 最為常用,用於請求伺服器的乙個物件 post 提交表單時使用,右圖請求資料...