一次HTTP請求服務的完整過程-請求處理過程


 

0、DNS域名解析:遞歸查詢、迭代查詢

  遞歸查詢:客戶端向第一個服務器查詢,給最終結果

  迭代查詢:第一個服務器向根查詢

1 、建立連接:接收或拒絕連接請求:三次握手的過程

提高HTTP 連接性能:

  並行連接:通過多條TCP 連接發起並發的HTTP 請求

  持久連接:keep-alive, 長連接,重用TCP 連接,以消除連接和關閉的時延, 以事務個數和時間來決定是否關閉連接

  管道化連接:通過共享TCP 連接發起並發的HTTP 請求

  復用的連接:交替傳送請求和響應報文(實驗階段,還未實現)

① 串行連接

② 並行連接

③ 持久連接

④ 管道化連接

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

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

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

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

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

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

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

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

      進程:比如復制的工作,項目小組,耗資源

      線程:比如人,輕量級

      一個進程必有一個線程,一個進程可以有多個線程

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

 

3 、處理請求

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

  元數據:請求報文首部

  <method> <URL> <VERSION>

  HEADERS 格式 name:value

  <request body>

示例:

  Host: www.along.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/images/logo.jpg

  http://www.along.com/images/logo.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.jd.com

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

3)MIME 類型:多媒體的郵件擴展

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

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

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

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

 

6 、發送響應報文

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

 

7 、記錄日志

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

日志類型:下一篇會詳解日志各項格式的意義

  訪問日志:現在愈發重要,大數據的時代

  錯誤日志:排錯使用

 

這里只做轉發,方便學習,原地址https://www.cnblogs.com/along21/p/7691234.html

另附一張http服務通信過程:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM