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請求處理過程