{eval=Array;=+count(Array);}

国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

問(wèn)答專欄Q & A COLUMN

一次完整的http請(qǐng)求過(guò)程是怎樣的?

ningwangningwang 回答9 收藏1
收藏問(wèn)題

9條回答

fxp

fxp

回答于2022-06-22 19:42

謝邀~

我們打開(kāi)瀏覽器,在地址欄輸入www.wukong.com,幾秒后瀏覽器打開(kāi)悟空問(wèn)答的頁(yè)面,那么這幾秒鐘內(nèi)發(fā)生了哪些事情,我就帶大家一起看看完整的流程:

解析URL

瀏覽器首先會(huì)對(duì)輸入的URL進(jìn)行驗(yàn)證,如果不合法的時(shí)候,那么會(huì)把輸入的文字傳給默認(rèn)的搜索引擎,比如你只在地址欄輸入“悟空問(wèn)答”幾個(gè)字。

如果URL通過(guò)驗(yàn)證,那么可以解析得到協(xié)議(http或者h(yuǎn)ttps)、域名(wukong)、資源(首頁(yè))等信息。

DNS查詢

  • 瀏覽器會(huì)先檢查域名信息是否在緩存中。

  • 再檢查域名是否在本地的Hosts文件中。

  • 如果還不在,那么瀏覽器會(huì)向DNS服務(wù)器發(fā)送一個(gè)查詢請(qǐng)求,獲得目標(biāo)服務(wù)器的IP地址。

TCP封包及傳輸

這時(shí)候?yàn)g覽器獲得了目標(biāo)服務(wù)器的IP(DNS返回)、端口(URL中包含,沒(méi)有就使用默認(rèn)),瀏覽器會(huì)調(diào)用庫(kù)函數(shù)socket,生成一個(gè)TCP流套接字,也就是完成了TCP的封包。

TCP封包完成之后,就可以傳輸了,在完成“你瞅啥”,“瞅你咋地”,“來(lái),過(guò)來(lái)嘮嘮”一系列操作之后,瀏覽器和服務(wù)器就完成了TCP的三次握手,建立了連接,后面就可以請(qǐng)求服務(wù)器資源了。

服務(wù)器接收請(qǐng)求并相應(yīng)

  • HTTP有很多請(qǐng)求方法,比如:GET/POST/PUT/DELETE等等,我們?yōu)g覽器輸入U(xiǎn)RL這種,是GET方法。

  • 服務(wù)器接收到GET請(qǐng)求,服務(wù)器根據(jù)請(qǐng)求信息,獲得相應(yīng)的相應(yīng)內(nèi)容。例如我們輸入的是:www.wukong.com,那么意味著訪問(wèn)首頁(yè)文件。

瀏覽器解析并渲染

瀏覽器從服務(wù)器拿到了想要訪問(wèn)的資源,大多數(shù)時(shí)候,這個(gè)資源就是HTML頁(yè)面,當(dāng)然也可能是一個(gè)其他類(lèi)型的文件。

  • 瀏覽器先對(duì)HTML文檔進(jìn)行解析,生成解析樹(shù)(以DOM元素為節(jié)點(diǎn)的樹(shù))。

  • 加載頁(yè)面的外部資源,比如JS、CSS、圖片。

  • 遍歷DOM樹(shù),并計(jì)算每個(gè)節(jié)點(diǎn)的樣式,最終完成渲染,變成我們看到的頁(yè)面。

這次請(qǐng)求響應(yīng)之后,會(huì)斷開(kāi)連接,就這樣,完成了一次HTTP的請(qǐng)求。

我將持續(xù)分享Java開(kāi)發(fā)、架構(gòu)設(shè)計(jì)、程序員職業(yè)發(fā)展等方面的見(jiàn)解,希望能得到你的關(guān)注。

評(píng)論0 贊同0
  •  加載中...
hoohack

hoohack

回答于2022-06-22 19:42

“我是喲喲吼說(shuō)科技,專注于數(shù)據(jù)網(wǎng)絡(luò)的回答,歡迎大家與我交流數(shù)據(jù)網(wǎng)絡(luò)的問(wèn)題”

如題,一個(gè)完整的HTTP過(guò)程是怎樣的?

一個(gè)完整的HTTP過(guò)程包括建立連接、數(shù)據(jù)傳輸、斷開(kāi)連接等七個(gè)步驟。

下面喲喲來(lái)詳細(xì)介紹一下每一步:

1、TCP建立連接

HTTP協(xié)議是基于TCP協(xié)議來(lái)實(shí)現(xiàn)的,因此首先就是要通過(guò)TCP三次握手與服務(wù)器端建立連接,一般HTTP默認(rèn)的端口號(hào)為80;

