有些找過(guò)工作面試的朋友(特別是爬蟲(chóng)的崗位)應(yīng)該常常被問(wèn)到,你知道你在瀏覽器輸入百度的網(wǎng)址之后,背后做了什么操作嗎?其實(shí)這主要是想看看你對(duì)計(jì)算機(jī)網(wǎng)絡(luò)協(xié)議的了解,今天小帥b就跟你淺談一下這個(gè)問(wèn)題,在此之前,我們先來(lái)了解一下什么是 URL 。 你真的理解URL是什么? 我們經(jīng)常使用瀏覽器上網(wǎng),在想要查詢某些網(wǎng)站的時(shí)候,我們都會(huì)在瀏覽器的地址欄中輸入一段字符串,也就是我們常說(shuō)的「網(wǎng)址」,其實(shí)我們說(shuō)的這個(gè)「網(wǎng)址」,指的就是URL,URL的全稱是Uniform Resource Location, 叫做 「統(tǒng)一資源定位」。 比如我們想要訪問(wèn) Google,應(yīng)該會(huì)在瀏覽器的地址欄中輸入: http://www.google.com。 這時(shí)候我們可以看到 URL 中兩個(gè)比較重要的部分,一個(gè)是協(xié)議,一個(gè)是資源名稱,它們被 「://」分隔開(kāi),左邊的 http 就是協(xié)議,右邊的 www.google.com 就是資源名稱。 我們這里用到的協(xié)議是 HTTP 協(xié)議,他的全稱叫做超文本傳輸協(xié)議,網(wǎng)絡(luò)上的請(qǐng)求協(xié)議有許多,例如我們比較熟悉的其它協(xié)議有 ftp 協(xié)議,https 協(xié)議等等。 為什么要用協(xié)議呢? 因?yàn)闆](méi)有規(guī)矩,不成方圓,我們?cè)趥鬏敂?shù)據(jù)的時(shí)候,需要通過(guò)相應(yīng)的規(guī)則才能獲取相應(yīng)的資源,比如你在家里,突然餓了,想要點(diǎn)外賣,那么你需要找到你想吃的,然后付錢,商家才給你做,外賣小哥哥才笑嘻嘻的給你送,如果你不遵循這一規(guī)則,你不給錢,你能吃到嗎?外賣小哥會(huì)笑嘻嘻給你送嗎?除非很帥。 所以我們這里使用的 HTTP 協(xié)議,可以給我們提供超文本文檔。 資源名稱 資源名稱是一個(gè)完整的地址,它的格式是完全取決于協(xié)議而定,不過(guò)在大多數(shù)的協(xié)議里面,資源名稱都包括: 1.Host Name :主機(jī)名,也就是服務(wù)器的名稱,一般是域名,也就是域名對(duì)應(yīng)的這臺(tái)服務(wù)器的 ip 地址, 例如http://www.google.com 中的 www.google.com 就是主機(jī)名。 2.FileName :文件名,也就是我們要訪問(wèn)服務(wù)器上某個(gè)位置上的文件,這個(gè)文件所在的路徑名就是FileName,例如我們要訪問(wèn) a 服務(wù)器上的老師目錄下的照片,那么我們就可以這樣訪問(wèn): http://www./teacher/照片.jpg 這里的 teacher/照片.jpg 就是FileName。 3.Port Number: 端口號(hào),這個(gè)是用于連接的端口,我們默認(rèn)訪問(wèn)不需要輸入端口,是因?yàn)?80 是默認(rèn)的連接端口,一般服務(wù)器上有 0-65535 個(gè)端口,他開(kāi)放哪個(gè)端口給你訪問(wèn),你就只能通過(guò)它給你的端口進(jìn)行訪問(wèn),就好比你要去開(kāi)房,發(fā)現(xiàn)酒店有65536 個(gè)房間,然后客服人員告訴你第 8000 個(gè)房間可以住,那么你就交完錢拿著房卡去 8000 號(hào)的房玩耍,總不會(huì)去 65536 個(gè)房間玩?zhèn)€遍吧! 這個(gè)端口后一般是在尾部添加冒號(hào),在冒號(hào)寫上端口號(hào)。例如:http://www.google.com:80 4.Parameters :請(qǐng)求參數(shù),我們可以通過(guò)參數(shù)去訪問(wèn)特定的資源,一般在訪問(wèn)的地址后面添加 key-value 的相識(shí)的值去訪問(wèn),例如我們要訪問(wèn) a 這個(gè)網(wǎng)站的老師目錄下第一到第十張波多野結(jié)衣的照片就可以這樣呀訪問(wèn): http://www./teacher/pic/boduoyejieyi?start=1&end=10 好了,接下來(lái)就說(shuō)說(shuō)你在瀏覽器輸入baidu.com后,都發(fā)生了什么
2.Chrome通過(guò) DNS 去查找 baidu.com 這個(gè)域名對(duì)應(yīng)的IP地址: DNS的查找過(guò)程是這樣的: Chrome瀏覽器會(huì)先查找有沒(méi)有緩存的 DNS 記錄,如果在瀏覽器緩存沒(méi)有找到需要的記錄,就會(huì)去做一個(gè)系統(tǒng)的調(diào)用,獲取系統(tǒng)緩存的記錄; 如果沒(méi)有記錄請(qǐng)求會(huì)繼續(xù)到路由器上,路由器上有自己的 DNS 緩存; 如果沒(méi)有記錄就會(huì)到 ISP 的 DNS 緩存中查看記錄; 如果沒(méi)有記錄就會(huì)在 ISP 的 DNS 服務(wù)器從根服務(wù)器域名服務(wù)器開(kāi)始遞歸搜索最后得到 IP 地址。 3.瀏覽器給 baidu 服務(wù)器發(fā)送一個(gè) HTTP 請(qǐng)求 獲取到 baidu 的 ip 地址之后,就可以給 baidu 這個(gè)服務(wù)器發(fā)送 HTTP 請(qǐng)求了,我們通過(guò) URL 地址去發(fā)送的時(shí)候是一個(gè)GET 的請(qǐng)求,這時(shí)候會(huì)向 baidu 服務(wù)器發(fā)送一個(gè) header 信息: Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 經(jīng)常寫反反爬的話你應(yīng)該知道其中
4.baidu服務(wù)器301重定向響應(yīng) 因?yàn)閯倓偽覀冊(cè)?Chrome 瀏覽器中輸入的是 baidu.com 而不是www.baidu.com,這時(shí)候 baidu 服務(wù)器就會(huì)將我們的請(qǐng)求響應(yīng)一個(gè) 301 永久重定向到 www.baidu.com。 5.Chrome瀏覽器請(qǐng)求重定向來(lái)的地址 這時(shí)候 Chrome 瀏覽器知道 www.baidu.com 才是 baidu 希望訪問(wèn)的地址,那么這時(shí)候 Chrome 瀏覽器就會(huì)給 baidu 服務(wù)器發(fā)送另一個(gè)請(qǐng)求。 6.baidu服務(wù)器處理請(qǐng)求 baidu服務(wù)器在這個(gè)時(shí)候接收到了請(qǐng)求,它會(huì)去查看請(qǐng)求它的參數(shù)還有 cookie 信息,然后會(huì)進(jìn)行一些操作處理,例如對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ),從數(shù)據(jù)庫(kù)中獲取需要被請(qǐng)求的數(shù)據(jù)等。 7.baidu服務(wù)器返回HTML響應(yīng) 當(dāng) baidu 服務(wù)器處理好之后,就會(huì)給瀏覽器返回?cái)?shù)據(jù)了,這個(gè)時(shí)候會(huì)有一個(gè) Response Headers 發(fā)送給瀏覽器: Bdpagetype:1 Response Headers 說(shuō)明了是否緩存這個(gè)頁(yè)面,怎么去解釋響應(yīng)信息,cookie 的設(shè)置,隱私信息等。 其中
8.Chrome瀏覽器顯示baidu頁(yè)面 這時(shí)候 Chrome 瀏覽器獲得了響應(yīng)內(nèi)容,就開(kāi)始顯示 baidu 的HTML頁(yè)面了,瀏覽器在顯示的時(shí)候,發(fā)現(xiàn)需要獲取其他的標(biāo)簽內(nèi)容,比如圖片、css 樣式表、JavaScript 文件,那么瀏覽器就會(huì)繼續(xù)對(duì) baidu 服務(wù)器去發(fā)送請(qǐng)求這些內(nèi)容,這些靜態(tài)的文件baidu 會(huì)把它進(jìn)行緩存,利用內(nèi)容分發(fā)網(wǎng)絡(luò)(CDN)進(jìn)行分發(fā),所以這些靜態(tài)文件在很多 CDN 數(shù)據(jù)中心都有備份,所以瀏覽器很快就能獲取到這些靜態(tài)文件。 從而進(jìn)行頁(yè)面吧的完整的顯示: 當(dāng)然,這只是淺談一下,讓你有一個(gè)清晰的了解,如果你對(duì)網(wǎng)絡(luò)方面感興趣的話,可以去了解一下計(jì)算機(jī)網(wǎng)絡(luò)的組成,什么是報(bào)文,什么是分組交換,如何握手以及各層之間的關(guān)系,比如物理層,數(shù)據(jù)鏈路層,運(yùn)輸層等。 |
|