日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > HTML >内容正文

HTML

浏览器与服务器响应流程-----(转)

發(fā)布時(shí)間:2025/3/15 HTML 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 浏览器与服务器响应流程-----(转) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一. 解析域名地址為IP地址

瀏覽器DNS緩存:以Chrome為例,在瀏覽器窗口中輸入chrome://net-internals/#dns,就可以查看當(dāng)前瀏覽器DNS緩存記錄,chrome的DNS緩存過(guò)期時(shí)間還是比較短的,大約為1分鐘。

本機(jī)DNS緩存:在Windows命令行模式下輸入ipconfig /displaydns,就可以查看本機(jī)DNS緩存記錄。許多主機(jī)在啟動(dòng)時(shí)從本地域名服務(wù)器下載域名和地址的全部數(shù)據(jù)庫(kù),維護(hù)存放自己最近使用的域名的緩存。

本地域名服務(wù)器:在Windows命令行模式下輸入ipconfig /all,就可以查看本地DNS服務(wù)器的IP地址,一般而言本地域名服務(wù)器都是由ISP提供,主機(jī)通過(guò)UDP和本地域名服務(wù)器通信。如果在本地域名服務(wù)器高速緩存中搜索不到要轉(zhuǎn)換的域名,就向更高級(jí)別的域名服務(wù)器發(fā)起迭代查詢,按根域名服務(wù)器(一般查詢根域名服務(wù)器都是遵循就近原則,中國(guó)有3個(gè)根服務(wù)器,位置分別為北京,香港,臺(tái)北)-> 頂級(jí)域名服務(wù)器-> 權(quán)限域名服務(wù)器的順序詢。假如本地域名服務(wù)器高速緩存中存在頂級(jí)域名服務(wù)器.com的IP地址,那么本地域名服務(wù)器可以不向根域名服務(wù)器進(jìn)行查詢,而是直接向com頂級(jí)域名服務(wù)器發(fā)送UDP請(qǐng)求報(bào)文,這樣就可以大大減輕根域名服務(wù)器的負(fù)荷。維護(hù)本地域名服務(wù)器數(shù)據(jù)庫(kù)的主機(jī)自然應(yīng)該定期地檢查域名服務(wù)器以獲取新的映射信息,而且主機(jī)必須從緩存中刪掉無(wú)效的項(xiàng)。

二. TCP 連接建立

由上一步獲取www.cnblogs.com的IP地址42.121.252.58后,客戶端主機(jī)就會(huì)選擇一個(gè)未使用的端口與42.121.252.58:80通信,在Windows命令行模式下輸入netstat,就可以查看當(dāng)前正在活動(dòng)的TCP連接。

Client首先發(fā)送一個(gè)連接試探,ACK=0 表示確認(rèn)號(hào)無(wú)效,SYN = 1 表示這是一個(gè)連接請(qǐng)求或連接接受報(bào)文,同時(shí)表示這個(gè)數(shù)據(jù)報(bào)不能攜帶數(shù)據(jù),seq = x 表示Client自己的初始序號(hào)。

Server監(jiān)聽到連接請(qǐng)求報(bào)文后,如同意建立連接,則向Client發(fā)送確認(rèn)。TCP報(bào)文首部中的SYN 和 ACK都置1 ,ack = x + 1表示期望收到對(duì)方下一個(gè)報(bào)文段的第一個(gè)數(shù)據(jù)字節(jié)序號(hào)是x+1,同時(shí)表明x為止的所有數(shù)據(jù)都已正確收到,seq = y 表示Server 自己的初始序號(hào)。

Client收到確認(rèn)后還需再次發(fā)送確認(rèn),同時(shí)攜帶要發(fā)送給Server的數(shù)據(jù)。ACK 置1 表示確認(rèn)號(hào)ack= y + 1 有效,Client自己的序號(hào)seq= x + 1。

三. 瀏覽器給服務(wù)器發(fā)送一個(gè)http請(qǐng)求

上一步中有提到Client收到確認(rèn)后還需再次發(fā)送確認(rèn),這時(shí)就可以攜帶要發(fā)送給Server的數(shù)據(jù),這個(gè)數(shù)據(jù)就是HTTP請(qǐng)求報(bào)文。

HTTP請(qǐng)求行:GET http://www.cnblogs.com/? HTTP/1.1

HTTP請(qǐng)求首部:

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Charset:GBK,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:zh-CN,zh;q=0.8
Connection:keep-alive
Cookie:省略
Host:www.cnblogs.com
If-Modified-Since:Mon, 22 Apr 2013 09:12:11 GMT
User-Agent:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.21 (KHTML, like Gecko) Chrome/25.0.1354.0 Safari/537.21

?

這里重點(diǎn)提一下Connection。

Connection設(shè)置為keep-alive,就是Server在發(fā)送響應(yīng)后仍然在一段時(shí)間內(nèi)保持這條連接,使同一Client可以繼續(xù)在這條連接上傳送后續(xù)的HTTP請(qǐng)求報(bào)文和響應(yīng)報(bào)文。對(duì)于不同的web服務(wù)器,如IIS,Apache,都有不同的keep-alive 過(guò)期時(shí)間,當(dāng)然如果過(guò)期時(shí)間太短,就達(dá)不到重用連接的效果,如果過(guò)期時(shí)間太長(zhǎng),則會(huì)造成占用資源的壞處。

四. 服務(wù)器給瀏覽器發(fā)送一個(gè)http響應(yīng)

當(dāng)Server接收到http請(qǐng)求的時(shí)候,就把請(qǐng)求交給專門的web服務(wù)器處理,并最終把數(shù)據(jù)發(fā)送給Client,這個(gè)數(shù)據(jù)就是HTTP響應(yīng)報(bào)文。

HTTP狀態(tài)行:HTTP/1.1 200 OK

HTTP響應(yīng)首部:

?

Cache-Control:public, max-age=62
Connection:keep-alive
Content-Encoding:gzip
Content-Type:text/html; charset=utf-8
Date:Wed, 24 Apr 2013 08:14:03 GMT
Expires:Wed, 24 Apr 2013 08:15:04 GMT
Last-Modified:Wed, 24 Apr 2013 08:13:04 GMT
Server:Tengine
Transfer-Encoding:chunked
Vary:Accept-Encoding
X-AspNet-Version:4.0.30319
X-AspNetMvc-Version:3.0
X-Powered-By:ASP.NET
X-UA-Compatible:IE=edge

?

?

?

???

???? 最后就是HTTP響應(yīng)主體內(nèi)容--html文檔了,如果需要繼續(xù)獲取嵌套在html中的對(duì)象,且這些對(duì)象都存在于同一個(gè)服務(wù)器上時(shí),這些HTTP請(qǐng)求就會(huì)重用現(xiàn)存TCP連接。

五. TCP 連接釋放

在正常情況下,服務(wù)器端的keep-alive過(guò)時(shí)了,就會(huì)主動(dòng)發(fā)出請(qǐng)求釋放這條TCP連接。

?

?

?

Server發(fā)送一個(gè)連接釋放報(bào)文,FIN = 1 表示Server的數(shù)據(jù)已發(fā)送完畢,seq = v ,v等于前面已傳送過(guò)的數(shù)據(jù)的最后一個(gè)字節(jié)加1。

Client收到Server的連接釋放請(qǐng)求后,發(fā)送一個(gè)確認(rèn)報(bào)文。ACK = 1 表示確認(rèn)后ack有效,ack = u+1表示期望收到對(duì)方下一個(gè)報(bào)文段的第一個(gè)數(shù)據(jù)字節(jié)序號(hào)是u+1 ,seq = v , v等于前面Client已傳送過(guò)的數(shù)據(jù)的最后一個(gè)字節(jié)加1。

由于HTTP協(xié)議是基于請(qǐng)求-響應(yīng)模型,所以這時(shí)Client再發(fā)送請(qǐng)求數(shù)據(jù)給Server已經(jīng)無(wú)效了,因?yàn)镾erver到Client的TCP連接已關(guān)閉,不會(huì)再發(fā)送響應(yīng)了。這里的Close-Wait大概是等待主機(jī)通知關(guān)閉這次TCP連接。

接下來(lái)Client就發(fā)送一個(gè)連接釋放給Server,FIN=1,ACK=1,ack = u + 1 與之前發(fā)送給Server的確認(rèn)號(hào)一樣。這里的seq = v 也與之前的一樣。(個(gè)人認(rèn)為Close-Wait期間Client不會(huì)再發(fā)送數(shù)據(jù)給Server,所有數(shù)據(jù)序號(hào)并沒有發(fā)生改變,正確與否有待考證)

Server收到連接釋放報(bào)文后,便發(fā)送一個(gè)確認(rèn)報(bào)文。然后進(jìn)入Time-Wait,而不是立即關(guān)閉連接,原因是不保證這個(gè)確認(rèn)報(bào)文沒有丟失,而Client收不到確認(rèn)報(bào)文則執(zhí)行超時(shí)重傳FIN+ACK,這時(shí)Server還未關(guān)閉,就可以重傳ACK。

?

轉(zhuǎn)載于:https://www.cnblogs.com/shao-shao/articles/3489436.html

總結(jié)

以上是生活随笔為你收集整理的浏览器与服务器响应流程-----(转)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。