2、瀏覽器發(fā)送請(qǐng)求命令

在與服務(wù)器建立連接后,Web瀏覽器會(huì)想服務(wù)器發(fā)送請(qǐng)求命令

3、瀏覽器發(fā)送請(qǐng)求頭消息

在瀏覽器發(fā)送請(qǐng)求命令后,還會(huì)發(fā)送一些其它信息,最后以一行空白內(nèi)容告知服務(wù)器已經(jīng)完成頭信息的發(fā)送;

4、服務(wù)器應(yīng)答

在收到瀏覽器發(fā)送的請(qǐng)求后,服務(wù)器會(huì)對(duì)其進(jìn)行回應(yīng),應(yīng)答的第一部分是協(xié)議的版本號(hào)和應(yīng)答狀態(tài)碼;

5、服務(wù)器回應(yīng)頭信息

與瀏覽器端同理,服務(wù)器端也會(huì)將自身的信息發(fā)送一份至瀏覽器;

6、服務(wù)器發(fā)送數(shù)據(jù)

在完成所有應(yīng)答后,會(huì)以Content-Type應(yīng)答頭信息所描述的格式發(fā)送用戶所需求的數(shù)據(jù)信息;

7、斷開(kāi)TCP連接

在完成此次數(shù)據(jù)通信后,服務(wù)器會(huì)通過(guò)TCP四次揮手主動(dòng)斷開(kāi)連接。但若此次連接為長(zhǎng)連接,那么瀏覽器或服務(wù)器的頭信息會(huì)加入keep-alive的信息,會(huì)保持此連接狀態(tài),在有其它數(shù)據(jù)發(fā)送時(shí),可以節(jié)省建立連接的時(shí)間;

歡迎大家多多關(guān)注我,在下方評(píng)論區(qū)說(shuō)出自己的見(jiàn)解。

評(píng)論0 贊同0
  •  加載中...
HollisChuang

HollisChuang

回答于2022-06-22 19:42

前言

今天我們來(lái)徹底聊聊,什么是TCP/IP、http、socket、長(zhǎng)連接、短連接

TCP/IP

TCP/IP是協(xié)議組,分為三個(gè)層次:

  • 網(wǎng)絡(luò)層
  • 傳輸層
  • 應(yīng)用層。

在網(wǎng)絡(luò)層有:

  • IP協(xié)議
  • ICMP協(xié)議
  • ARP協(xié)議
  • RARP協(xié)議
  • BOOTP協(xié)議

在傳輸層中有:

  • TCP協(xié)議
  • UDP協(xié)議

在應(yīng)用層有:

TCP包括:

  • FTP協(xié)議
  • HTTP協(xié)議
  • TELNET協(xié)議
  • SMTP協(xié)議

UDP包括:

  • DNS協(xié)議
  • TFTP協(xié)議

短連接

流程:連接->傳輸數(shù)據(jù)->關(guān)閉連接

HTTP是無(wú)狀態(tài)的,瀏覽器和服務(wù)器每進(jìn)行一次HTTP操作,就建立一次連接,但任務(wù)結(jié)束就中斷連接。

也可以這樣說(shuō):短連接是指SOCKET連接后發(fā)送后接收完數(shù)據(jù)后馬上斷開(kāi)連接。

長(zhǎng)連接

流程:連接 -> 傳輸數(shù)據(jù) -> 保持連接 -> 傳輸數(shù)據(jù) -> 。。。-> 關(guān)閉連接。

長(zhǎng)連接指建立SOCKET連接后不管是否使用都保持連接,但安全性較差。

http的長(zhǎng)連接

HTTP也可以建立長(zhǎng)連接的,使用Connection:keep-alive,HTTP 1.1默認(rèn)進(jìn)行長(zhǎng)連接。

HTTP1.1 和 HTTP1.0 相比較而言,最大的區(qū)別就是增加了長(zhǎng)連接支持(貌似最新的 http1.0 可以顯示的指定 keep-alive),但還是無(wú)狀態(tài)的,或者說(shuō)是不可以信任的。

什么時(shí)候用長(zhǎng)連接,短連接?

長(zhǎng)連接多用于操作頻繁,點(diǎn)對(duì)點(diǎn)的通訊,而且連接數(shù)不能太多情況。

每個(gè)TCP連接都需要三步握手,這需要時(shí)間,如果每個(gè)操作都是先連接,再操作的話那么處理速度會(huì)降低很多。

所以每個(gè)操作完后都不斷開(kāi),次處理時(shí)直接發(fā)送數(shù)據(jù)包就OK了,不用建立TCP連接。

