HTTP原理

Paste_Image.png
(1)建立連接:接收或拒絕連接請求
(2)接收請求:

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

? Web訪問響應模型(Web I/O)
(1)單進程I/O模型:啟動一個進程處理用戶請求,而且一次只處理一個,多個請求被串行響應(如果訪問量小,可以用這種)
(2)多進程I/O模型:并行啟動多個進程,每個進程響應一個連接請求(缺點:進程消耗資源比較多,成本比較高,一個進程相當于建立了豪華的貴賓室,只能接受一個進程,但是穩定性比較好)
(3)復用I/O結構:啟動一個進程,同時響應N個連接請求
實現方法:多線程模型和事件驅動
多線程模型:一個進程生成N個線程,每線程響應一個連接請求(相當于貴賓室開了好幾個窗口,但是共用內存,穩定性不太好)
事件驅動:一個進程處理N個請求
(4)復用的多進程I/O模型:啟動M個進程,每個進程響應N個連接請求,同時接收M*N個請求
(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
一次完整的http請求處理過程
(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
一次完整的http請求處理過程

(5)構建響應報文:

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

1)響應實體:如果事務處理產生了響應主體,就將內容放在響應報文中回送過去。響應報文中通常包括:
描述了響應主體MIME類型的Content-Type首部
描述了響應主體長度的Content-Length
實際報文的主體內容
2)URL重定向:web服務構建的響應并非客戶端請求的資源,而是資源另外一個訪問路徑
永久重定向:http://www.360buy.com
臨時重定向:http://www.taobao.com
一次完整的http請求處理過程
3)MIME類型:
Web服務器要負責確定響應主體的MIME類型。有很多配置服務器的方法可以將MIME類型與資源管理起來
魔法分類:Apache web服務器可以掃描每個資源的內容,并將其與一個已知模式表(被稱為魔法文件)進行匹配,以決定每個文件的MIME類型。這樣做可能比較慢,但很方便,尤其是文件沒有標準擴展名的時候
顯式分類:可以對Web服務器進行配置,使其不考慮文件的擴展名或內容,強制特定文件或目錄內容擁有某個MIME類型類型協商: 有些Web服務器經過配置,可以以多種文檔格式來存儲資源。在這種情況下,可以配置Web服務器,使其可以通過與用戶的協商來決定使用哪種格式(及相關的MIME類型)"最好"
(6)發送響應報文

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

(7)記錄日志

最后,當事務結束時,Web服務器會在日志文件中添加
一個條目,來描述已執行的事務
套接字由IP地址和端口號組成

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容