5分鐘讓你明白HTTP協議

Keely發表於2018-04-16

一、HTTP簡介

1.http協議介紹

  1. HTTP協議(HyperText Transfer Protocol,超文字傳輸協議)是因特網上應用最為廣泛的一種網路傳輸協議,所有的WWW檔案都必須遵守這個標準。
  2. HTTP是基於TCP/IP通訊協議來傳遞資料(HTML 檔案, 圖片檔案, 查詢結果等)
  3. HTTP協議通常承載於TCP協議之上,有時也承載於TLS或SSL協議層之上,這個時候,就成了我們常說的HTTPS。如下圖
    http/https
  4. HTTP是一個應用層協議,由請求和響應構成,是一個標準的客戶端伺服器模型。HTTP是一個無狀態的協議。
  5. HTTP預設的埠號為80,HTTPS的埠號為443。

2.http協議工作流程

一次HTTP操作稱為一個事務,其工作過程大概如下:

  1. 使用者在瀏覽器中鍵入需要訪問網頁的URL或者點選某個網頁中連結;
  2. 瀏覽器根據URL中的域名,通過DNS解析出目標網頁的IP地址;
瀏覽器請求這個頁面:http://hackr.ip/index.html
在這一步,需要域名系統DNS解析域名hackr.ip,得主機的IP地址 20X.189.105.112。
然後將上面結合本機自己的資訊,封裝成一個http請求資料包
複製程式碼
  1. 在HTTP開始工作前,客戶端首先會通過TCP/IP協議來和服務端建立連結(TCP三次握手)
  2. 建立連線後,客戶機傳送一個請求給伺服器,請求方式的格式為:統一資源識別符號(URL)、協議版本號,後邊是MIME資訊包括請求修飾符、客戶機資訊和可內容。
  3. 伺服器接到請求後,給予相應的響應資訊,其格式為一個狀態行,包括資訊的協議版本號、一個成功或錯誤的程式碼,後邊是MIME資訊包括伺服器資訊、實體資訊和可能的內容。
  4. 一般情況下,一旦Web伺服器向瀏覽器傳送了請求資料,它就要關閉TCP連線,然後如果瀏覽器或者伺服器在其頭資訊加入了這行程式碼: Connection:keep-alive,TCP連線在傳送後將仍然保持開啟狀態,於是,瀏覽器可以繼續通過相同的連線傳送請求。保持連線節省了為每個請求建立新連線所需的時間,還節約了網路頻寬。
    http連結步驟

http協議和tcp協議

2.1 短連線

短連線的操作步驟是: 建立連線——資料傳輸——關閉連線...建立連線——資料傳輸——關閉連線

如果客戶請求頻繁,將在TCP的建立和關閉操作上浪費較多時間和頻寬。

短連線

2.2 長連結

長連結,指在一個連線上可以連續傳送多個資料包,在連線保持期間,如果沒有資料包傳送,需要雙方發鏈路檢測包。

長連結操作步驟: 建立連線——資料傳輸...(保持連線)...資料傳輸——關閉連線

長連線可以省去較多的TCP建立和關閉的操作,減少浪費,節約時間

長連結分為 without pipelining 和 with pipelining,下圖中是without pipelining,客戶端只在收到前一個請求的響應後,才發出新的請求。

長連結

2.3 管線化

下圖是with pipelining,每次建立連結後無需等待請求回來就可以傳送下一個請求

管線化

3. Http請求報文

客戶端傳送一個HTTP請求到伺服器的請求訊息包括以下格式:

請求行(request line)、請求頭部(header)、請求體組成,下圖給出了請求報文的一般格式。

HTTP請求

請求行:
    方法:
        GET 獲取資源
        POST 向伺服器端傳送資料,傳輸實體主體
        PUT 傳輸檔案
        HEAD 獲取報文首部
        DELETE 刪除檔案
        OPTIONS 詢問支援的方法
        TRACE 追蹤路徑
    協議/版本號
    URL
    
請求頭:
    通用首部(General Header)
    請求首部(Request Header)
    響應首部(Response Header)
    實體首部(Entity Header Fields)
    
請求體
複製程式碼

請求報文拆解:

http請求報文

3.1 get請求

get請求