例如:數(shù)據(jù)庫(kù)的連接用長(zhǎng)連接, 如果用短連接頻繁的通信會(huì)造成socket錯(cuò)誤,而且頻繁的socket 創(chuàng)建也是對(duì)資源的浪費(fèi)。


而像WEB網(wǎng)站的http服務(wù)一般都用短鏈接,因?yàn)殚L(zhǎng)連接對(duì)于服務(wù)端來(lái)說(shuō)會(huì)耗費(fèi)一定的資源。

而像WEB網(wǎng)站成千上萬(wàn)甚至上億客戶端的頻繁連接,用短連接會(huì)更省一些資源,如果用長(zhǎng)連接,而且同時(shí)有成千上萬(wàn)的用戶,如果每個(gè)用戶都占用一個(gè)連接的話,那可想而知吧。

所以并發(fā)量大,但每個(gè)用戶無(wú)需頻繁操作情況下需用短連好。

總之,長(zhǎng)連接和短連接的選擇要視情況而定。

數(shù)據(jù)發(fā)送接收方式

異步

報(bào)文發(fā)送和接收是分開(kāi)的,相互獨(dú)立的,互不影響。這種方式又分兩種情況:

  • 異步雙工:接收和發(fā)送在同一個(gè)程序中,由兩個(gè)不同的子進(jìn)程分別負(fù)責(zé)發(fā)送和接收
  • 異步單工:接收和發(fā)送是用兩個(gè)不同的程序來(lái)完成。

同步

報(bào)文發(fā)送和接收是同步進(jìn)行,既報(bào)文發(fā)送后等待接收返回報(bào)文。

同步方式一般需要考慮超時(shí)問(wèn)題,即報(bào)文發(fā)出去后不能無(wú)限等待,需要設(shè)定超時(shí)時(shí)間,超過(guò)該時(shí)間發(fā)送方不再等待讀返回報(bào)文,直接通知超時(shí)返回。

在長(zhǎng)連接中一般是沒(méi)有條件能夠判斷讀寫(xiě)什么時(shí)候結(jié)束,所以必須要加長(zhǎng)度報(bào)文頭。讀函數(shù)先是讀取報(bào)文頭的長(zhǎng)度,再根據(jù)這個(gè)長(zhǎng)度去讀相應(yīng)長(zhǎng)度的報(bào)文。

Socket是什么

Socket是應(yīng)用層與TCP/IP協(xié)議族通信的中間軟件抽象層,它是一組接口(TCP/IP是協(xié)議,Socket是他們的具體實(shí)現(xiàn)和對(duì)外api)。

在設(shè)計(jì)模式中,Socket其實(shí)就是一個(gè)門(mén)面模式,它把復(fù)雜的TCP/IP協(xié)議族隱藏在Socket接口后面。

對(duì)用戶來(lái)說(shuō),一組簡(jiǎn)單的接口就是全部,讓Socket去組織數(shù)據(jù),以符合指定的協(xié)議。

Socket 通信示例

主機(jī) A 的應(yīng)用程序要能和主機(jī) B 的應(yīng)用程序通信,必須通過(guò) Socket 建立連接,而建立 Socket 連接必須需要底層 TCP/IP 協(xié)議來(lái)建立 TCP 連接。

建立 TCP 連接需要底層 IP 協(xié)議來(lái)尋址網(wǎng)絡(luò)中的主機(jī)。

我們知道網(wǎng)絡(luò)層使用的 IP 協(xié)議可以幫助我們根據(jù) IP 地址來(lái)找到目標(biāo)主機(jī),但是一臺(tái)主機(jī)上可能運(yùn)行著多個(gè)應(yīng)用程序,如何才能與指定的應(yīng)用程序通信就要通過(guò) TCP 或 UPD 的地址也就是端口號(hào)來(lái)指定。

這樣就可以通過(guò)一個(gè) Socket 實(shí)例唯一代表一個(gè)主機(jī)上的一個(gè)應(yīng)用程序的通信鏈路了。


建立通信鏈路(有點(diǎn)燒腦,可繞過(guò))

當(dāng)客戶端要與服務(wù)端通信,客戶端首先要?jiǎng)?chuàng)建一個(gè) Socket 實(shí)例,操作系統(tǒng)將為這個(gè) Socket 實(shí)例分配一個(gè)沒(méi)有被使用的本地端口號(hào),并創(chuàng)建一個(gè)包含本地和遠(yuǎn)程地址和端口號(hào)的套接字?jǐn)?shù)據(jù)結(jié)構(gòu)。


這個(gè)數(shù)據(jù)結(jié)構(gòu)將一直保存在系統(tǒng)中直到這個(gè)連接關(guān)閉。在創(chuàng)建 Socket 實(shí)例的構(gòu)造函數(shù)正確返回之前,將要進(jìn)行 TCP 的三次握手協(xié)議,TCP 握手協(xié)議完成后,Socket 實(shí)例對(duì)象將創(chuàng)建完成,否則將拋出 IOException 錯(cuò)誤。


與之對(duì)應(yīng)的服務(wù)端將創(chuàng)建一個(gè) ServerSocket 實(shí)例,ServerSocket 創(chuàng)建比較簡(jiǎn)單只要指定的端口號(hào)沒(méi)有被占用,一般實(shí)例創(chuàng)建都會(huì)成功,同時(shí)操作系統(tǒng)也會(huì)為 ServerSocket 實(shí)例創(chuàng)建一個(gè)底層數(shù)據(jù)結(jié)構(gòu),這個(gè)數(shù)據(jù)結(jié)構(gòu)中包含指定監(jiān)聽(tīng)的端口號(hào)和包含監(jiān)聽(tīng)地址的通配符,通常情況下都是“*”即監(jiān)聽(tīng)所有地址。


之后當(dāng)調(diào)用 accept() 方法時(shí),將進(jìn)入阻塞狀態(tài),等待客戶端的請(qǐng)求。當(dāng)一個(gè)新的請(qǐng)求到來(lái)時(shí),將為這個(gè)連接創(chuàng)建一個(gè)新的套接字?jǐn)?shù)據(jù)結(jié)構(gòu),該套接字?jǐn)?shù)據(jù)的信息包含的地址和端口信息正是請(qǐng)求源地址和端口。


這個(gè)新創(chuàng)建的數(shù)據(jù)結(jié)構(gòu)將會(huì)關(guān)聯(lián)到 ServerSocket 實(shí)例的一個(gè)未完成的連接數(shù)據(jù)結(jié)構(gòu)列表中,注意這時(shí)服務(wù)端與之對(duì)應(yīng)的 Socket 實(shí)例并沒(méi)有完成創(chuàng)建,而要等到與客戶端的三次握手完成后,這個(gè)服務(wù)端的 Socket 實(shí)例才會(huì)返回,并將這個(gè) Socket 實(shí)例對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu)從未完成列表中移到已完成列表中。所以 ServerSocket 所關(guān)聯(lián)的列表中每個(gè)數(shù)據(jù)結(jié)構(gòu),都代表與一個(gè)客戶端的建立的 TCP 連接。

評(píng)論0 贊同0
  •  加載中...
blastz

blastz

回答于2022-06-22 19:42

Http請(qǐng)求的一次詳解:

  1. 客戶端輸入U(xiǎn)RL

  2. 客戶端檢測(cè)緩存:

有緩存且較新,客戶端直接讀取本地緩存進(jìn)行資源展示;

有緩存但是不新,準(zhǔn)備http請(qǐng)求包,發(fā)送至服務(wù)端進(jìn)行緩存校驗(yàn);

備注:http1.0中Expire、http1.1中是Cache-Control根據(jù)發(fā)起http請(qǐng)求:

請(qǐng)求報(bào)文包含:
a) 請(qǐng)求行
用來(lái)說(shuō)明請(qǐng)求類(lèi)型(getpostdelete等)、要訪問(wèn)的資源(URI)以及使用的HTTP版本(1.0還是1.1)
b) 首部(header)
HOST將指出請(qǐng)求的目的地;
User-Agent由瀏覽器來(lái)定義,自動(dòng)發(fā)送;
Connection:通常設(shè)置為keep-Alive, 長(zhǎng)連接;
其他首部包括等。
c) 空行
d) 請(qǐng)求實(shí)體

3. 提取請(qǐng)求首部HOST通過(guò)DNS域名解析獲取服務(wù)IP(DNS緩存遞歸等)

4. 通過(guò)IP與默認(rèn)端口創(chuàng)建TCP連接,進(jìn)行http請(qǐng)求報(bào)文數(shù)據(jù)發(fā)送,其中重點(diǎn)就三次握手進(jìn)行描述:

客戶端向服務(wù)端發(fā)送syn=1,seq=client請(qǐng)求的ID;
服務(wù)端向客戶端發(fā)送syn=1,seq=服務(wù)端請(qǐng)求的ID,ack=客戶端請(qǐng)求的ID+1;
客戶端向服務(wù)端發(fā)送syn=0,seq=客戶端請(qǐng)求的ID+1,ack=服務(wù)端請(qǐng)求的ID+1,datadata…

5. 服務(wù)端程序接受請(qǐng)求,定向到請(qǐng)求路徑處理請(qǐng)求:

服務(wù)器對(duì)請(qǐng)求報(bào)文進(jìn)行解析,并獲取請(qǐng)求的資源及請(qǐng)求方法等相關(guān)信息,根據(jù)方法,資源,首部和可選的主體部分對(duì)請(qǐng)求進(jìn)行處理

