HTTP報文的做用git
HTTP報文時是HTTP進行請求和響應時用來交換信息的,能夠理解它爲搬東西的包裹,來搬運交換的信息
由客戶端流入源端服務器,服務器處理完以後,流回(流出)用戶的Agent代理中github
報文流入源端服務器示意圖:web
全部報文的發送者都在接收者的上游
對於請求報文來講,客戶端是發送者,對於響應報文來講,服務器端是發送者算法
報文向下遊流動示意圖:瀏覽器
HTTP報文分爲兩類:緩存
請求和響應報文的基本報文結構相同,都是由三部分組成:服務器
請求報文和響應報文只有起始行的語法不一樣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規範定義了幾種首部字段,應用程序也能夠隨意發明本身所用的首部
既能夠出如今請求報文中,也能夠出如今響應報文中
字段 | 描述 |
---|---|
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狀態碼被分爲五大類:
狀態碼 | 短語描述 | 描述 |
---|---|---|
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 | 因爲超載或停機維護,服務器目前沒法使用,一段時間後可能恢復正常 |