1. 程式人生 > >談談我對HTTP協議的理解

談談我對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