3.2 post請求

post請求

4. Http響應報文

HTTP響應組成:響應行、響應頭、響應體。

http響應

響應行
    (HTTP/1.1)表明HTTP版本為1.1版本,狀態碼為200,狀態訊息為(ok)
響應頭
    Date:生成響應的日期和時間;
    Content-Type:指定了MIME型別的HTML(text/html),編碼型別是ISO-8859-1
響應體
複製程式碼

響應報文拆解:

http響應報文

5. Http狀態碼

類別 原因
1XX Informational(資訊性狀態碼)
2XX Success(成功狀態碼)
3XX Redirection(重定向)
4XX Client Error(客戶端錯誤狀態碼)
5XX Server Error(伺服器錯誤狀態嗎)

5.1 2XX 成功

200(OK 客戶端發過來的資料被正常處理
204(Not Content 正常響應,沒有實體
206(Partial Content 範圍請求,返回部分資料,響應報文中由Content-Range指定實體內容
複製程式碼

5.2 3XX 重定向

301(Moved Permanently) 永久重定向
302(Found) 臨時重定向,規範要求,方法名不變,但是都會改變
303(See Other) 和302類似,但必須用GET方法
304(Not Modified) 狀態未改變, 配合(If-Match、If-Modified-Since、If-None_Match、If-Range、If-Unmodified-Since)
307(Temporary Redirect) 臨時重定向,不該改變請求方法
複製程式碼

5.3 4XX 客戶端錯誤

400(Bad Request) 請求報文語法錯誤
401 (unauthorized) 需要認證
403(Forbidden) 伺服器拒絕訪問對應的資源
404(Not Found) 伺服器上無法找到資源
複製程式碼

5.4 5XX 伺服器端錯誤

500(Internal Server Error)伺服器故障
503(Service Unavailable) 伺服器處於超負載或正在停機維護
複製程式碼

6. 首部

6.1 通用首部欄位

首部欄位名 說明
Cache-Control 控制快取行為
Connection 連結的管理
Date 報文日期
Pragma 報文指令
Trailer 報文尾部的首部
Trasfer-Encoding 指定報文主體的傳輸編碼方式
Upgrade 升級為其他協議
Via 代理伺服器資訊
Warning 錯誤通知

6.2 請求首部欄位

首部欄位名 說明
Accept 使用者代理可處理的媒體型別
Accept-Charset 優先的字符集
Accept-Encoding 優先的編碼
Accept-Langulage 優先的語言
Authorization Web認證資訊
Expect 期待伺服器的特定行為
From 使用者的電子郵箱地址
Host 請求資源所在的伺服器
If-Match 比較實體標記
If-Modified-Since 比較資源的更新時間
If-None-Match 比較實體標記
If-Range 資源未更新時傳送實體Byte的範圍請求
If-Unmodified-Since 比較資源的更新時間(和If-Modified-Since相反)
Max-Forwards 最大傳輸跳數
Proxy-Authorization 代理伺服器需要客戶端認證
Range 實體位元組範圍請求
Referer 請求中的URI的原始獲取方
TE 傳輸編碼的優先順序
User-Agent HTTP客戶端程式的資訊

6.3 響應首部欄位

首部欄位名 說明
Accept-Ranges 是否接受位元組範圍
Age 資源的建立時間
ETag 資源的匹配資訊
Location 客戶端重定向至指定的URI
Proxy-Authenticate 代理伺服器對客戶端的認證資訊
Retry-After 再次傳送請求的時機
Server 伺服器的資訊
Vary 代理伺服器快取的管理資訊
www-Authenticate 伺服器對客戶端的認證

6.4 實體首部欄位

首部欄位名 說明
Allow 資源可支援的HTTP方法
Content-Encoding 實體的編碼方式
Content-Language 實體的自然語言
Content-Length 實體的內容大小(位元組為單位)
Content-Location 替代對應資源的URI
Content-MD5 實體的報文摘要
Content-Range 實體的位置範圍
Content-Type 實體主體的媒體型別
Expires 實體過期時間
Last-Modified 資源的最後修改時間

參考:

  1. HTTP簡介
  2. HTTP協議詳解
  3. HTTP
  4. HTTP工作過程

相關文章