1. 程式人生 > >理解HTTP協議的Request/Response(請求響應)模型

理解HTTP協議的Request/Response(請求響應)模型

    我們知道HTTP協議是一種無狀態的協議,及客戶端和伺服器端不需要建立持久的連結。客戶端和伺服器的連結是基於一種請求應答模式。及客戶端和伺服器建立一個連結,客戶端提交一個請求,伺服器端收到請求後返回一個響應,然後二者就斷開連結。

    這裡我們比較熟悉的一個案例是一個多圖網頁的瀏覽。

    1。建立連線,客戶端傳送一個網頁請求,伺服器端返回一個html頁面(這裡的頁面只是一個純文字的文字,也就是我們寫的html程式碼),關閉連線;

    2.  瀏覽器解析html檔案,遇到圖片標記得到url這時,客戶端和伺服器在建立連線,客戶端傳送一個圖片請求,伺服器返回圖片應答,關閉連線。(這裡又涉及到無狀態定義:對於伺服器來說,這次的請求雖然是同一個客戶端的請求但是他還是不知道這個是之前的那個客戶端是同一個,及對於事務處理沒有記憶能力);

    3.  重複2步驟直到html解析完畢;

   

                  客戶端連線伺服器

         多圖網頁的解析

     當然以上例子只是一個為了方便我們理解HTTP是無狀態協議和HTTP這種請求相應模式的簡單例子(基於HTTP 1.0協議),而我們現在的一般使用的HTTP 1.1協議解析網頁過程是不同的,在1.1版本中同一個連線可以包含多個請求和對應響應。但是其原理是不變的。如圖:

    但是需注意的是,伺服器的響應次序必須是和客戶端請求次序相同的。

    注:

      無狀態是指協議對於事務處理沒有記憶能力。缺少狀態意味著如果後續處理需要前面的資訊,則它必須重傳,這樣可能導致每次連線傳送的資料量增大。另一方面,在伺服器不需要先前資訊時它的應答就較快。

  客戶端與伺服器進行動態互動的Web應用程式出現之後,HTTP無狀態的特性嚴重阻礙了這些應用程式的實現,畢竟互動是需要承前啟後的,簡單的購物車程式也要知道使用者到底在之前選擇了什麼商品。於是,兩種用於保持HTTP連線狀態的技術就應運而生了,一個是Cookie,而另一個則是Session。HTTP本身是一個無狀態的連線協議,為了支援客戶端與伺服器之間的互動,我們就需要通過不同的技術為互動儲存狀態,而這些不同的技術就是Cookie和Session了。