談談我對HTTP協議的理解
一.HTTP協議版本
HTTP1.0與HTTP1.1的區別主要體現在以下幾個方面:
1. HTTP1.0是短連線、HTTP1.1是長連線。
2. 增加請求頭和響應頭。(什麼是請求頭和響應頭?等下我會上圖說明)
3. 客戶端不同請求之間是非同步的。(個人理解,這裡的非同步並不是指客戶端可以同時處理多個請求,而是當一個請求執行過程中遇等待情況時,可以切到另外一個請求上執 行)
HTTP2.0相較於HTTP1.x主要在以下幾個方面有所提升:
1. HTTP2.0支援多路複用。
2. HTTP2.0會根據請求優先順序進行傳輸。(例如在瀏覽商品的時候突然滑到最下方,那麼最下面的商品資訊無疑是使用者最想看到的,所以這時對最下面商品資訊的請求屬於優先順序高的請求)
3. HTTP2.0支援header壓縮。
4. HTTP2.0支援server推送。(http1.x只能由客戶端發起請求,然後伺服器被動的傳送response。開啟server push之後,server通過X-Associated-Content header告知客戶端會有新的內容推送過來。在使用者第一次開啟網站首頁的時候,server將資源主動推送過來可以極大的提升使用者體驗。)
5. HTTP2.0支援server暗示。(與server推送不同,server暗示僅僅告知客戶端伺服器上有這些資源,或是有新內容產生,具體的下載還是要靠客戶端發起請求完成,但由於省去了查詢server狀態這一過程,所以省去了一道詢問)
二. HTTP通訊流程
在HTTP1.0中,通訊流程可以概括為以下幾步:
1. 客戶端與伺服器建立TCP連線,一般使用80埠。
2. 客戶端向伺服器傳送請求。
3. 伺服器向客戶端傳送響應。
4. TCP連線斷開。
5. 重複上述步驟。
而在HTTP1.1中,通訊流程可以概括為以下幾步:
1. 客戶端與伺服器建立TCP連線,一般使用80埠。
2. 客戶端向伺服器傳送請求。
3. 伺服器向客戶端傳送響應。
4. 重複上述步驟。5. 通訊完畢,TCP連線斷開。
三. HTTP協議——請求與應答
兩張圖說明問題。
請求:
響應:
再直白點:
請求:
<request line>
<headers>
<blank line>
<body>
響應(和請求一樣,就是第一行變了):
<request line>
<headers>
<blank line>
<body>
其中請求方法有8種,分別為:
GET:請求獲取由 Request-URI 所標識的資源。
POST:在 Request-URI 所標識的資源後附加新的資料。
HEAD:請求獲取由 Request-URI 所標識的資源的響應訊息報頭。
OPTIONS:請求查詢伺服器的效能,或查詢與資源相關的選項和需求。
PUT:請求伺服器儲存一個資源,並用 Request-URI作為其標識。
DELETE:請求伺服器刪除由 Request-URI所標識的資源。
TRACE:請求伺服器回送收到的請求資訊,主要用語測試或診斷。
常見的響應狀態碼有以下幾種,在各種下面分別列幾個常見的狀態碼:
1開頭(訊息)
2開頭(成功)
200(OK):請求成功
202(Accepted):已接受請求,尚未處理
204(No Content):請求成功,且不需返回內容
3開頭(重定向)
301(Moved Permanently):被請求的資源已永久移動到新位置
301(Moved Temporarily):被請求的資源已臨時移動到新位置
4開頭(請求錯誤)
400(Bad Request):請求的語義或是引數有錯
403(Forbidden):伺服器拒絕了請求
404(Not Found):未找到請求的資源
5開頭(伺服器錯誤)
500(Internal Server Error):伺服器遇到錯誤,無法完成請求
502(Bad Getway):閘道器錯誤,一般是伺服器壓力過大導致連線超時
503(Service Unavailable):伺服器宕機
四. POST和GET究竟有什麼區別?
1. POST將請求資料放在請求的body裡,而GET則是將他放在請求行裡。
2. GET請求的資料會體現在URL上,而POST不會。
3. 由於請求行的長度是有上限的,所以GET提交資料時會有長度上限,而POST不會。
五. 要想深入理解、還是需要截資料包觀察
這裡就不帶著大家截包了,這個連結裡有截好的資料包,推薦一看:http://www.he11oworld.com/front-end/2786.html
怎麼截包?可以用Firebug,比如上面那個POST與GET的問題,就可以看到,POST的內容是在“post”一欄,而GET則是在“引數”
參考文章
1. http://www.jianshu.com/p/a27f91c51a8b
2. http://blog.csdn.net/witsmakemen/article/details/8994963
3. http://www.he11oworld.com/front-end/2786.html
4. http://www.tuicool.com/articles/jMFfIv
5.https://www.zhihu.com/question/34074946