有些找過工作面試的朋友(特別是爬蟲的崗位)應該常常被問到,你知道你在瀏覽器輸入百度的網址之后,背后做了什么操作嗎?其實這主要是想看看你對計算機網絡協議的了解,今天小帥b就跟你淺談一下這個問題,在此之前,我們先來了解一下什么是 URL 。

你真的理解URL是什么?

我們經常使用瀏覽器上網,在想要查詢某些網站的時候,我們都會在瀏覽器的地址欄中輸入一段字符串,也就是我們常說的「網址」,其實我們說的這個「網址」,指的就是URL,URL的全稱是Uniform Resource Location, 叫做 「統一資源定位」。

比如我們想要訪問 google,應該會在瀏覽器的地址欄中輸入:

http://www.google.com。

這時候我們可以看到 URL 中兩個比較重要的部分,一個是協議,一個是資源名稱,它們被 「://」分隔開,左邊的 http 就是協議,右邊的 www.google.com 就是資源名稱。

我們這里用到的協議是 HTTP 協議,他的全稱叫做超文本傳輸協議,網絡上的請求協議有許多,例如我們比較熟悉的其它協議有 ftp 協議,https 協議等等。

為什么要用協議呢?

因為沒有規(guī)矩,不成方圓,我們在傳輸數據的時候,需要通過相應的規(guī)則才能獲取相應的資源,比如你在家里,突然餓了,想要點外賣,那么你需要找到你想吃的,然后付錢,商家才給你做,外賣小哥哥才笑嘻嘻的給你送,如果你不遵循這一規(guī)則,你不給錢,你能吃到嗎?外賣小哥會笑嘻嘻給你送嗎?除非很帥。

所以我們這里使用的 HTTP 協議,可以給我們提供超文本文檔。

資源名稱

資源名稱是一個完整的地址,它的格式是完全取決于協議而定,不過在大多數的協議里面,資源名稱都包括:

1.

Host Name

:主機名,也就是服務器的名稱,一般是域名,也就是域名對應的這臺服務器的 ip 地址, 例如http://www.google.com 中的 www.google.com 就是主機名。

2.

FileName

:文件名,也就是我們要訪問服務器上某個位置上的文件,這個文件所在的路徑名就是FileName,例如我們要訪問 a 服務器上的老師目錄下的照片,那么我們就可以這樣訪問:

http://www.a.com/teacher/照片.jpg

這里的 teacher/照片.jpg 就是FileName。

2.Chrome通過 DNS 去查找 baidu.com 這個域名對應的IP地址:

DNS的查找過程是這樣的:

Chrome瀏覽器會先查找有沒有緩存的 DNS 記錄,如果在瀏覽器緩存沒有找到需要的記錄,就會去做一個系統的調用,獲取系統緩存的記錄;

如果沒有記錄請求會繼續(xù)到路由器上,路由器上有自己的 DNS 緩存;

如果沒有記錄就會到 ISP 的 DNS 緩存中查看記錄;

如果沒有記錄就會在 ISP 的 DNS 服務器從根服務器域名服務器開始遞歸搜索最后得到 IP 地址。

3.瀏覽器給 baidu 服務器發(fā)送一個 HTTP 請求

獲取到 baidu 的 ip 地址之后,就可以給 baidu 這個服務器發(fā)送 HTTP 請求了,我們通過 URL 地址去發(fā)送的時候是一個GET 的請求,這時候會向 baidu 服務器發(fā)送一個 header 信息:

Accept:text/html,Application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8Accept-Encoding:gzip, deflate, brAccept-Language:zh-CN,zh;q=0.8Cache-Control:no-cacheConnection:keep-aliveCookie:PSTM=1506157985; BIDUPSID=DA662DF344C147D17FB4828CCD795292; ...Host:www.baidu.comPragma:no-cacheUpgrade-Insecure-Requests:1User-Agent:Mozilla/5.0 (windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36

經常寫反反爬的話你應該知道其中

User-Agent是向 baidu 服務器提供瀏覽器的類型,操作系統版本,瀏覽插件,瀏覽器語言等信息。Accept是告訴服務器說我們需要接收的類型是什么樣子的。Connection:keep-alive 是為了后邊請求不要關閉TCP連接。Cookie 是以文本形式存儲,每次請求的時候就會發(fā)送給服務器,它可以存儲用戶的狀態(tài),用戶名等信息。

4.baidu服務器301重定向響應

因為剛剛我們在 Chrome 瀏覽器中輸入的是 baidu.com 而不是www.baidu.com,這時候 baidu 服務器就會將我們的請求響應一個 301 永久重定向到 www.baidu.com。

5.Chrome瀏覽器請求重定向來的地址

這時候 Chrome 瀏覽器知道 www.baidu.com 才是 baidu 希望訪問的地址,那么這時候 Chrome 瀏覽器就會給 baidu 服務器發(fā)送另一個請求。

6.baidu服務器處理請求

baidu服務器在這個時候接收到了請求,它會去查看請求它的參數還有 cookie 信息,然后會進行一些操作處理,例如對數據進行存儲,從數據庫中獲取需要被請求的數據等。

7.baidu服務器返回HTML響應

當 baidu 服務器處理好之后,就會給瀏覽器返回數據了,這個時候會有一個 Response Headers 發(fā)送給瀏覽器:

Bdpagetype:1Bdqid:0xddf2be49000b5995Bduserid:0Cache-Control:privateConnection:Keep-AliveContent-Encoding:gzipContent-Type:text/html; charset=utf-8Cxy_all:baidu+09720a4fa84e5493ae7506a57de6bc05Date:Sat, 14 Oct 2017 09:39:32 GMTExpires:Sat, 14 Oct 2017 09:39:32 GMTServer:BWS/1.1Set-Cookie:BDSVRTM=49; path=/Set-Cookie:BD_HOME=0; path=/Set-Cookie:H_PS_PSSID=1440_13551_21103_24658; path=/; domain=.baidu.comStrict-Transport-Security:max-age=172800Transfer-Encoding:chunkedVary:Accept-EncodingX-Powered-By:HphpX-Ua-Compatible:IE=Edge,chrome=1

Response Headers 說明了是否緩存這個頁面,怎么去解釋響應信息,cookie 的設置,隱私信息等。

其中

Content-Encoding:gzip告訴瀏覽器整個響應體是用gzip算法壓縮的。Content-Type:text/html; charset=utf-8 告訴瀏覽器將響應的內容以HTML的形式呈現出來,字符集是utf-8。

8.Chrome瀏覽器顯示baidu頁面

這時候 Chrome 瀏覽器獲得了響應內容,就開始顯示 baidu 的HTML頁面了,瀏覽器在顯示的時候,發(fā)現需要獲取其他的標簽內容,比如圖片、css 樣式表、JAVAScript 文件,那么瀏覽器就會繼續(xù)對 baidu 服務器去發(fā)送請求這些內容,這些靜態(tài)的文件baidu 會把它進行緩存,利用內容分發(fā)網絡(CDN)進行分發(fā),所以這些靜態(tài)文件在很多 CDN 數據中心都有備份,所以瀏覽器很快就能獲取到這些靜態(tài)文件。

從而進行頁面吧的完整的顯示:


當然,這只是淺談一下,讓你有一個清晰的了解,如果你對網絡方面感興趣的話,可以去了解一下計算機網絡的組成,什么是報文,什么是分組交換,如何握手以及各層之間的關系,比如物理層,數據鏈路層,運輸層等。

1.《boduoyejieyi 你在瀏覽器輸入了baidu.com 并按下回車后,背后到底發(fā)生了什么?》援引自互聯網,旨在傳遞更多網絡信息知識,僅代表作者本人觀點,與本網站無關,侵刪請聯系頁腳下方聯系方式。

2.《boduoyejieyi 你在瀏覽器輸入了baidu.com 并按下回車后,背后到底發(fā)生了什么?》僅供讀者參考,本網站未對該內容進行證實,對其原創(chuàng)性、真實性、完整性、及時性不作任何保證。

3.文章轉載時請保留本站內容來源地址,http://f99ss.com/keji/344866.html