讀HTTP協議(RFC-2616)總結
1.資源(Resource)
什麼是資源,首先我們看《架構風格與基於網路的軟體架構設計》的作者:Roy Thomas Fielding對資源的一個說明
更精確地說,資源R是一個隨時間變化的成員函式MR(t),該函式將時間t對映到等價的一個實體或值的集合,集合中的值可能是資源的表現和/或資源的識別符號。一個資源可以對映到空集,這允許在一個概念的任何實現存在之前引用這個概念——這一觀念對於Web之前的大多數超文字系統來說比較陌生 [61]。一些資源在它們被建立後的任何時刻來檢查,它們都對應著相同的值的集合,從這個意義上說它們是靜態的。其他的資源所對應的值則會隨時間而頻繁地變化。對於一個資源來說,唯一必須是靜態的是對映的語義,因為語義才是區別資源的關鍵。
簡而言之,資源是一個抽象的東西,而在具體資源訪問時,會根據內容協商的結果表示成一個具體表述(Representations)。每個資源由統一的資源識別符號(URI)來描述,類似於資源的ID,或者說資源的地址。
2.表述(Representations)
表述是資源的具體表現形式,譬如,今天深圳的天氣(資源),可以使用一副天氣jpg圖來描述,也可以XML資料來描述,也可以使用HTML的頁面來描述,一種資源可以有多種表述,也就是說,通過同一個URI地址可以獲取到多種表現形式,而具體怎麼表現,則取決於Web客戶端與Web服務端內容協商的一個結果。
3.內容協商
客戶端和服務端通過內容協商來協商請求內容和響應內容的格式,主要協商的內容包括:
請求協商:
1)字符集(Accept-Charset):客戶端通過傳送該協商建議服務端使用該字符集來傳送響應結果,譬如
Accept-Charset=gb2312,utf-8;q=0.7,*;q=0.7,客戶端建議服務端優先使用gb2312或者utf-8來傳送響應結果
2)請求編碼(Accept-Encoding):客戶端告訴服務端客戶端所支援的編碼格式,譬如Accept-Encoding =gzip,deflate表明客戶端支援gzip壓縮或者普通響應的結果
3)語言(Accept-Language):客戶端通過傳送該協商告訴服務端客戶端所使用的語言,譬如Accept-Language=zh-cn,zh;q=0.5表明客戶端偏號的語言是中文,譬如對於”今天深圳的天氣“這個資源來說,服務端可以通過該選項決定使用什麼語言來表述資源
4)表述偏好(Accept):客戶端通過該選項告訴服務端其表述的偏號,譬如一個請求”今天深圳的天氣“的Ajax程式,可以通過設定表述偏好為Accept=application/json來告訴服務端,希望得到Json描述的結果,而一個瀏覽器則可以通過傳輸表述偏好為Accept=text/html來告訴服務端,希望得到Html描述的結果
響應協商:
1)表述/表述字符集(Content-Type):服務端通過該協商告訴客戶端表述的格式和字符集的情況,譬如Content-Type=text/html; charset=utf-8表示響應內容格式為Html,字符集為utf-8
2)表述編碼(Accept-Encoding):服務端通過該協商告訴客戶端表述的編碼,譬如Content-Encoding=gzip服務端告訴客戶端內容使用gzip壓縮
4.方法
方法定義了對資源的操作,主要的方法包括GET、POST、UPDATE、DELETE等等,它們分別代表了對資源的讀、建、改、刪的操作
5.快取
HTTP協議支援在Web的各個節點對資源的表述進行快取,譬如在瀏覽器客戶端、代理伺服器、反向代理伺服器、目標伺服器等上對錶述進行快取(注意,此處的快取不僅僅是指在目標伺服器上進行的業務級別的快取)
1)客戶端請求
如果客戶端快取了某些表述,則在進行讀請求(GET)時,攜帶請求條件(所謂的條件GET,使用Cache-Control指令),服務端接收到客戶端的請求條件,比較確認客戶端的表述是否過時,如果沒有,則返回304響應,否則則把最新的表述響應給客戶端
2)服務端響應
服務端對一些需要快取的表述,則響應中攜帶快取指令,告訴請求客戶端如何對錶述進行快取
3)方法對快取的影響
當對一個資源進行UPDATE或DELETE時,請求途經的所有伺服器(如代理伺服器、反向代理伺服器、目標伺服器)會自動將該資源對應的所有表述
快取失效。
6.狀態碼
狀態碼描述了資源請求的結果,主要狀態碼包括:
1)1XX:資訊類
2)2XX:成功類
典型的成功響應包括:
200 OK,表示請求正常處理
201 Created,表示POST請求已經接受,資源已建立,對於此響應,一般響應會攜帶新建資源的Reference給請求客戶端
202 Accepted,表示POST/UDATE請求已經接受,但不一定處理,譬如對於POST/UPDATE請求為後臺新建執行緒處理,可以使用該響應碼
3)3XX: 重定向類
典型的重定向響應包括:
300 Multiple Choice:表明請求的資源有多種表述
301 Moved Permenently:表明所請求的資源已轉移到其他位置,建議到新的位置上去請求資源
304 Not Modify:主要是針對攜帶條件的GET請求,服務端向客戶端表明所請求的資源沒有發生變化,可以繼續使用客戶端已快取的資料
4)4XX: 客戶端錯誤類
典型的客戶端錯誤響應包括:
400 Bad Request:表明客戶端的請求格式服務端無法識別
403 Forbiden:客戶端要訪問的資源許可權受限,不允許訪問
404 Not found:客戶端要訪問的資源不存在
405 Method Not Allowed:客戶端請求的方法不允許,譬如有可能一個資源不允許刪除,則不允許進行DELETE請求
408 Request Timeout:請求超時
5)5XX: 服務端錯誤類
典型的服務端響應包括:
500 Internal Server Error:伺服器內部錯誤,無法響應
503 Service Unavailable:伺服器無法處理當前請求
504 Gateway Timeout:閘道器超時
相關文章
- HTTP協議知識總結HTTP協議
- HTTP協議知識點總結HTTP協議
- Http協議狀態碼總結HTTP協議
- HTTP協議理解與應用總結HTTP協議
- HTTP 協議知識點總結(二)HTTPSHTTP協議
- 快速讀懂 HTTP/3 協議HTTP協議
- Http協議中的各種長度限制總結HTTP協議
- HTTP 協議HTTP協議
- [HTTP協議]HTTP協議
- http協議HTTP協議
- BGP協議總結(2)協議
- http協議讀書筆記1-概述HTTP協議筆記
- RTSP協議、RTMP協議、HTTP協議的區別協議HTTP
- http協議分析HTTP協議
- 理解http協議HTTP協議
- HTTP協議概述HTTP協議
- HTTP 協議類HTTP協議
- HTTP協議(2)HTTP協議
- 小解http協議HTTP協議
- 02 前端HTTP協議(圖解HTTP) 之 簡單的HTTP協議前端HTTP協議圖解
- 你該瞭解的HTTP協議(彙總)HTTP協議
- 《圖解HTTP》讀書筆記二:簡單的 HTTP 協議圖解HTTP筆記協議
- [前端 · 面試 ]HTTP 總結(九)—— HTTP 協商快取前端面試HTTP快取
- HTTP 協議圖解HTTP協議圖解
- 瞭解HTTP協議HTTP協議
- HTTP協議那些事HTTP協議
- HTTP協議簡述HTTP協議
- HTTP 協議簡介HTTP協議
- Http協議簡介HTTP協議
- HTTP2 協議HTTP協議
- 簡述HTTP協議HTTP協議
- HTTP 協議完全解析HTTP協議
- HTTP協議基礎HTTP協議
- Http協議入門HTTP協議
- HTTP通訊協議HTTP協議
- 淺談HTTP協議HTTP協議
- HTTP 協議入門HTTP協議
- 圖解 HTTP 協議圖解HTTP協議