HTTP 協議圖解


在這里插入圖片描述

微信公眾號:碼農充電站pro
個人主頁:https://codeshellme.github.io

HTTP 協議是一個非常重要的網絡協議,我們平時能夠使用瀏覽器瀏覽網頁,其中一個非常重要的條件就是HTTP 協議

0,什么是網絡協議

在這里插入圖片描述

互聯網的目的是分享信息,網絡協議是互聯網的重要組成部分。

在互聯網誕生之前,計算機中的信息是無法跨機器傳輸的。為了更方便的分享信息,誕生了互聯網。

信息能夠在不同的計算機之間快速傳輸,其基礎技術就是網絡。信息的傳輸,則涉及到信息的發送接收,那我們就得知道如何發送信息如何接收信息

協議就是約定網絡協議就約定了信息在網絡之間是如何傳輸的,即如何發送如何接收

協議分層

網絡協議不是一個協議,而是一堆協議。

網絡是分層的,分層的好處是,層與層之間分工明確,互不干預。其可分為四層網絡協議五層網絡協議七層網絡協議,粗略一點可以分為四層,詳細一點則可以分為五層或七層。

每一層網絡都有一組協議,被稱為協議簇

在這里插入圖片描述

1,什么是HTTP 協議

HTTP 全稱為HyperText Transfer Protocol,即超文本傳輸協議。從字面上理解,其作用就是傳輸超文本超文本超級文本,它用超級鏈接的方式,將互聯網中無數的文檔鏈接在一起。

可以簡單的將超文本理解為我們平時上網瀏覽的網頁,所以可以認為HTTP 協議的作用就是傳輸網頁。

2,HTTP 的發展歷史

在這里插入圖片描述

HTTP 協議由英國計算機科學家蒂姆·伯納斯於1989年在歐洲發起,蒂姆·伯納斯 作為HTTP 的發明者,對HTTP 的發展起到了至關重要的作用,他被稱為互聯網之父。2017年,他因發明萬維網、第一個瀏覽器和使萬維網得以擴展的基本協議和算法而獲得2016年度的圖靈獎

HTTP 協議標准由W3CIETF 共同制定,最終發布一系列的RFC

HTTP 協議重要的發展階段如下:

  • 1989年,由蒂姆·伯納斯 發起
  • 1991年,發布HTTP/0.9,這是HTTP 協議的第一個版本,也是最簡單的版本,只支持一個GET 方法,並且只能傳輸簡單的文本字符串。
  • 1996年,發布HTTP/1.0,其內容大大增加,可傳輸圖像視頻二進制格式等豐富的網頁。支持GETPOSTHEAD 三種方法,增加了HTTP Header頭信息,狀態碼內容編碼等功能。
  • 1997年,發布HTTP1.1,是較為完整的版本。在之前的基礎上,其主要引入了持久連接分塊傳輸等功能。另外,增加了OPTIONSPUTPATCHDELETETRACECONNECT方法。對於客戶端,引入了重要的Host 頭部字段,用來指定服務器的域名,使得一個請求可以發往同一台服務器上的不同網站,為虛擬主機的流行打下基礎。
  • 2009年,谷歌公開了其自主研發的SPDY 協議,主要解決HTTP1.1 效率不高的問題。SPDY 協議的主要特性被引入了HTTP/2 中。
  • 2015年,發布HTTP/2,而不是HTTP/2.0,是因為標准委員會不打算再發布子版本,下一個新版本將直接是 HTTP/3
年份 事件
1989年 蒂姆·伯納斯 發起
1991年 發布HTTP/0.9
1996年 發布HTTP/1.0
1997年 發布HTTP/1.1
2009年 谷歌公布SPDY
2015年 發布HTTP/2

3,HTTP 所在的網絡層次

HTTP 協議建立在Tcp/Ip 協議之上,HTTP 屬於應用層協議。其協議層結構如下:

在這里插入圖片描述

4,HTTP 請求與響應

HTTP 協議是一個請求-響應式協議,一般由客戶端(比如瀏覽器)向服務端發起,服務端處理后,再向客戶端返回信息。

