讀書筆記:《圖解HTTP》第三章 HTTP報文

原文地址
博客積累地址html

HTTP報文的做用git

HTTP報文時是HTTP進行請求和響應時用來交換信息的,能夠理解它爲搬東西的包裹,來搬運交換的信息

報文流

  • HTTP報文在HTTP應用程序(客戶端、服務器、代理)之間發送數據塊,這些數據塊以文本形式描述了報文的內容和含義。
  • 這些報文在客戶端、服務器、代理之間流動,稱之報文流,用流入、流出、上游和下游這些術語描述報文流動的方向

報文如何流動

報文是由客戶端流入服務器的

由客戶端流入源端服務器,服務器處理完以後,流回(流出)用戶的Agent代理中github

報文流入源端服務器示意圖:
報文流入源端服務器示意圖web

全部報文都會向下遊流動

全部報文的發送者都在接收者的上游
對於請求報文來講,客戶端是發送者,對於響應報文來講,服務器端是發送者算法

報文向下遊流動示意圖:
報文向下遊流動瀏覽器

報文的組成部分

報文語法

HTTP報文分爲兩類:緩存

  • 請求報文:客戶端向web服務器請求一個動做
  • 響應報文: 服務器將請求結果返回給客戶端

請求和響應報文的基本報文結構相同,都是由三部分組成:服務器

  1. 起始行:對報文進行描述
  2. 首部:一些屬性
  3. 主體:數據【可選】

請求報文和響應報文只有起始行的語法不一樣frontend

  • 請求報文結構
<method> <request-url> <version>
<header>

<entity-body>
  • 響應報文結構
<version> <status-code> <reason-phrase>
<header>

<entity-body>

下面是對各部分的簡要說明:ide

字段名 描述
方法(method) HTTP請求方法
請求url (request-url) 請求資源的路徑
版本(version) 使用的HTTP版本,格式爲: HTTP/<主要版本號>.<次要版本號>
狀態碼(status-code) 數字HTTP狀態碼,用於描述請求過程的狀態,好比成功、失敗
緣由短語(reason-phrase) 上面數字狀態碼的簡短文本描述
首部(header) 能夠有0或多個首部。格式爲: <名字>:<值>,以空行結束
主體(entity-body) 包含由任意數據組成的數據塊,並非全部報文都有主體

請求和響應報文示例:
請求和響應報文示例

起始行

上面咱們知道HTTP報文分爲請求報文和響應報文兩類,並且只有起始行不一樣

這裏咱們是請求報文的起始行爲請求行,響應報文的起始行爲響應行

HTTP報文-首部部分

HTTP報文的首部字段向請求和響應報文中添加一些附加信息,本質上來講,它們只是一些<名字>/<值>對的列表

首部分類

HTTP規範定義了幾種首部字段,應用程序也能夠隨意發明本身所用的首部

  • 通用首部

既能夠出如今請求報文中,也能夠出如今響應報文中

字段 描述
Cache-Control 經過指定首部字段Cache-Control的指令,就能操做緩存的工做機制。
Connection 控制不在轉發給代理的首部字段;管理持久鏈接。
Data 代表建立HTTP報文的時間和日期。
Pragma 只用在客戶端發送的請求中,全部的中間服務器不返回緩存的資源。
Trailer 事先說明報文主體後記錄了哪些首部字段。一樣能夠用在分塊傳輸編碼時。
Transfer-Encoding 規定了傳輸報文主體時採用的編碼方式。
Upgrade 用於檢測HTTP協議及其餘協議是否可使用更高的版本進行通訊。
Via 爲了追蹤客戶端與服務器之間的請求和響應報文的傳輸路徑。
Warning 一般會告知用戶一些與緩存相關的問題的警告
  • 請求首部

提供請求相關的信息

