1. 程式人生 > >《圖解Http》 2-6章: 基礎,報文,狀態碼,首部。

《圖解Http》 2-6章: 基礎,報文,狀態碼,首部。

優先 作用 客戶端 應用 發送請求 表示 9.png enc 分享圖片

HTTP協議和Cookie

是stateless協議,自身不對請求和響應之間的通信狀態進行保存。但隨著技術發展,為了實現保存狀態的功能,引入了Cookie技術。

Cookie在請求和響應報文中寫入信息來控制客戶端的狀態。

  1. Cookie根據從服務器發送的響應報文內的Set-Cookie的首部字段信息,通知客戶端保存Cookie。
  2. 下次客戶端發送請求時,會在報文中加入Cookie值。
  3. 服務器收到報文後,檢查Cookie,確認是哪個客戶端發過來的連接請求,然後再對比服務器上的記錄,得到之前的狀態信息。

技術分享圖片

告知服務器意圖的HTTP 方法:

GET,POST

HEAD:獲得報文首部,不返回主體部分。用於確認URL的有效性和資源更新的日期時間等。

PUT, DELETE: 不帶驗證機制,只當配合Web應用的驗證機制或遵守REST標準時使用。

OPTIONS: 詢問支持的方法

CONNECT:要求用隧道協議連接代理。

技術分享圖片

持久連接,HTTP1.1的特性:

不會每次HTTP通信後都斷開,這樣減少重復建立連接和斷開的負擔。

管線化:在連接的時候,發送請求,和響應請求分開了。可以並行發送多個請求,無需一個接一個等待響應。

技術分享圖片



第3章 HTTP報文內的信息

之前的博客(有圖)https://www.cnblogs.com/chentianwei/p/9485301.html

3.1報文 message

技術分享圖片

分為:通用的首部,請求首部,響應首部,實體首部4種。常見的見之前的博客的表格。

3.4發送多種數據的多部分對象集合Multipart

HTTP協議發送的報文主體內可含有多類型實體,通常是在圖片或文本文件上傳時使用:

multipart/form-data: 表單上傳

multipart/byteranges:狀態碼206響應報文包含了多個範圍的內容時使用

技術分享圖片

技術分享圖片

使用Content-Type,並加上boundary=XXX

集合對象中的每個對象使用--XXX進行區分,最後的結尾用--XXX--標誌來代表結束。

3.5獲取部分內容(圖片)的range request

超大的圖片下載過程,一旦中斷,無需從新下載,因為它使用了Range Request。類似把大圖切割成幾部分,就像包一樣。

Content-Range: bytes 5001-10000/10000


第4章 狀態碼

技術分享圖片

60多種,常用14種。

200: ok

204: No Content, 請求處理成功了,但返回的response message中沒有主體部分。

206: Partial Content, 表示客戶端進行了Range request,服務器成功執行了這部分GET請求。響應報文中包含了Content-Range指定的實體內容。

301: Move Permanently, 表示請求的資源已經被分配了新的URL, 以後應使用資源現在所指向的URL.

技術分享圖片

302:Found, 表示臨時重定向,表示請求的資源被分配了新的URL,希望本次使用這個URL訪問。

303: See Other,表示請求對應的資源存在另一個URL,應該使用GET方法定向獲取請求的資源。其他和302類似。

304: Not Modified, 表示客戶端發送帶條件的請求,服務器允許請求訪問資源,但未滿足條件的情況。304返回時,不帶響應的主體部分。

??(if-Match, If-Modified-Since,If-None-Match, If-Range, If-Unmodified-Since)首部

307: Temporary Redirect等同302,業界習慣POST變成GET。

400: Bad Request, 表示請求報文中有語法錯誤?。

401 Unauthorized, 表示需要通過HTTP認證

403 Forbidden,服務器對請求資源的訪問拒絕。實體的主體部分看對原因的描述。

404 Not Found, 服務器上無法找到請求的資源,除此之外也可以在服務器端拒絕請求並且不想說明理由時使用。

500 Internal Server Error ,表示服務器在執行請求時出現?,bug,臨時故障。

503 Service Unavailable, 表示服務器暫時不可用,超載,停機維護。

?? 狀態碼有可能和真實狀況不一致。


第5章,和HTTP協作的Web服務器。

5.1虛擬主機virtual Host技術

讓一臺服務器托管了N多個域名。 Web托管服務的供應商就是這麽做的。

技術分享圖片

因此,發送HTTP請求,必須使用完整的主機名或域名URL

5.2 通信數據轉發程序

代理:使用代理服務器可以減少網絡帶寬的流量(利用緩存技術)

技術分享圖片

緩存代理proxy:在代理服務器上儲存從源服務器上發過來的response message。

技術分享圖片

緩存有效期。客戶端也可以緩存。

網關:和代理類似,但可以提供非HTTP協議服務。提高了安全性,如:連接數據庫,連接信用卡結算系統

技術分享圖片

隧道: 使用SSL等加密手段進行通信。確保安全通信。



第6章HTTP首部

4種類型:

General Header Fields,

Request Header Fields, 補充了請求的附加內容, 客戶端信息, 響應內容相關優先級等信息。

Response Header Fields, 補充了響應的附加內容,也會要求客戶端附加額外的內容信息。

Entity Header Fields, 報文實體部分使用的首部,補充了資源內容更新時間等和實體有關的message.

詳細講解見本書85頁

技術分享圖片

Request header Fields

技術分享圖片技術分享圖片


6.3 HTTP1.1通用首部字段

6.31Cache-Control (有20來個指令,見86頁)

public/private: 是否其他用戶也可以利用緩存。

no-cache:實際意思是不緩存過期的資源

如果是響應指令,代表緩存前必須先確認其有效性。如果是請求指令,代表向源服務器取資源不要緩存。

目的:防止從緩存中返回過期的資源。

技術分享圖片

no-store: 不儲存緩存資源,真正的不緩存。

6.32 Connection

  • 控制不再轉發給代理的首部字段 Connection: 不再轉發的首部字段名
  • 管理持久連接。Connection: close/ keep-Alive

6.33 Date 創建報文的時間。

6.36 Transfer-Encoding: chunked

規定使用分快傳輸的編碼方式。

6.38 Via

用於追蹤傳輸路徑,報文經過代理和網關時會在via中附加該服務器的信息。

6.39 Warning (具體見98頁)

告知用戶一些和緩存相關的問題的警告。

Warning: [警告碼][主機: 端口號]"[警告內容]"([日期時間])


6.4 request header fields

6.41 accept

技術分享圖片

6.45 Authorization

技術分享圖片

6.47 host

技術分享圖片

6.48 If-Match

技術分享圖片

如果是星號*,If-Match:*, 則忽略ETag值。只要資源存在就處理。

If-Match和If-None-Match作用相反。


6.5 response header fields

6.51 accept-ranges

技術分享圖片

6.53ETag

技術分享圖片


6.6 Entity header fields

6.66 Content-MD5

技術分享圖片


6.7為Cookie服務的header fields(130頁)

工作機制: 用戶識別,狀態管理。

Set-Cookie: 響應首部字段

Cookie: 請求首部字段

屬性:

技術分享圖片


《圖解Http》 2-6章: 基礎,報文,狀態碼,首部。