HTTP 详解
HTTP超文本傳輸協議,被設計用于Web瀏覽器和Web服務器之間的通信,請求響應的模型:客戶端主動請求服務器,服務器響應客戶端。
工作流程
a)首先客戶端與服務器需要建立連接。單擊某個超級鏈接,HTTP的工作開始。
b)建立連接后,客戶端發送一個請求給服務器,請求方式的格式為:統一資源標識符(URL)、協議版本號,MIME信息包括請求修飾符、客戶端請求的信息。
c)服務器接到請求后,給予相應的響應信息
d)客戶端接收到服務器返回的信息通過瀏覽器顯示出來,然后客戶端與服務器斷開連接。
HTTP連接
HTTP/1.0 為每個請求/回應都打開一個TCP連接,缺點:打開一個連接需要多次的信息往返,會導致整個過程很慢
HTTP/1.1 引入持久連接概念,通過Connection頭部來部分控制連接
HTTP/2 通過一個連接多個消息的方式來保持始終保持為暖連接
URL詳解
URL基本格式:schema://host[:port#]/path/.../;url-params[#anchor]
scheme : 指定低層使用的協議(例如:http, https, ftp)
host : HTTP服務器的IP地址或者域名
port#: HTTP服務器的默認端口是80,這種情況下端口號可以省略。如果使用了別的口,必須指明,例如 http://www.cnblogs.com:8080/
path: 訪問資源的路徑
url-params
query-string: 發送給http服務器的數據
anchor: 錨
HTTP協議是無狀態的,意味著服務器不會在兩個請求之間保留任何數據(狀態),為了解決這個問題web程序引入了Cookie機制來維護狀態,用來判斷是否是同一個用戶發送的請求。
HTTP協議定義了很多與服務器交互的方法:GET,POST,PUT,DELETE,HEAD,OPTIONS,TRACE,CONNECT對應資源的查,改,增,刪, 獲得報文首部,詢問支持的方法,追蹤路徑,要求使用隧道協議連接代理。
狀態碼
1XX : 提示信息 - 表示請求已被成功接收,繼續處理
2XX : 成功 - 表示請求已被成功接收,理解,接受
3XX : 重定向 - 要完成請求必須進行更進一步的處理
4XX : 客戶端錯誤 - 請求有語法錯誤或請求無法實現
5XX :服務器端錯誤 - 服務器未能實現合法的請求
列舉常見的幾種狀態碼:
302: Found 重定向,新的url會在resp中的location中返回,瀏覽器會將使用新的url發出新的請求。
304: Not Modified 代表上次的文檔已經被緩存了,使用緩存的文檔
400: Bad Request 客戶端請求與語法錯誤,不能被服務器所理解
403: Forbidden 服務器收到請求,但是拒絕提供服務
404: Not Found 請求的資源不存在,url錯誤
500: Internal Server Error 服務器發生了不可預期的錯誤
503: Server Unavailable 服務器當前不能處理客戶端的請求
Request Headers
Accept: 用來告知客戶端可以處理的內容類型。 /:所有類型
Accept-Encoding:gzip, deflate, br
Accept-Language:請求頭允許客戶端聲明它可以理解的自然語言,并使用Content-Language 應答頭通知客戶端它的選擇。zh-CN,zh;q=0.9,en;q=0.8 (;q=值代表優先順序)
Connection:keep-alive 當頁面請求完成之后,會保持和服務器的鏈接持續有效;close 在完成本次連接之后,斷開連接
Host:客戶端指定自己訪問的web服務器的域名或者IP地址和端口號。localhost:3000
Referer:瀏覽器向web服務器表面自己是從哪個url獲得當前請求的網址。http://localhost:3000/
User-Agent:用來告訴服務器,客戶端使用的操作系統和瀏覽器的名稱和版本信息。Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36
Response Headers
Access-Control-Allow-Origin:允許訪問該資源的外域URL。*:表示不需要攜帶身份憑證請求
Cache-Control:no-store, no-cache, no-transform, must-revalidate, max-age=0
Cache-Control: 這個是非常重要的規則。 這個用來指定Response-Request遵循的緩存機制。各個指令含義如下
Cache-Control:no-store 所有內容都不會被緩存
Cache-Control:no-cache 會被緩存,但是每次都要向服務器評估緩存響應的有效性
Cache-Control:max-age=5 當訪問此網頁后的5秒內再次訪問不會訪問服務器
Cache-Control:min-fresh=5 客戶端在指定的5秒內獲取最新的響應
Cache-Control:max-stale=5 客戶端愿意接收一個已經過期的資源,響應時間不能超過的時間
Cache-Control:only-if-cached 客戶端只接收已經緩存的響應,并且不要向原始服務器檢查是否有更新的拷貝
Cache-Control:Public 可以被任何緩存所緩存
Cache-Control:Private 內容只緩存到私有緩存中
Cache-Control:must-revalidate 緩存必須在使用之前驗證舊資源狀態,并且不可使用過期資源
Cache-Control:no-transform 不得對資源進行轉換或轉變
Connection:keep-alive
Content-Type:告訴客戶端實際返回的內容類型。application/json; charset(字符編碼標準)=UTF-8
Date:消息生成的日期和時間。Mon, 27 Nov 2017 07:40:53 GMT
Transfer-Encoding:指明將傳遞給客戶所采用的編碼形式。chunked數據以一系列分塊的形式進行發送,content-length 在這種情況下不被發送。
Vary:Origin
未完待續...
總結
- 上一篇: 4.2权限管理
- 下一篇: [CF475E]Strongly Con