字段 描述
Accept 該字段可通知服務器,用戶代理可以處理的媒體類型及媒體類型的相對優先級。
Accept-Charset 用來通知服務器用戶代理支持的字符集及字符集的相對優先順序,可一次性指定多種字符集。
Accept-Encoding 用來告知服務器用戶代理支持的內容編碼及內容編碼的優先級順序。
Accept-Language 用來告知服務器用戶代理嫩鞏固處理的天然語言集(中文或英文等),以及天然語言集的相對優先級。
Authorization 用來告知服務器,用戶代理的認證信息。
Expect 客戶端使用首部字段Except來告知服務器,指望出現的某種指定行爲。
From 用來告知服務器使用用戶代理的用戶的電子郵件地址。
Host 告知服務器,請求的資源所處的互聯網主機名和端口號。Host首部字段在HTTP/1.1規範內是惟一一個必須包含在請求內的首部字段。
If-Match 相似於If-xxx這樣的請求首部,能夠稱爲條件請求。
If-Modified-Since 告知服務器若該字段值早於資源的更新時間,則但願能處理該請求。
If-None-Match 該字段值得實體標記值與請求資源的ETag不一致時,它就告知服務器處理該請求。
If-Range 它告知服務器若指定的If-Range字段值和請求資源的ETag值或時間相一致時,則做爲範圍請求處理。反之則返回全體資源。
If-Unmodified-Since 告知服務器,指定的請求資源只有在字段值內指定的日期時間以後,未發生更新的狀況下,才能處理請求。
Max-Forwards 經過TRACE方法或OPTIONS方法,發送包含首部字段Max-Forwards的請求時,該字段以十進制整數形式指定可通過的服務器最大數目。當服務器接收到Max-Forwards值爲0的請求時,則再也不進行轉發,而是直接返回響應。
Proxy-Authorization 客戶端會發送包含首部字段Proxy-Authorization的請求,以告知服務器認證所須要的信息。
Range 告知服務器資源的指定範圍。
TE 告知服務器客戶端可以處理響應的傳輸編碼方式及相對優先級。
User-Agent 將建立請求的瀏覽器用戶代理名稱等信息傳達給服務器
  • 響應首部

提供響應相關的信息

字段 描述
Accept-Ranges 用來告知客戶端服務器是否可以處理範圍請求,以指定獲取服務器端某個部分的資源。
Age 告知客戶端,源服務器在多久前建立了響應。單位秒。
ETag 告知客戶端實體標識,它是一種可將資源以字符串形式作惟一標識的方式。
Location 能夠將響應接收方引導至某個與請求URI位置不一樣的資源。
Proxy-Authenticate 把由代理服務器所要求的認證信息發送給客戶端。
Retry-After 告知客戶端應該在多久以後再次發送請求。
Server 告知客戶端當前服務器上安裝的HTTP服務器應用程序的信息。
Vary 可對緩存進行控制,源服務器迴向代理服務器傳達關於本地緩存使用方法的命令。
WWW-Authenticate 用於HTTP訪問認證
  • 實體首部

描述主體的長度和內容,或者資源自身

字段 描述
Allow 用於通知客戶端可以支持Request-URI指定資源的全部HTTP方法。
Content-Encoding 告知客戶端服務器對實體的主體部分選用的內容編碼方式。(gzip/compress/deflate/identity)
Content-Language 告知客戶端,實體主體使用的天然語言。(中文或英文等語言)
Content-Length 代表了實體主體部分的大小。
Content-Location 給出與報文主體返回資源對應的URI。
Content-MD5 是一串由MD5算法生成的值,其目的在於檢查報文主體在傳輸過程當中是否保持完整,以及確認傳輸到達。
Content-Range 針對範圍請求,返回響應時使用的首部字段,能告知客戶端做爲相應返回的實體的哪一個部分符合範圍請求。
Content-Type 說明了實體主體內對象的媒體類型,該字段用type/subtype形式賦值。
Expires 會將資源失效的日期告知客戶端。
Last-Modified 指明資源最終修改的時間
  • 拓展首部

規範中沒有定義的新首部

HTTP狀態碼

HTTP狀態碼被分爲五大類:

  • 1xx: 信息性狀態碼,表示接收到請求而且繼續處理
  • 2xx: 成功狀態碼,表示動做被成功接收、理解和接受
  • 3xx: 重定向狀態碼,爲了完成指定的動做,必須接受進一步處理
  • 4xx: 客戶端錯誤狀態碼,請求包含錯誤語法或不能正確執行
  • 5xx: 服務器錯誤狀態碼,服務器不能正確執行一個正確的請求

經常使用狀態碼

狀態碼 短語描述 描述
100 Continue 繼續,通常在發送post請求時,已發送了http header以後服務端將返回此信息,表示確認,以後發送具體參數信息
200 OK 正常返回信息
201 Created 請求成功而且服務器建立了新的資源
202 Accepted 服務器已接受請求,但還沒有處理
301 Moved Permanently 請求的網頁已永久移動到新位置。
302 Found 臨時性重定向。
303 See Other 臨時性重定向,且老是使用 GET 請求新的 URI。
304 Not Modified 自從上次請求後,請求的網頁未修改過。
400 Bad Request 服務器沒法理解請求的格式,客戶端不該當嘗試再次使用相同的內容發起請求。
401 Unauthorized 請求未受權。
403 Forbidden 禁止訪問。
404 Not Found 找不到如何與 URI 相匹配的資源。
500 Internal Server Error 最多見的服務器端錯誤。
503 Service Unavailable 服務器端暫時沒法處理請求(多是過載或維護)

完整版狀態碼

狀態碼 描述
100 客戶必須繼續發出請求
101 客戶要求服務器根據請求轉換HTTP協議版本
200 代表該請求被成功地完成,所請求的資源發送回客戶端
201 提示知道新文件的URL
202 接受和處理、但處理未完成
203 返回信息不肯定或不完整
204 請求收到,但返回信息爲空
205 服務器完成了請求,用戶代理必須復位當前已經瀏覽過的文件
206 服務器已經完成了部分用戶的GET請求
300 請求的資源可在多處獲得
301 本網頁被永久性轉移到另外一個URL
302 請求的網頁被轉移到一個新的地址,但客戶訪問仍繼續經過原始URL地址,重定向,新的URL會在response中的Location中返回,瀏覽器將會使用新的URL發出新的Request。
303 建議客戶訪問其餘URL或訪問方式
304 自從上次請求後,請求的網頁未修改過,服務器返回此響應時,不會返回網頁內容,表明上次的文檔已經被緩存了,還能夠繼續使用
305 請求的資源必須從服務器指定的地址獲得
306 前一版本HTTP中使用的代碼,現行版本中再也不使用
307 申明請求的資源臨時性刪除
400 客戶端請求有語法錯誤,不能被服務器所理解
401 請求未經受權
402 保留有效ChargeTo頭響應
403 禁止訪問,服務器收到請求,可是拒絕提供服務
404 一個404錯誤代表可鏈接服務器,但服務器沒法取得所請求的網頁,請求資源不存在。eg:輸入了錯誤的URL
405 用戶在Request-Line字段定義的方法不容許
406 根據用戶發送的Accept拖,請求資源不可訪問
407 相似401,用戶必須首先在代理服務器上獲得受權
408 客戶端沒有在用戶指定的餓時間內完成請求
409 對當前資源狀態,請求不能完成
410 服務器上再也不有此資源且無進一步的參考地址
411 服務器拒絕用戶定義的Content-Length屬性請求
412 一個或多個請求頭字段在當前請求中錯誤
413 請求的資源大於服務器容許的大小
414 請求的資源URL長於服務器容許的長度
415 請求資源不支持請求項目格式
416 請求中包含Range請求頭字段,在當前請求資源範圍內沒有range指示值,請求也不包含If-Range請求頭字段
417 服務器不知足請求Expect頭字段指定的指望值,若是是代理服務器,多是下一級服務器不能知足請求長
500 服務器遇到錯誤,沒法完成請求
502 網關錯誤
503 因爲超載或停機維護,服務器目前沒法使用,一段時間後可能恢復正常
相關文章
相關標籤/搜索