瞭解HTTP協議,這一篇就夠了
1、HTTP協議簡介
1.1、HTTP協議是超文字傳輸協議的簡稱,工作於應用層,用於從伺服器傳輸超文字到本地瀏覽器。HTTP協議本身是一種無狀態的,也沒法自己傳輸資料,底層的資料傳輸協議是TCP協議。HTTP協議工作於客戶端-服務端架構為上。瀏覽器作為HTTP客戶端通過URL向HTTP服務端即WEB伺服器傳送所有請求。Web伺服器根據接收到的請求後,向客戶端傳送響應資訊。
左圖為HTTP的請求-響應模型
1.2、HTTP歷史版本介紹
1.2.1、HTTP1.0最早在網頁中使用是在1996年,那個時候只是使用一些較為簡單的網頁上和網路請求上,而HTTP1.1則在1999年才開始廣泛應用於現在的各大瀏覽器網路請求中,同時HTTP1.1也是當前使用最為廣泛的HTTP協議。 主要區別主要體現在:
-
快取處理,在HTTP1.0中主要使用header裡的If-Modified-Since,Expires來做為快取判斷的標準,HTTP1.1則引入了更多的快取控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供選擇的快取頭來控制快取策略。
-
頻寬優化及網路連線的使用,HTTP1.0中,存在一些浪費頻寬的現象,例如客戶端只是需要某個物件的一部分,而伺服器卻將整個物件送過來了,並且不支援斷點續傳功能,HTTP1.1則在請求頭引入了range頭域,它允許只請求資源的某個部分,即返回碼是206(Partial Content),這樣就方便了開發者自由的選擇以便於充分利用頻寬和連線。
-
錯誤通知的管理,在HTTP1.1中新增了24個錯誤狀態響應碼,如409(Conflict)表示請求的資源與資源的當前狀態發生衝突;410(Gone)表示伺服器上的某個資源被永久性的刪除。
-
Host頭處理,在HTTP1.0中認為每臺伺服器都繫結一個唯一的IP地址,因此,請求訊息中的URL並沒有傳遞主機名(hostname)。但隨著虛擬主機技術的發展,在一臺物理伺服器上可以存在多個虛擬主機(Multi-homed Web Servers),並且它們共享一個IP地址。HTTP1.1的請求訊息和響應訊息都應支援Host頭域,且請求訊息中如果沒有Host頭域會報告一個錯誤(400 Bad Request)。
-
長連線,HTTP 1.1支援長連線(PersistentConnection)和請求的流水線(Pipelining)處理,在一個TCP連線上可以傳送多個HTTP請求和響應,減少了建立和關閉連線的消耗和延遲,在HTTP1.1中預設開啟Connection: keep-alive,一定程度上彌補了HTTP1.0每次請求都要建立連線的缺點。
1.2.2、在 HTTP/2 的第一版草案(對 SPDY 協議的復刻)中,新增的效能改進不僅包括HTTP/1.1中已有的多路複用,修復隊頭阻塞問題,允許設定設定請求優先順序,還包含了一個頭部壓縮演算法(HPACK)。此外, HTTP/2 採用了二進位制而非明文來打包、傳輸客戶端—伺服器間的資料。
1.幀、訊息、流和TCP連線
有別於HTTP/1.1在連線中的明文請求,HTTP/2與SPDY一樣,將一個TCP連線分為若干個流(Stream),每個流中可以傳輸若干訊息(Message),每個訊息由若干最小的二進位制幀(Frame)組成。這也是HTTP/1.1與HTTP/2最大的區別所在。 HTTP/2中,每個使用者的操作行為被分配了一個流編號(stream ID),這意味著使用者與服務端之間建立了一個TCP通道;協議將每個請求分割為二進位制的控制幀與資料幀部分,以便解析。這個舉措在SPDY中的實踐表明,相比HTTP/1.1,新頁面載入可以加快11.81% 到 47.7%
2.HPACK 演算法
HPACK演算法是新引入HTTP/2的一個演算法,用於對HTTP頭部做壓縮
3.伺服器推送
網站為了使請求數減少,通常採用對頁面上的圖片、指令碼進行極簡化處理。但是,這一舉措十分不方便,也不高效,依然需要諸多HTTP連結來載入頁面和頁面資源。
HTTP/2引入了伺服器推送,即服務端向客戶端傳送比客戶端請求更多的資料。這允許伺服器直接提供瀏覽器渲染頁面所需資源,而無須瀏覽器在收到、解析頁面後再提起一輪請求,節約了載入時間。
2、HTTP協議特點
1.支援客戶/伺服器模式。
2.簡單快速:客戶向伺服器請求服務時,只需傳送請求方法和路徑。請求方法常用的有GET、HEAD、POST。每種方法規定了客戶與伺服器聯絡的型別不同。由於HTTP協議簡單,使得HTTP伺服器的程式規模小,所以通訊速度很快。
3.靈活:HTTP允許傳輸任意型別的資料物件。正在傳輸的型別由Content-Type加以標記。
4.無連線:無連線的含義是限制每次連線只處理一個請求。伺服器處理完客戶的請求,並收到客戶的應答後,即斷開連線。採用這種方式可以節省傳輸時間。
5.無狀態:HTTP協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。缺少狀態意味著如果後續處理需要前面的資訊,則它必須重傳,這樣可能導致每次連線傳送的資料量增大。另一方面,在伺服器不需要先前資訊時它的應答就較快。
3、HTTP的Request資訊和Response資訊
3.1、請求訊息Request
客戶端傳送給伺服器一個HTTP請求資訊包括如下幾個部分:
請求行(request line):請求方法、請求資料和HTTP版本號
請求頭部(request header):伺服器的附加資訊
空行:這是必須的部分
請求資料(body):可以新增任何資料
3.2、請求資訊Response
伺服器接受並處理完request請求後,會返回給客戶端一個Response響應訊息
Response訊息由四個部分組成:
狀態行:HTTP版本號、狀態碼和狀態訊息
訊息報頭:Date:生成響應的日期和時間;Content-Type:指定了MIME型別的HTML(text/html),編碼型別是UTF-8
空行:空行是必須的,和request訊息裡一樣
響應正文:伺服器返回給客戶端HTML程式碼
4、HTTP狀態碼
4.1、狀態程式碼有三位數字組成,第一個數字定義了響應的類別,共分五種類別:
1xx:指示資訊--表示請求已接收,繼續處理
2xx:成功--表示請求已被成功接收、理解、接受
3xx:重定向--要完成請求必須進行更進一步的操作
4xx:客戶端錯誤--請求有語法錯誤或請求無法實現
5xx:伺服器端錯誤--伺服器未能實現合法的請求
4.2、常見狀態碼
200 OK //客戶端請求成功
400 Bad Request //客戶端請求有語法錯誤,伺服器無法理解
401 Unauthorized //請求未經授權
403 Forbidden //伺服器接受請求但是拒絕服務
404 Not Found //請求資源不存在
500 Internal Server Error //伺服器發生不可預期的錯誤
503 Server Unavailable //伺服器當前不能處理客戶端的請求,過一段時間可能恢復正常
5、HTTP請求方法
根據HTTP標準,HTTP請求可以使用多種請求方法。
HTTP1.0定義了三種請求方法: GET, POST 和 HEAD方法。
HTTP1.1新增了五種請求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
請求方法 |
功能 |
---|---|
請求方法 |
功能 |
POST |
向指定資源提交資料進行處理請求(例如提交表單或者上傳檔案)。資料被包含在請求體中。POST請求可能會導致新的資源的建立和/或已有資源的修改。 |
HEAD |
類似於get請求,只不過返回的響應中沒有具體的內容,用於獲取報頭 |
OPTIONS |
允許客戶端檢視伺服器的效能 |
PUT |
從客戶端向伺服器傳送的資料取代指定的文件的內容。 |
DELETE |
請求伺服器刪除指定的頁面 |
TRACE |
回顯伺服器收到的請求,主要用於測試或診斷。 |
CONNECT |
HTTP/1.1協議中預留給能夠將連線改為管道方式的代理伺服器。 |
GET |
請求指定的頁面資訊,並返回實體主體。 |
6、HTTP工作原理及流程
6.1工作原理
HTTP協議的工作原理很好理解,使用者通過客戶端向服務端發起一個請求,建立一個TCP連線,指定埠號,預設是80,然後連線到伺服器工作。在那個埠監聽瀏覽器請求。一旦監聽到客戶端請求,分析請求型別後,伺服器會向客戶端返回一個響應狀態,比如"HTTP/1.0 404 OK",同時會返回特定的資料內容,如請求的資源,錯誤程式碼,其它狀態資訊等等。
6.2工作流程
在瀏覽器位址列鍵入URL,按下回車之後會經歷以下流程:
1、瀏覽器向 DNS 伺服器請求解析該 URL 中的域名所對應的 IP 地址;
2、解析出 IP 地址後,根據該 IP 地址和預設埠 80,和伺服器建立TCP連線;
3、瀏覽器發出讀取檔案(URL 中域名後面部分對應的檔案)的HTTP 請求,該請求報文作為 TCP三次握手的第三個報文的資料傳送給伺服器;
4、伺服器對瀏覽器請求作出響應,並把對應的 html 文字傳送給瀏覽器;
5、釋放 TCP連線
6、瀏覽器將該 html 文字並顯示內容;
首發於頭條號:https://www.toutiao.com/i6622938378771890696/
歡迎訪問哦