http請求報文

一,一次完整的http連接

1,建立連接:接收或拒絕連接請求

87aeb84b246e8bd3f7993738c4b303d5.png-wh_ 

2,接收請求:接收客戶端請求報文中對某資源的一次請求的過程

Web訪問響應模型(Web I/O

單進程I/O模型:啓動一個進程處理用戶請求,而且一次只處理一個,多個請求被串行響應

多進程I/O模型:並行啓動多個進程,每個進程響應一個連接請求

複用I/O結構:啓動一個進程,同時響應N個連接請求

實現方法:多線程模型和事件驅動

多線程模型:一個進程生成N個線程,每線程響應一個連接請求

事件驅動:一個進程處理N個請求

複用的多進程I/O模型:啓動M個進程,每個進程響應N個連接請求,同時接收M*N個請求

d79245941626a541481eb5a910e6490a.png-wh_ 

3,處理請求:服務器對請求報文進行解析,並獲取請求的資源及請求方法等相關信息,根據方法,資源,首部和可選的主體部分對請求進行處理

元數據:請求報文首部

<method> <URL> <VERSION>

HEADERS 格式 name:value

<request body>

示例:

Host: www.magedu.com 請求的主機名稱

Server: Apache/2.4.7

HTTP常用請求方式,Method

GET, POST, HEAD, PUT, DELETE, TRACE, OPTIONS

4,訪問資源:

服務器獲取請求報文中請求的資源web服務器,即存放了web資源的服務器,負責向請求者提供對方請求的靜態資源,或動態運行後生成的資源

資源放置於本地文件系統特定的路徑:DocRoot

DocRoot > /var/www/html

/var/www/html/p_w_picpaths/log.jpg

Web服務器資源路徑映射方式:

(a) docroot

(b) alias

(c) 虛擬主機docroot

(d) 用戶家目錄docroot

5,構建響應報文

一旦web服務器識別除了資源,就執行請求方法中描述的動作,並返回響應報文。響應報文中,包含有響應狀態碼、響應首部,如果生成了響應主體的話,還包括響應主體

1)響應實體:如果事務處理產生了響應主體,就將內容放在響應報文中回送過去。響應報文中通常包括:

描述了響應主體MIME類型的Content-Type首部

描述了響應主體長度的Content-Length

實際報文的主體內容

2)URL重定向:web服務構建的響應並非客戶端請求的資源,而是資源另外一個訪問路徑

永久重定向:http://www.360buy.com

臨時重定向:http://www.taobao.com

b3558f5d876edd4d2325cfbe27ff1bc9.png-wh_ 

3)MIME類型:

Web服務器要負責確定響應主體的MIME類型。多種配置服務器的方法可將MIME類型與資源管理起來

魔法分類:Apache web服務器可以掃描每個資源的內容,並將其與一個已知模式表(被稱爲魔法文件)進行匹配,以決定每個文件的MIME類型。這樣做可能比較慢,但很方便,尤其是文件沒有標準擴展名時

顯式分類:可以對web服務器進行配置,使其不考慮文件的擴展名或內容,強制特定文件或目錄內容擁有某個MIME類型

類型協商:有些web服務器經過配置,可以以多種文檔格式來存儲資源。在這種情況下,可以配置web服務器,使其可以通過與用戶的協商來決定使用哪種格式(及相關的MIME類型)“最好”

6,發送響應報文

Web服務器通過連接發送數據時也會面臨與接收數據一樣的問題。服務器可能有很多條到各個客戶端的連接,有些是空閒的,有些在向服務器發送數據,還有一些在向客戶端回送響應數據。服務器要記錄連接的狀態,還要特別注意對持久連接的處理。對非持久連接而言,服務器應該在發送了整條報文之後,關閉自己這一端的連接。對持久連接來說,連接可能仍保持打開狀態,在這種情況下,服務器要正確地計算Content-Length首部,不然客戶端就無法知道響應什麼時候結束了

7,記錄日誌

最後,當事務結束時,web服務器會在日誌文件中添加一個條目,來描述憶執行的事務

MPM工作模式

MPMmulti-processing module多路處理模塊

Prefork: 多進程I/O模型,每個進程響應一個請求,默認模型

一個主進程:生成和回收n個子進程,創建套接字,不響應請求

多個子進程:工作work進程,每個子進程處理一個請求;系統初始時,預先生成多個空閒進程,等待請求,最大不超過1024

Worker: 複用的多進程I/O模型,多進程多線程,IIS使用此模型

一個主進程:生成m個子進程,每個子進程負責生個n個線程,每個線程響應一個請求,併發響應請求:m*n

Event: 事件驅動模型(worker模型的變種)

一個主進程:生成m個子進程,每個進程直接響應n個請求,併發響應請求:m*n,有專門的線程來管理這些keep-alive類型的線程,當有真實請求時,將請求傳遞給服務線程,執行完畢後,又允許釋放。這樣增強了高併發場景下的請求處理能力httpd-2.2:event測試版,centos6默認

httpd-2.4: event 穩定版,centos7默認

三:實現特定用戶身份驗證訪問

實現的效果如圖:

0e0eed888e07b0645c4c1ec39a29b678.png-wh_ 

 

實現方法:

3518ca043b1522f0afae7a2684eca31a.png-wh_

883f7c44d7b74ab7ac646556a012f027.png-wh_

418389899662bd566ebd31f36868bffa.png-wh_

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章