1. 程式人生 > >HTTP 之 一次完整的http請求處理過程

HTTP 之 一次完整的http請求處理過程

處理 請求過程

http請求處理過程如下

技術分享

.1、建立連接:接收或拒絕連接請求,通過三次握手建立

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

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

單進程I/O模型:啟動一個進程處理用戶請求,而且一次只處理一個,多個請求被串行響應必須處理完前面的請求後才能處理後面的請求,是串行處理的

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

多進程訪問比較耗資源,占用的內存多,線程相對比較省資源,默認打開最多的進程是1024個。apache當進程用完前,會提前再開幾個進程給用戶訪問,防止資源耗盡。保證有空閑資源可以響應

復用I/O結構:只啟動一個進程,同時響應N個連接請求,其中,連接復用器相當於是一個地址池

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

2)多線程模型:一個進程生成N個線程,每線程響應一個連接請求,缺點是線程會互相幹擾,效率高,解決高並發的情況

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

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

Web訪問響應模型,對應以下的結構

技術分享

.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

get:只能下載

post:上傳小數據,如字符串

head:看頭部內容

put:傳文件

delete:刪除,一般不用,但是特殊情況下使用,如讓服務器刪除緩存信息

trace:跟蹤

option:查看當前的網站支持哪些method

.4、訪問資源:

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

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

DocRoot./var/www/html

/var/www/html/images/logo.jpg

http://www.magedu.com/images/logo.jpg

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

(a) docroot

(b) alias

(c)虛擬主機docroot

(d)用戶家目錄docroot

.5、構建響應報文:

封裝http的相應包頭

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

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

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

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

實際報文的主體內容

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

兩個不一樣的重定向方法:永久重定向和臨時重定向

永久重定向

例子:

永久重定向: curl -I http://www.360buy.com 得到的結果 HTTP/1.1 301 Moved Permanently

臨時重定向 :curl -I http://www.taobao.com 得到的結果 HTTP/1.1 302 Found

3)MIME類型:

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

MIME:多用途郵件擴展

魔法分類:Apache

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

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

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

.6、發送響應報文

可配置為持續連接或非持續連接

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

.7、記錄日誌

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


本文出自 “陽光運維” 博客,請務必保留此出處http://ghbsunny.blog.51cto.com/7759574/1970524

HTTP 之 一次完整的http請求處理過程