圖解HTTP學習筆記
前言:
一直覺得自己在HTTP基礎方面都是處於知其然,不知其所以然的樣子。最近利用空閑時間拜讀了一下圖解HTTP,寫篇博客記錄一下讀書筆記。
TCP三次握手:
① 發送端首先發送一個帶SYN標誌的數據包給對方
② 接收端收到後,回傳一個帶有SYN/ACK標誌的數據包以示傳達確認消息
③ 發送端再回傳一個帶ACK標誌的數據包,代表“握手結束”註意:若在握手的過程中某個階段莫名中斷,TCP協議會再次以相同的順序發送相同的數據包。
關於Cookie:
目前我們用的比較多的用戶鑒權的方法有兩種:cookie和Authorization。
Authorization:用戶登錄成功後在Response Headers或者在URL裏面返回Authorization,然後前端拿到Authorization後進行處理,在每次進行HTTP請求時將該Authorization帶在Request Headers上。
HTTP首部根據實際用途分為:通用首部字段、請求首部字段、響應首部字段、實體首部字段
通用首部字段
首部字段名 | 說明 |
Cache-Control | 控制緩存的行為 |
Connection | 逐跳首部、連接的管理 |
Date | 創建報文的日期時間 |
Pragma | 報文指令 |
Trailer | 報文末端的首部一覽 |
Transfer-Encoding | 指定報文主體的傳輸編碼方式 |
Upgrade | 升級為其他協議 |
Via | 代理服務器的相關信息 |
Waring | 錯誤通知 |
請求首部字段
首部字段名 | 說明 |
Accept | 用戶代理可處理的媒體類型 |
Accept-Charset | 優先的字符集 |
Accept-Encoding | 優先的內容編碼 |
Accept-Language | 優先的語言(自然語言) |
Authorization | Web認證信息 |
Expect |
期待服務器的特定行為 |
From | 用戶的電子郵箱地址 |
Host | 請求資源所在服務器 |
If-Match | 比較實體標記(ETag) |
If-Modified-Since | 比較資源的更新時間 |
If-None-Match | 比較實體標記(與 If-Match 相反) |
If-Range | 資源未更新時發送實體 Byte 的範圍請求 |
If-Unmodified-Since | 比較資源的更新時間(與If-Modified-Since相反) |
Max-Forwards | 最大傳輸逐跳數 |
Proxy-Authorization | 代理服務器要求客戶端的認證信息 |
Range | 實體的字節範圍請求 |
Referer | 對請求中 URI 的原始獲取方 |
TE | 傳輸編碼的優先級 |
User-Agent | HTTP 客戶端程序的信息 |
響應首部字段
首部字段名 | 說明 |
Accept-Ranges | 是否接受字節範圍請求 |
Age | 推算資源創建經過時間 |
ETag | 資源的匹配信息 |
Location | 令客戶端重定向至指定URI |
Proxy-Authenticate | 代理服務器對客戶端的認證信息 |
Retry-After | 對再次發起請求的時機要求 |
Server | HTTP服務器的安裝信息 |
Vary | 代理服務器緩存的管理信息 |
WWW-Authenticate | 服務器對客戶端的認證信息 |
實體首部字段
首部字段名 | 說明 |
Allow | 資源可支持的HTTP方法 |
Content-Encoding | 實體主體適用的編碼方式 |
Content-Language | 實體主體的自然語言 |
Content-Length | 實體主體的大小(單位: 字節) |
Content-Location | 替代對應資源的URI |
Content-MD5 | 實體主體的報文摘要 |
Content-Range | 實體主體的位置範圍 |
Content-Type | 實體主體的媒體類型 |
Expires | 實體主體過期的日期時間 |
Last-Modified | 資源的最後修改日期時間 |
1XX | 信息性狀態碼 | 接收的請求正在處理 |
2XX | 成功狀態碼 | 請求正常處理完畢 |
3XX | 重定向狀態碼 | 需要進行附加操作以完成請求 |
4XX | 客戶端錯誤狀態碼 | 服務器無法處理請求 |
5XX | 服務器錯誤狀態碼 | 服務器處理請求出錯 |
常用的一些狀態碼:
200 OK:表示從客戶端發來的請求在服務器端被正常處理了
204 No Content:該狀態碼代表服務器接收的請求已成功處理,但在返回的響應報文中不含實體的主體部分。一般用於在需要從客戶端往服務器發送信息,而對客戶端不需要發送新信息內容的情況下下。
206 Partial Content:該狀態碼表客戶端進行了範圍請求,而服務器成功執行了這部分的GET請求。響應報文中包含由Content-Range指定範圍的實體內容
301 Moved Permanently:永久性重定向。該狀態碼表示請求的資源已被分配了新的URI,以後應使用資源現在所指的URI。
302 Found:臨時性重定向。該狀態碼表示請求的資源已被分配了新的URI,希望用戶(本次)能使用新的URI訪問。與301的區別是,代表資源不是被永久移動,只是臨時性質的。
303 See Other:該狀態碼表示由於請求對應的資源存在著另一個URI,應使用GET方法定向獲取請求的資源。303和302有著相同的功能,但303狀態碼明確表示客戶端應當采用GET方法獲取資源。
304 Not Modified:該狀態碼表示客戶端發送附帶條件的請求時,服務器端允許請求訪問資源,但未滿足條件的情況。304狀態碼返回時,不包含任何響應的主體部分。304雖然被劃分在3XX類別中,但是和重定向沒有關系。
307 Temporary Redirect:臨時重定向。該狀態碼和302有相同的含義,但是307不會將POST變成GET
400 Bad Request:該狀態碼表示請求報文中存在語法錯誤。
401 Unauthorized:該狀態碼表示發送的請求需要有通過HTTP認證(BASIC認證、DIGEST認證)的認證信息。另外若之前已進行過1次請求,則表示用戶認證失敗。
403 Forbidden:該狀態碼表明對請求資源的訪問被服務器拒絕了。
404 Not Found:表明服務器上無法找到請求的資源。
500 Internal Server Error:表明服務器端在執行請求時發生了錯誤。
503 Service Unavailable:表明服務器暫時處於超負載或正在進行停機維護,現在無法處理請求。
總結:
第一次將本書讀完後有一種這樣的感覺,書中提到的很多知識點都是有所了解或者都能看懂,但是過了一段時間後發現很多地方又忘了,後面找機會再來拜讀一下這本書。
圖解HTTP學習筆記