元數(shù)據(jù):請(qǐng)求報(bào)文首部
<method> <URL> <VERSION>
HEADERS格式name:value
<request body>
示例:
Host: www.chuyuni.cn 請(qǐng)求的主機(jī)名稱
Server: Apache/2.4.7

HTTP常用請(qǐng)求方式:MethodGET、POST、HEAD、PUT、DELETE、TRACE、OPTIONS

6.訪問(wèn)資源:

服務(wù)器獲取請(qǐng)求報(bào)文中請(qǐng)求的資源web服務(wù)器,即存放了web資源的服務(wù)器,負(fù)責(zé)向請(qǐng)求者提供對(duì)方請(qǐng)求的靜態(tài)資源,或動(dòng)態(tài)運(yùn)行后生成的資源

資源放置于本地文件系統(tǒng)特定的路徑:DocRoot
DocRoot → /var/www/html
/var/www/html/images/logo.jpg
http://www.magedu.com/images/logo.jpg
web服務(wù)器資源路徑映射方式:
(a) docroot (b) alias
(c) 虛擬主機(jī)docroot(d) 用戶家目錄docroot

7. 返回處理結(jié)果,準(zhǔn)備http響應(yīng):

響應(yīng)報(bào)文包含:
a) 狀態(tài)行:http版本(1.1或者1.0),狀態(tài)碼
200:請(qǐng)求正常處理
304:返回上次請(qǐng)求資源未作改動(dòng),驗(yàn)證瀏覽器的緩存機(jī)制
400:請(qǐng)求參數(shù)錯(cuò)誤
401:客戶端無(wú)權(quán)訪問(wèn),要去輸入用戶名密碼之類(lèi)的授權(quán)信息
403:禁止訪問(wèn)(讀寫(xiě)權(quán)限等影響)
404:請(qǐng)求的資源不存在
500:服務(wù)內(nèi)部錯(cuò)誤
502:網(wǎng)關(guān)錯(cuò)誤
503:臨時(shí)過(guò)載或者維護(hù),導(dǎo)致服務(wù)端無(wú)法正常處理請(qǐng)求
b) 首部
報(bào)文支持的語(yǔ)言編碼格式等,注意If-Modified-Since:只有當(dāng)所請(qǐng)求的內(nèi)容在指定的日期之后又經(jīng)過(guò)修改才返回它,否則返回304“Not Modified”應(yīng)答,用于服務(wù)端緩存校驗(yàn)
c) 空行
d) 響應(yīng)報(bào)文實(shí)體

8. 通過(guò)建立的tcp連接來(lái)返回相關(guān)的http響應(yīng)報(bào)文及http狀態(tài)信息,然后根據(jù)實(shí)際情況看是否關(guān)閉連接(Connection的keep-alive)

9. TCP連接關(guān)閉經(jīng)歷4次握手

客戶端主動(dòng)關(guān)閉連接放發(fā)送FIN進(jìn)入FIN_WAIT1狀態(tài)

服務(wù)端發(fā)最后的data和ack客戶端接收進(jìn)入CLOSEWAIT狀態(tài),客戶端進(jìn)入接受ACK進(jìn)入FINWAIT2狀態(tài)

服務(wù)端主動(dòng)發(fā)FIN,客戶端接受FIN并發(fā)送ack進(jìn)入TIMEWAIT狀態(tài)

服務(wù)器端正式關(guān)閉連接進(jìn)入close狀態(tài)

10. 客戶端拿到http響應(yīng)的報(bào)文信息,經(jīng)過(guò)一系列前端處理過(guò)程最終將請(qǐng)求的資源進(jìn)行展示。

作者:夕陽(yáng)雨晴,歡迎關(guān)注我的我們:偶爾美文,主流Java,為你講述不一樣的碼農(nóng)生活。

評(píng)論0 贊同0
  •  加載中...
Pink

Pink

回答于2022-06-22 19:42

專業(yè)問(wèn)題我來(lái)回答,

背景

  • HTTP(HyperText Transfer Protocol超文本傳輸協(xié)議),該協(xié)議位于OSI模型的應(yīng)用層,應(yīng)用層是開(kāi)放系統(tǒng)的最高層,是程序員能直接操縱的通信層。一次HTTP的請(qǐng)求主要建立在傳輸層TCP三次握手建立通信和四次分手?jǐn)嚅_(kāi)通信的基礎(chǔ)上,應(yīng)用層在TCP建立好通信線路后直接發(fā)送數(shù)據(jù)到對(duì)端服務(wù)器上
  • TCP:TCP是一種面向連接的可靠傳輸協(xié)議,為什么說(shuō)它是一種可靠的傳輸協(xié)議,就在于他這種三次握手和四次分手的機(jī)制,通過(guò)握手能定時(shí)重傳,序號(hào)確認(rèn),數(shù)據(jù)包校驗(yàn),擁塞控制來(lái)達(dá)到可靠傳輸。當(dāng)然UDP是不建立這種可靠傳輸?shù)囊蚨鴽](méi)有握手機(jī)制。

TCP三次握手和四次分手

所謂三次握手(Three-way Handshake),是在建立通信過(guò)程中,服務(wù)端和客戶端總共發(fā)送三次數(shù)據(jù)包。三次握手的目的是:建立TCP通信,和對(duì)方同步序列號(hào)和確認(rèn)號(hào),交換通信窗口的大小等。

  • 第一次握手(SYN=1,seq=x):客戶端向服務(wù)端發(fā)送一個(gè)TCP標(biāo)志位SYN為1的數(shù)據(jù)包,表明要與服務(wù)端指定的端口建立連接,同時(shí)知名該數(shù)據(jù)包的第一個(gè)字節(jié)的序號(hào)為seq=X,發(fā)送完畢后,客戶端進(jìn)入SYN-END狀態(tài)。
  • 第二次握手(SYN=1,ACK=1,ack=x+1,seq=y):服務(wù)端向客戶端發(fā)送一個(gè)同步確認(rèn)包(SYN=1,ACK=1,確認(rèn)號(hào)為x+1,表明自己已經(jīng)收到序號(hào)為x開(kāi)始的數(shù)據(jù)包,并向客戶端發(fā)送一個(gè)序號(hào)為seq=y的包,發(fā)送完畢后,服務(wù)器端進(jìn)入 SYN_RCVD 狀態(tài)。
  • 第三次握手(ACK=1,seq=x+1,ack=y+1):此時(shí)客戶端向服務(wù)端發(fā)送一個(gè)確認(rèn)包(ACK=1),同時(shí)確認(rèn)號(hào)為y+1,表明客戶端已經(jīng)接受到服務(wù)器以y序號(hào)開(kāi)始的數(shù)據(jù)包,發(fā)送完畢后,客戶端進(jìn)入 ESTABLISHED 狀態(tài),當(dāng)服務(wù)器端接收到這個(gè)包時(shí),也進(jìn)入 ESTABLISHED 狀態(tài),TCP握手結(jié)束。
  • 第一次揮手(FIN=1,seq=u):客戶端向服務(wù)端發(fā)送FIN=1的包,表明要斷開(kāi)通信,同時(shí)發(fā)送一個(gè)序號(hào)seq=u的數(shù)據(jù)包;
  • 第二次揮手(ACK=1,seq=v,ack=u+1):服務(wù)端向客戶端發(fā)送一個(gè)確認(rèn)數(shù)據(jù)包(ACK=1),同時(shí)發(fā)送一個(gè)序列號(hào)為seq=v的數(shù)據(jù)包。
  • 第三次揮手(FIN=1,ACK=1,seq=w,ack=u+1):FIN=1,表明服務(wù)端同意斷開(kāi)通信鏈路,這個(gè)包同樣是確認(rèn)包(ACK=1),因?yàn)榉?wù)端發(fā)送的兩次確認(rèn)包之間客戶端并沒(méi)有發(fā)送數(shù)據(jù)包給服務(wù)端,所以確認(rèn)號(hào)都是ack=u+1;
  • 第四次揮揮手(ACK=1,seq=u+1,ack=w+1):服務(wù)端向客戶端發(fā)送確(ACK=1),同時(shí)發(fā)送一個(gè)序列號(hào)為u+1的包。至此,通信鏈路斷開(kāi)。

完整的HTTP請(qǐng)求過(guò)程

1.建立TCP連接:只有當(dāng)TCP建立完成后才能進(jìn)行通信。

2.客戶端向服務(wù)端發(fā)起請(qǐng)求:該階段應(yīng)用層通過(guò)HTTP協(xié)議組裝請(qǐng)求包通過(guò)傳輸層網(wǎng)絡(luò)層和數(shù)據(jù)鏈路層到達(dá)服務(wù)器。

3.客戶端向服務(wù)端發(fā)送請(qǐng)求頭信息:在這一步客戶端將請(qǐng)求頭信息組裝在各類(lèi)頭部字段中,進(jìn)行發(fā)送。

4.服務(wù)端向客戶端發(fā)送響應(yīng):服務(wù)端接收到客戶端的請(qǐng)求信息后,做出響應(yīng)來(lái)客戶端。

5.服務(wù)端向客戶端發(fā)送響應(yīng)報(bào)文的頭部字段:將響應(yīng)數(shù)據(jù)包的頭部字段發(fā)送給客戶端。

6.服務(wù)端向客戶端發(fā)送響應(yīng)數(shù)據(jù):通過(guò)Body將響應(yīng)數(shù)據(jù)給客戶單,而這些數(shù)據(jù)才是客戶端要獲取的。

7.關(guān)閉通信線路:數(shù)據(jù)發(fā)送完畢后,如果是短連接將馬上關(guān)閉通信線路,如果是長(zhǎng)連接,服務(wù)端會(huì)通過(guò)同步信息Connection:keep-alive來(lái)告訴客戶端。

以上,就是一個(gè)完整HTTP請(qǐng)求的流程,其主要在于TCP建聯(lián),后續(xù)都是應(yīng)用層之間的交互來(lái)通信。

感覺(jué)我的回答對(duì)你有幫助,麻煩點(diǎn)贊關(guān)注哈,你的關(guān)注是我繼續(xù)下去的動(dòng)力對(duì)網(wǎng)絡(luò)有興趣的可以留言交流,有疑問(wèn)的也可以私信,大家一起成長(zhǎng),一起交流,謝謝大家

評(píng)論0 贊同0
  •  加載中...
masturbator

masturbator

回答于2022-06-22 19:42

謝謝邀請(qǐng)。

一次完整的HTTP請(qǐng)求過(guò)程是怎么樣的?事實(shí)上,題主的這個(gè)問(wèn)題,最開(kāi)始我也是抱著試一試的心態(tài)進(jìn)來(lái)的,后來(lái)發(fā)現(xiàn)整個(gè)回答區(qū)基本上都是學(xué)術(shù)回答,講的通俗一點(diǎn),都是專業(yè)人士在那邊玩,但是……沒(méi)幾個(gè)民眾能看得懂。就好像評(píng)論區(qū)那邊有一個(gè)回答的評(píng)論是,“在我們發(fā)計(jì)算機(jī)學(xué)術(shù)信息好像怪怪的。

我大致把這個(gè)問(wèn)題查了個(gè)遍,寫(xiě)個(gè)最通俗的版本給大家看看吧。

其實(shí)HTTP請(qǐng)求過(guò)程,就是發(fā)送請(qǐng)求—響應(yīng)的過(guò)程。

第一步

今天你想起來(lái),有事,需要找隔壁老王要個(gè)小視頻。于是,你打開(kāi)了“TCP協(xié)議牌”機(jī)器,這是一臺(tái)高清組裝的移動(dòng)電話機(jī)。

①TCP告訴你,電話線路連接通道正在接通……

第二步

電話接通了,在視頻上出現(xiàn)了隔壁老王那張猥瑣的笑臉。

你開(kāi)始說(shuō)話。

  • ①你:喂,你能聽(tīng)到我說(shuō)話嗎?(第一次握手)
  • ②隔壁老王:能能能,我能聽(tīng)到,那你能聽(tīng)到我的說(shuō)話嗎?(第二次握手)
  • ③你:哈哈,我也能聽(tīng)到!那咱們開(kāi)始吧!(第三次握手)

接下來(lái),就要開(kāi)始做正事了。

第三步

1.你說(shuō):

哎呀老王呀,我這邊需要一個(gè)小電影,你能給我發(fā)過(guò)來(lái)嗎?(客戶端發(fā)送請(qǐng)求信息)

2.接著,沒(méi)等老王說(shuō)話,你就把需要的小電影名字、大小、我這網(wǎng)速等等信息給他發(fā)了過(guò)去(客戶端發(fā)送頭部信息),末尾還加上了一長(zhǎng)串省略空格(以空格做結(jié)尾)。

第四步

老王皺皺眉頭。

“行吧!”(服務(wù)器端回應(yīng)請(qǐng)求信息)

“你是要這個(gè)小電影《XXX》,番號(hào)XXX,1GB大小,某度網(wǎng)盤(pán)是吧?行!”(服務(wù)器端回應(yīng)頭部信息)

老王動(dòng)了動(dòng)手指,查找了一下儲(chǔ)存卡目錄,翻出小電影。

“我給你發(fā)過(guò)去了!”(服務(wù)器端發(fā)送請(qǐng)求數(shù)據(jù))

第五步

你:哎呀哎呀,收到了!謝謝老王哈!下次請(qǐng)你吃飯!那我就先關(guān)閉了!(第一次揮手)
老王:最后跟你說(shuō)一句,少看小電影!(第二次揮手)
老王:那我就先關(guān)閉了?(第三次揮手)
你:行,那你關(guān)閉吧!(第四次揮手)

視頻聊天結(jié)束。你隨即打開(kāi)收到的抖音小視頻,美滋滋的看起成都小甜甜姐姐起來(lái)。

這件事告訴我們:

我還沒(méi)有女朋友

評(píng)論0 贊同0
  •  加載中...
LdhAndroid

LdhAndroid

回答于2022-06-22 19:42

域名解析 --> 發(fā)起TCP的3次握手 --> 建立TCP連接后發(fā)起http請(qǐng)求 --> 服務(wù)器響應(yīng)http請(qǐng)求,瀏覽器得到html代碼 --> 瀏覽器解析html代碼,并請(qǐng)求html代碼中的資源(如js、css、圖片等) --> 瀏覽器對(duì)頁(yè)面進(jìn)行渲染呈現(xiàn)給用戶

評(píng)論0 贊同0
  •  加載中...
haoguo

haoguo

回答于2022-06-22 19:42

一,在瀏覽器地址欄輸入網(wǎng)址

二,解析域名,找到主機(jī)的ip地址

三,瀏覽器與主機(jī)建立TCP連接

四,瀏覽器向主機(jī)發(fā)起GET請(qǐng)求

五,服務(wù)器響應(yīng)請(qǐng)求,返回html頁(yè)面

六,瀏覽器開(kāi)始顯示服務(wù)器返回的頁(yè)面,并且在顯示html頁(yè)面的時(shí)候,如果遇見(jiàn)css文件,js文件,圖片,就又會(huì)再次給相應(yīng)地址服務(wù)器發(fā)起請(qǐng)求。

評(píng)論0 贊同0
  •  加載中...
pumpkin9

pumpkin9

回答于2022-06-22 19:42

一次完整的http請(qǐng)求過(guò)程是怎樣的?

一次完整的http請(qǐng)求可以說(shuō)相當(dāng)迷人:

從你輸入網(wǎng)址點(diǎn)擊回車(chē)的那一刻開(kāi)始,一切就開(kāi)始發(fā)生:

1、首先瀏覽器會(huì)解析你輸入的這一串字符;主要是解析協(xié)議(HTTP(s)、ftp:)、域名(www.qq.com)等;如果是合法的網(wǎng)址就繼續(xù)進(jìn)行;

2、接下啦就是要根據(jù)第一步解析到的域名找到域名指向的IP我們稱之為DNS查詢。當(dāng)然這也是一個(gè)相對(duì)有趣的過(guò)程,但不是問(wèn)題重點(diǎn),此處簡(jiǎn)略;

3、找到服務(wù)器的IP地址后寫(xiě)下來(lái)就是http請(qǐng)求的開(kāi)始:

三次握手建立連接:

客戶端:“在嗎?”;

服務(wù)端:“在啊”;

客服端 :“那我開(kāi)始連你啦”;開(kāi)始發(fā)起http請(qǐng)求

建立連接后發(fā)生Http請(qǐng)求,請(qǐng)求內(nèi)容有:

請(qǐng)求行:uri和協(xié)議的版本 (如:GET /index.php HTTP/1.1 )

請(qǐng)求頭部:關(guān)客戶端信息及請(qǐng)求正文信息(長(zhǎng)度、編碼格式等)

請(qǐng)求數(shù)據(jù):如:u=admin&pwd=123456 (可為空)

服務(wù)端在收到這些信息后作出相應(yīng)的回答:

狀態(tài):協(xié)議版本+狀態(tài)碼+簡(jiǎn)要描述(如:HTTP/1.1 200 OK)

響應(yīng)頭部:Content-Type(必須有:比如Content-Type: text/html), 其他可選:Date 、server 等

響應(yīng)數(shù)據(jù):即服務(wù)器回應(yīng)客戶端的內(nèi)容

打開(kāi)瀏覽器=》F12 訪問(wèn)一下百度看一下這個(gè)完美的過(guò)程吧!

當(dāng)然其中涉及的到東西遠(yuǎn)不止這些,比如瀏覽器靜態(tài)文件的緩存;各個(gè)狀態(tài)碼含義;單次請(qǐng)求最大返回資源數(shù);請(qǐng)求字節(jié)長(zhǎng)度限制等等。

此處班門(mén)弄斧,如有錯(cuò)誤請(qǐng)批評(píng)指正。

評(píng)論0 贊同0
  •  加載中...

最新活動(dòng)

您已邀請(qǐng)0人回答 查看邀請(qǐng)

我的邀請(qǐng)列表

  • 擅長(zhǎng)該話題
  • 回答過(guò)該話題
  • 我關(guān)注的人
向幫助了您的網(wǎng)友說(shuō)句感謝的話吧!
付費(fèi)偷看金額在0.1-10元之間
<