http服务详解(1)——一次完整的http服务请求处理过程
前言:要熟練掌握一個服務(wù),首先需要非常了解這個服務(wù)的工作過程,這篇就詳細(xì)解釋了http服務(wù)的請求處理過程。
一次完整的http請求處理過程
(1)流程圖
(2)過程詳解
0、DNS域名解析:遞歸查詢、迭代查詢
遞歸查詢:客戶端向第一個服務(wù)器查詢,給最終結(jié)果
迭代查詢:第一個服務(wù)器向根查詢
1 、建立連接:接收或拒絕連接請求:三次握手的過程
提高HTTP 連接性能:
并行連接:通過多條TCP 連接發(fā)起并發(fā)的HTTP 請求
持久連接:keep-alive, 長連接,重用TCP 連接,以消除連接和關(guān)閉的時延, 以事務(wù)個數(shù)和時間來決定是否關(guān)閉連接
管道化連接:通過共享TCP 連接發(fā)起并發(fā)的HTTP 請求
復(fù)用的連接:交替?zhèn)魉驼埱蠛晚憫?yīng)報文(實驗階段,還未實現(xiàn))
① 串行連接
② 并行連接
③ 持久連接
④ 管道化連接
?
2 、接收請求:接收客戶端請求報文中對某資源的一次請求的過程,請求報文
Web 訪問響應(yīng)模型(Web I/O)
單進(jìn)程I/O 模型: 啟動一個進(jìn)程處理用戶請求,而且一次只處理一個,多個請求被串行響應(yīng),太古老了
多進(jìn)程I/O 模型 : 并行啟動多個進(jìn)程, 每個進(jìn)程響應(yīng)一個連接請求
復(fù)用I/O 結(jié)構(gòu) :啟動一個進(jìn)程,同時響應(yīng)N 個連接請求,連接池
實現(xiàn)方法: 多線程模型和事件驅(qū)動
多線程模型:一個進(jìn)程生成N個線程,每線程響應(yīng)一個連接請求
事件驅(qū)動:一個進(jìn)程處理N 個請求,Nginx
進(jìn)程:比如復(fù)制的工作,項目小組,耗資源
線程:比如人,輕量級
一個進(jìn)程必有一個線程,一個進(jìn)程可以有多個線程
復(fù)用的多進(jìn)程I/O 模型:啟動M個進(jìn)程,每個進(jìn)程響應(yīng)N個連接請求,同時接收M*N 個請求
3 、處理請求
服務(wù)器對請求報文進(jìn)行解析,并獲取請求的資源及請求方法等相關(guān)信息 ,根據(jù)方法,資源,首部和可選的主體部分對請求進(jìn)行處理
元數(shù)據(jù):請求報文首部
<method> <URL> <VERSION>
HEADERS 格式 name:value
<request body>
示例:
Host: www.along.com 請求的主機(jī)名稱
Server: Apache/2.4.7
HTTP 常用請求方式,Method:
GET 、POST 、HEAD 、PUT 、DELETE 、TRACE 、OPTIONS
?
4 、訪問資源:
服務(wù)器獲取請求報文中請求的資源web 服務(wù)器,即存放了web 資源的服務(wù)器,負(fù)責(zé)向請求者提供對方請求的靜態(tài)資源,或動態(tài)運(yùn)行后生成的資源
資源放置于本地文件系統(tǒng)特定的路徑:DocRoot 服務(wù)的根
DocRoot ---> /var/www/html
例:/var/www/html/images/logo.jpg
http://www.along.com/images/logo.jpg
web 服務(wù)器資源路徑映射方式:下篇會詳解
(a) docroot
(b) alias
(c) 虛擬主機(jī)docroot
(d) 用戶家目錄docroot
?
5、構(gòu)建響應(yīng)報文:
一旦Web 服務(wù)器識別出了資源,就執(zhí)行請求方法中描述中的動作,并返回響應(yīng)報文。響應(yīng)報文中 ,包含有響應(yīng)狀態(tài)碼、響應(yīng)首部,如果生成了響應(yīng)主體的話,還包括響應(yīng)主體。
1)響應(yīng)實體:如果事務(wù)處理產(chǎn)生了響應(yīng)主體,就將內(nèi)容放在響應(yīng)報文中回送過去。響應(yīng)報文中通常包括:
描述了響應(yīng)主體MIME 類型的Content-Type 首部
描述了響應(yīng)主體長度大小的Content-Length
實際報文的主體內(nèi)容
2)URL 重定向:web 服務(wù)構(gòu)建的響應(yīng)并非客戶端請求的資源,而是資源另外一個訪問路徑
永久重定向:http://www.360buy.com --->?http://www.jd.com
臨時重定向:http://www.taobao.com ?--->?https://www.taobao.com
3)MIME 類型:多媒體的郵件擴(kuò)展
Web 服務(wù)器要負(fù)責(zé)確定響應(yīng)主體的MIME 類型。有很多配置服務(wù)器的方法可以將MIME 類型與資源管理起來
魔法分類(掃描首部信息):Apache web 服務(wù)器可以掃描每個資源的內(nèi)容,并將其與一個已知模式表,首部( 被稱為魔法文件) 進(jìn)行匹配,以決定每個文件的MIME 類型。這樣做可能比較慢,但很方便,尤其是文件沒有標(biāo)準(zhǔn)擴(kuò)展名的時候
顯式分類:可以對Web 服務(wù)器進(jìn)行配置,使其不考慮文件的擴(kuò)展名或內(nèi)容,強(qiáng)制特定文件或目錄內(nèi)容擁有某個MIME 類型,例如:php,Apache不識別,強(qiáng)制識別
類型協(xié)商: 有些Web 服務(wù)器經(jīng)過配置,可以以多種文檔格式來存儲資源。在這種情況下,可以配置Web 服務(wù)器,使其可以通過與用戶的協(xié)商來決定使用哪種格式( 及相關(guān)的MIME 類型)" 最好"
?
6 、發(fā)送響應(yīng)報文
Web 服務(wù)器通過連接發(fā)送數(shù)據(jù)時也會面臨與接收數(shù)據(jù)一樣的問題。服務(wù)器可能有很多條到各個客戶端的連接, 有些是空閑的,有些在向服務(wù)器發(fā)送數(shù)據(jù),還有一些在向客戶端回送響應(yīng)數(shù)據(jù) 。服務(wù)器 要記錄連接的狀態(tài),還要特別注意對持久連接的處理。對非持久連接而言,服務(wù)器應(yīng)該在發(fā)送了整條報文之后,關(guān)閉自己這一端的連接 。對持久連接來說,連接可能仍保持打開狀態(tài),在這種情況下, 服務(wù)器要 正確地計算Content-Length 首部,不然客戶端就無法知道響應(yīng)什么時候結(jié)束了
?
7 、記錄日志
最后 ,當(dāng)事務(wù)結(jié)束時,Web 服務(wù)器會在日志文件中添加一個條目,來描述已執(zhí)行的事務(wù)
日志類型:下一篇會詳解日志各項格式的意義
訪問日志:現(xiàn)在愈發(fā)重要,大數(shù)據(jù)的時代
錯誤日志:排錯使用
?
另附一張http服務(wù)通信過程:
?
下篇更精彩,盡情期待~
轉(zhuǎn)載于:https://www.cnblogs.com/along21/p/7691234.html
總結(jié)
以上是生活随笔為你收集整理的http服务详解(1)——一次完整的http服务请求处理过程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java解析bmp文件
- 下一篇: StringUtil工具类 之 字符串长