HTTP即超文本傳輸協議,web站點的實現就是基于HTTP協議得以實現。本文將詳細討論HTTP。
1. HTTP協議版本:
HTTP從誕生到現在一共有如下幾個版本:
-
HTTP 0.9:是最早的版本,為HTTP的原型版本,其功能非常簡陋;
-
HTTP 1.0:此版本增加了很多新特性,如cache,method,MIME等,MIME的出現讓網頁不再是單純的純文本界面,而是可以嵌入很多的多媒體資源;
-
HTTP 1.1:此版本增強了緩存功能;
-
HTTP 2.0:為最新版本,增加了很多新的特性,但目前并沒有大范圍使用;
目前使用最廣泛的還是HTTP 1.0和1.1的版本。
2. HTTP的工作模式:
HTTP工作于tcp/ip協議之上,所以HTTP需要依托于tcp的三次握手和四次斷開機制來確保通信的可靠性。
HTTP的工作主要分為兩部分:
-
http請求報文(http request):客戶端向服務器發送請求報文;
-
http響應報文(http response):服務器相應客戶端報文請求;
一次完整的HTTP的請求處理過程分如下步驟:
-
建立或處理連接:接受請求或拒絕請求;
-
接收請求:接收來自于客戶端的請求報文中對某一特定資源的請求;
-
處理請求:對請求報文進行解析,根據請求報文的內容獲取相應的資源;
-
訪問資源:獲取請求中指定的資源;
-
構建響應報文;
-
發送響應報文:添加IP頭,TCP頭,數組幀頭文件等;
-
記錄日志;
3. HTTP接受請求的模型
目前HTTP的請求模型都是并發響應模型,并發響應模型分如下幾種:
-
單進程I/O模型:啟動一個進程處理所有的用戶請求,意味著所有的請求按照順序被串行處理,效率非常低;
-
多進程I/O模型:由父進程創建多個子進程,每個子進程響應一個請求;
-
復用的I/O模型:表示一個進程相應多個請求,其又分為如下模式:
-
多線程模式:一個進程生成n個線程,每個線程處理一個請求;
-
事件驅動(event-driven):一個進程直接處理n個請求;
-
-
復用的多線程I/O結構:啟動m個進程,每個進程處理n個線程,即可以響應請求的數量為m*n個;
隨著現在網站的訪問量越來越大,所以目前單進程I/O模型已經很少被用到了。
4. HTTP請求處理中的連接模式
目前網站的訪問已經越來越多,尤其是對于主要業務集中在web站點上的公司來說尤其如此。據亞馬遜的統計,如果在打開一個網站的時候等待3秒以上,那么可能就會丟失75%的用戶量,而如果再打開一個網站的時候等待了10秒以上,那么就會丟失95%的用戶量。所以網站的響應速度已經和企業的發展息息相關了。
那么在此詳細描述一下用戶在訪問一個網站的流程:
首先用戶會在客戶端通過網站地址打開網站。正常來說一個網頁會由很多資源組成,比如:圖片,視頻,流媒體,文字等。所以在我們看來所有內容都位于一個頁面加載,但是在瀏覽器的后臺其實是有多個資源請求的:
如圖打開的是www.sina.com的站點,右側可以看到的是打開這一個站點所請求的資源列表。由此我們知道一個網頁的打開是需要調用很多資源的。
下面我們來介紹HTTP在處理請求的連接模型:
其連接模式分為兩種方式:
-
keep-alive長連接模式;
-
非保持連接模式;
4.1 非保持連接模式
非保持連接模式表示web站點在響應了客戶端的一個響應請求之后就會斷開此請求而再重新建立一個新的請求去處理其他的響應信息。我們都知道HTTP是建立在TCP協議之上的,其每次通信都會有三次握手和四次斷開的請求。這樣的話就會造成一個問題:服務器和客戶端大部分的時間會用在頻繁的建立連接和斷開上,通信效率會降低很多。由此就產生了長連接模式來解決此問題。
4.2 keep-alive長連接模式
keep-alive表示當客戶端和服務器建立起連接之后并不會因為一個資源傳輸結束而斷開連接,而是在此連接之上做多次資源的傳輸,這樣就不會把過多的時間浪費在建立連接和斷開連接的過程中。不過這樣也會帶來一個問題:如果有其他客戶端此時發起響應請求,此次連接不斷開的話其他客戶端將無法接入服務器。此問題通過如下兩種方式來解決:
-
定義傳輸資源數量上限:比如定義為200,當傳輸的資源數目達到200之后會服務器會自動斷開此連接去相應其他客戶端請求;
-
定義長連接時長:比如定義10秒,當連接達到10s之后服務器也會自動斷開此連接。
以上兩種方式哪一種先達到就會以哪一種為準,這樣就避免了某一客戶端長期占據服務器資源,同時也避免了非保持連接的弊端。
5. 總結
此文主要介紹了HTTP協議的版本,并發請求連接模型,客戶端和web站點之間的數據相應方式和http的兩種連接模式。后續會帶來HTTPD服務的詳細介紹。
原創文章,作者:王子豪,如若轉載,請注明出處:http://www.www58058.com/77258
一次完整的HTTP的請求處理過程分如下步驟:
建立或處理連接、接收請求、處理請求、訪問資源、構建響應報文、發送響應報文、記錄日志。
這是個重點,盡量達到沒有參考的情況下能說得出來