客戶端發出的消息稱為HTTP 請求Request),服務端返回的消息稱為HTTP 響應Response)。

在這里插入圖片描述

每種協議都有它的消息結構,有了消息結構,發送方就知道以怎樣的結構發送消息,接收方就知道以怎樣的結構接收消息。下面介紹HTTP 消息結構。

5,HTTP 請求消息結構

在這里插入圖片描述
由上圖可看出,HTTP 請求由四部分組成:

  • 請求行:分別是請求方法+空格+URL+空格+協議版本+\r\n
  • 請求頭部:由多個請求頭部鍵值對組成,中間以冒號:隔開,每個鍵值對最后是\r\n
  • 空行:即\r\n
  • 請求包體:包體部分

例子:

GET / HTTP/1.0
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5)
Accept: */*

其中:

  • 第1行是請求行GET 為請求方法,/URLHTTP1.0 為協議版本,中間以空格隔開。
  • 第2行與第3行是請求頭
  • 請求頭下面的空行,這里沒有顯示。
  • 一般GET 請求不包含請求體,所以本請求中沒有請求體。

6,HTTP 請求響應結構

在這里插入圖片描述

由上圖可看出,HTTP 響應由四部分組成:

  • 狀態行:分別是協議版本+空格+狀態碼+空格+狀態碼描述+\r\n
  • 響應頭部:由多個響應頭部鍵值對組成,中間以冒號:隔開,每個鍵值對最后是\r\n
  • 空行:即\r\n
  • 響應包體:包體部分

例子:

HTTP/1.0 200 OK 
Content-Type: text/plain
Content-Length: 82
Expires: Thu, 05 Dec 1997 16:00:00 GMT
Last-Modified: Wed, 5 August 1996 15:55:28 GMT
Server: Apache 0.84

<html>
  <body>Hello HTTP</body>
</html>

其中:

  • 第1行為響應狀態行HTTP/1.0 為協議版本,200 是響應狀態碼OK狀態碼描述,中間用空格隔開。
  • 第2行到第6行為響應頭
  • 第7行為空行
  • 第8行到第10行為響應內容

7,HTTP 請求方法

HTTP 協議支持9 種請求方法,最常用的是GETPOST 方法。

HTTP 方法 含義
GET 獲取指定頁面信息
HEAD 類似GET 請求,但響應中沒有具體內容,只有響應Header
POST 向指定URL 提交信息
PUT 向服務器傳送數據
DELETE 請求服務器刪除指定內容
OPTIONS 查看服務器信息
TRACE 回顯服務器收到的請求,主要用於測試或診斷
PATCH 是對PUT 方法的補充,用來對已知資源進行局部更新
CONNECT HTTP/1.1 協議中預留給能夠將連接改為管道方式的代理服務器

8,HTTP GET 與POST 方法

GET 方法POST 方法是最常用的兩個HTTP 方法,來看下其異同點:

  • 請求內容存放位置不同:GET 方法一般沒有請求體,其請求內容放在URL 參數中,POST 方法則將請求內容放在請求體中。
  • POST 方法 安全性更高:GET 請求一般是明文傳輸,不利於傳輸敏感數據。POST 請求內容在請求體中,更方便加密,提高安全性。
  • POST 方法傳輸的數據量更大:GET 請求內容在URL 中,因此有大小限制,而POST 請求 內容在請求體中,理論上沒有大小限制。

9,HTTP 請求頭字段

這里介紹一些常用的HTTP 請求頭字段:

Host:客戶端端請求的域名。

Connection:告訴服務端,處理完本請求后,是否關閉連接。

User-Agent:客戶端使用的瀏覽器或APP 類型/版本。

Accept:客戶端支持哪些類型的文檔。

Accept-Encoding :客戶端支持的編碼類型。

Accept-Language :客戶端支持的語言類型。

Referer :客戶端從哪個網頁過來的。

Cache-Control:指定緩存機制。

10,HTTP 響應頭字段

這里介紹一些常用的HTTP 響應頭字段:

Allow:表明服務器支持哪些請求方法,如GET,POST 等。

Content-Encoding:響應內容編碼方法。

Content-Type:響應內容屬於什么MIME 類型。

Content-Length:響應內容的長度。

Date:當前GMT 時間。

Expiress:響應內容過期時間,過期后將不再緩存內容。

Last-Modified:文檔的最后改動時間。

Location:告訴客戶端到哪里獲取文檔,一般用於重定向。

Refresh:瀏覽器在多少秒后刷新文檔。

Server:服務器名字。

Set-Cookie:設置和頁面關聯的Cookie。

Date:表示消息發送時間。

11,HTTP 響應狀態碼

服務器在向客戶端返回內容時,會帶有一個HTTP Status Code(狀態碼),用於告訴客戶端的返回狀態。

HTTP 狀態碼分為5 種類型,由三個十進制數字組成。第一個數字(1-5)代表狀態碼的分類,后兩位是其含義。

狀態碼類型 含義
1xx 表明服務器已經收到請求
2xx 表明服務器已經成功接收並處理請求
3xx 表明請求的資源已重定向到其它地方
4xx 表明客戶端的請求有錯誤
5xx 表明服務端出現錯誤

常見狀態碼:

常見狀態碼 狀態碼描述 含義
100 Continue 客戶端應繼續其請求
200 OK 請求成功,一般用於GET與POST請求
301 Moved Permanently 請求的資源已被永久重定向到新地址
302 Found 請求的資源已被臨時重定向到新地址
304 Not Modified 客戶端訪問的內容未修改,應從緩存中獲取內容
400 Bad Request 客戶端的請求有誤
401 Unauthorized 請求要求客戶端進行身份認證
403 Forbidden 服務器拒絕客戶端訪問
404 Not Found 客戶端請求的資源,服務端不存在
405 Method Not Allowed 客戶端請求中的方法被禁止
500 Internal Server Error 服務器內部錯誤
501 Not Implemented 服務器不支持該請求
503 Service Unavailable 服務器過載,暫時不可用
505 HTTP Version not supported 客戶端使用的HTTP版本,服務端不支持

12,用瀏覽器演示HTTP

下面通過一個例子實際感受以下HTTP 協議。

在瀏覽器(我這里用的是Chrome)中訪問新浪網https://www.sina.com.cn/,通過F12鍵,調出瀏覽器開發者工具

在這里插入圖片描述

  1. 點擊Network,可查看網絡請求
  2. 點擊某個請求,可查看該請求信息
  3. 點擊Response Header,可查看響應頭內容
  4. 點擊Request Header,可查看請求頭信息
  5. 點擊點擊Response,可查看響應內容

13,用curl 命令演示HTTP

curl 命令可以發送HTTP(S) 協議,這里curl 命令的常用方法。

我們使用 curl -v 參數 來顯示詳細的HTTP 協議包信息:

在這里插入圖片描述

14,什么是HTTP/2

HTTP/2 可看作是HTTP1.x 的增強版,其主要解決HTTP1.x 的效率等問題,其消息結構也已經發生了改變。

我們來訪問https://http2.akamai.com/demo,來感受下HTTP2的速度。HTTP/1.1 耗時15 秒多,HTTP/2耗時6 秒多。

在這里插入圖片描述

HTTP2 有如下特點:

  • HTTP2 是一個徹底的二進制協議,所有信息以二進制格式傳輸。
  • HTTP2 支持多工(Multiplexing),在一個TCP 鏈接中可同時處理多個HTTP 請求。
  • HTTP2 中的數據流不是按照順序發送的,是亂序的。
  • HTTP2 支持頭信息壓縮
  • HTTP2 支持服務端主動向客戶端發送信息。

15,什么是HTTPS

在這里插入圖片描述

HTTPS 中的S 是指Security,即是安全的意思,所以HTTPS 就是安全的HTTP

HTTPS 在HTTP 協議的基礎上加入了一層SSL/TLS,用於對HTTP 信息加密,其加密采用非對稱加密算法RSA 算法。其協議層結構如下:

在這里插入圖片描述

(完。)


歡迎關注作者公眾號,獲取更過技術干貨。

碼農充電站pro


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM