DNS查找過(guò)程:
2.????????如果用戶的瀏覽器緩存中沒(méi)有,瀏覽器會(huì)查找操作系統(tǒng)緩存(hosts文件)中是否有這個(gè)域名對(duì)應(yīng)的DNS解析結(jié)果。
?
>>>在應(yīng)用層,瀏覽器會(huì)給web服務(wù)器發(fā)送一個(gè)HTTP請(qǐng)求;
請(qǐng)求頭為:GET http://www.baidu.com/HTTP/1.1
?
>>>在傳輸層,(上層的傳輸數(shù)據(jù)流分段)HTTP數(shù)據(jù)包會(huì)嵌入在TCP報(bào)文段中;
TCP報(bào)文段需要設(shè)置端口,接收方(百度)的HTTP端口默認(rèn)是80,本機(jī)的端口是一個(gè)1024-65535之間的隨機(jī)整數(shù),這里假設(shè)為1025,這樣TCP報(bào)文段由TCP首部(包含發(fā)送方和接收方的端口信息)+ HTTP數(shù)據(jù)包組成。
?
>>>在網(wǎng)絡(luò)層中,TCP報(bào)文段再嵌入IP數(shù)據(jù)包中;
?
>>>?在網(wǎng)絡(luò)接口層,IP數(shù)據(jù)包嵌入到數(shù)據(jù)幀(以太網(wǎng)數(shù)據(jù)包)中在網(wǎng)絡(luò)上傳送;
?
>>>數(shù)據(jù)包經(jīng)過(guò)多個(gè)網(wǎng)關(guān)的轉(zhuǎn)發(fā)到達(dá)百度服務(wù)器,請(qǐng)求對(duì)應(yīng)端口的服務(wù);
服務(wù)接收到發(fā)送過(guò)來(lái)的以太網(wǎng)數(shù)據(jù)包開(kāi)始解析請(qǐng)求信息,從以太網(wǎng)數(shù)據(jù)包中提取IP數(shù)據(jù)包—>TCP報(bào)文段—>HTTP數(shù)據(jù)包,并組裝為有效數(shù)據(jù)交與對(duì)應(yīng)線程池中分配的線程進(jìn)行處理,在這個(gè)過(guò)程中,生成相應(yīng)request、response對(duì)象。
?
?
>>>請(qǐng)求處理完成之后,服務(wù)器發(fā)回一個(gè)HTTP響應(yīng);
請(qǐng)求處理程序會(huì)閱讀請(qǐng)求及它的參數(shù)和cookies。它會(huì)讀取也可能更新一些數(shù)據(jù),并將數(shù)據(jù)存儲(chǔ)在服務(wù)器上。處理完畢后,數(shù)據(jù)通過(guò)response對(duì)象給客戶輸出信息,輸出信息也需要拼接HTTP協(xié)議頭部分,關(guān)閉后斷開(kāi)連接。斷開(kāi)后,服務(wù)器端自動(dòng)注銷(xiāo)request、response對(duì)象,并將釋放對(duì)應(yīng)線程的使用標(biāo)識(shí)(一般一個(gè)請(qǐng)求單獨(dú)由一個(gè)線程處理,部分特殊情況有一個(gè)線程處理多個(gè)請(qǐng)求的情況)。
響應(yīng)頭為:HTTP/1.1200 OK
?
?
?
>>>瀏覽器以同樣的過(guò)程讀取到HTTP響應(yīng)的內(nèi)容(HTTP響應(yīng)數(shù)據(jù)包),然后瀏覽器對(duì)接收到的HTML頁(yè)面進(jìn)行解析,把網(wǎng)頁(yè)顯示出來(lái)呈現(xiàn)給用戶。
客戶端接收到返回?cái)?shù)據(jù),去掉對(duì)應(yīng)頭信息,形成也可以被瀏覽器認(rèn)識(shí)的頁(yè)面HTML字符串信息,交與瀏覽器翻譯為對(duì)應(yīng)頁(yè)面規(guī)則信息展示為頁(yè)面內(nèi)容。
?