前言
掌握HTTP協議是每一個開發者的基礎,超詳細的HTTP協議筆記
正文
HTTP協議格式總覽
HTTP line
HTTP Method(方法)
介紹了我們請求希望執行的操作類型。
方法有:
- GET : 通過地址欄攜帶信息訪問頁面
- POST:表單提交的形式,請求內容放在body中
- HEAD:和get類似,只返回請求頭,多數由javaScript發起
- PUT:語義上的一種約定:表示添加資源
- DELETE:語義上的一種約定:表示刪除資源
- CONNECT:多用於HTTPS和WebSocket
- OPTIONS: 調試使用
- TRACE:調試使用
HTTP Status code(狀態碼)和Status text(狀態文本)
- 1XX:臨時迴應,表示客戶端請繼續。
- 2xx:請求成功
- 200:請求成功
- 3xx:表示請求的目標有變化嗎,希望客戶端進一步處理。
- 301&302永久性與臨時性的跳轉,表示當前資源已被轉移,只不過一個是永久性轉移,一個是臨時性的,301更接近一種報錯,提示客戶端下次別來了。
- 304:跟客戶端緩存沒有更新:產生前提是客戶端本地已經有緩存的版本,並且在request中告訴了服務端,當服務端通過時間或tag,發現沒有更新的時候了,就會返回一個不含body的304狀態
- 4xx:客戶端錯誤
- 403:無權限
- 404:表示請求的頁面不存在
- 418:這是一個彩蛋
- 5xx:服務端請求錯誤
- 500:服務端錯誤
- 503服務端暫時性錯誤,可以一會再試
HTTP Head(HTTP頭)
它可以被看做鍵值對,只是有些特殊。
Request Header
Response Header
HTTP Request Body
HTTP 請求的Body主要用於表單場景。
body中的格式可以是任何類型的數據,但是爲了得到服務端的認可,也有一些常見的格式
如:json,form-data,xml
值得注意的是,當有文件上傳時,則使用multipart/form-data
HTTP2
http2.0是http1.1的升級版,
HTTP2.0的改進:
1 支持服務端推送
服務端推送能夠在客戶端發生第一個請求時,提前把一部分內容推送給客戶端,放入緩存中,
避免客戶端請求順序帶來的並行度不高,從而導致的性能問題
2 支持TCP連接複用
使用同一個TCP連接來傳輸多個HTTP請求,避免了 TCP連接建立時的,三次握手開銷和初建TCP連接時窗口小的問題
3 使用二進制代理文本進行傳輸
極大提高了傳輸的效率
HTTPS
HTTPS的兩個作用
1 確定請求的目標服務端身份
2 保證傳輸的數據不會被網絡中間節點竊聽和篡改
HTTPS通過加密通道來傳輸HTTP內容
HTTPS首先與服務端建立一條TLS加密通道,TSL構建在TCP協議之上,它實際是對傳輸的內容做一次加密,所以從傳輸的內容來看,HTTPS和HTTP是一樣的。
結尾
HTTP協議是每個工程師的基礎。
希望大家都能理解透徹。