大家好,我是小林。
對(duì)于「訪問一個(gè)百度的過程,期間發(fā)生了什么?」這個(gè)問題面試中也很經(jīng)常問,我之前也寫過詳細(xì)文章說明:探究!一個(gè)數(shù)據(jù)包在網(wǎng)絡(luò)中的心路歷程
現(xiàn)在問題來了。
大家知道,訪問網(wǎng)站的時(shí)候,會(huì)有一個(gè)域名解析的過程,客戶端會(huì)先拿到網(wǎng)站的IP地址,然后通過IP地址來進(jìn)行后續(xù)的HTTP通信。
圖片
那既然如此,如果我已經(jīng)知道了網(wǎng)站的IP地址,是不是可以跳過域名解析的過程,直接拿著IP地址去請(qǐng)求呢?
以百度為例,我們ping一下百度的域名,拿到它的IP地址。
圖片
解析的IP地址是:14.119.104.189
那直接訪問https://14.119.104.189,是不是也能打開百度?
結(jié)果他試了一下,發(fā)現(xiàn)被拒絕了!
圖片
然后這位球友就想不通了,為啥我跳過了第一步,直接用IP訪問就不行呢?網(wǎng)站是如何做到不讓直接用IP訪問的?
從這個(gè)圖中就可以合理的懷疑,是不是第二步中,客戶端發(fā)過去的HTTP請(qǐng)求在使用域名和直接使用IP地址的時(shí)候有所不同,讓服務(wù)器“察覺”出來你是直接使用的IP地址在訪問網(wǎng)站,跳過了第一步。
圖片
大膽假設(shè),小心論證,接下來我們就來看一下是不是這樣。
因?yàn)镠TTPS的通信是加了密的,為了看清楚通過域名訪問和通過IP訪問的時(shí)候,HTTP請(qǐng)求內(nèi)容的區(qū)別,我們使用Fildder抓包軟件,這樣可以看到HTTPS加密的正文內(nèi)容。
首先咱們通過域名來訪問一下:
圖片
然后通過IP地址來訪問一下:
圖片
放在一起一對(duì)比,在請(qǐng)求頭中就只有兩個(gè)地方不一樣:
圖片
分別是Host字段和Cookie字段。
這樣一看,真相基本就明確了,問題多半出在這個(gè)Host字段。
為了進(jìn)一步驗(yàn)證,我們使用Postman來直接訪問https://14.119.104.189,可以看到服務(wù)器返回了403錯(cuò)誤!
圖片
然后,我們通過Postman修改一下Host字段,將其設(shè)置為域名www.baidu.com,再試一次:
圖片
這次能成功訪問了!
至此,這個(gè)問題就得到解答了:
客戶端在發(fā)起HTTP請(qǐng)求的時(shí)候,會(huì)將其要訪問的服務(wù)器地址填在Host字段。當(dāng)使用域名訪問的時(shí)候,這個(gè)字段的值就是域名,而通過IP地址訪問的時(shí)候,這個(gè)字段的內(nèi)容就是對(duì)應(yīng)的IP地址。而服務(wù)器正是通過請(qǐng)求中的Host字段,識(shí)別出了客戶端是直接通過IP訪問的還是通過域名訪問的。
最后給大家留一個(gè)思考題:
當(dāng)我用HTTPS直接訪問https://14.119.104.189的時(shí)候,瀏覽器給了我這樣一個(gè)提示:
圖片
這不是百度自己的SSL證書嗎?為什么會(huì)有這個(gè)提示出現(xiàn)?
評(píng)論區(qū)說說看!
歷史好文:
拿了 7 個(gè)大廠 offer,我有話說!
就按這個(gè)方向沖!
字節(jié)一面:網(wǎng)站顯示不出來,怎么排查?
字節(jié)面試:連接一個(gè)不存在的 IP 地址,會(huì)發(fā)生什么?
-
通信
+關(guān)注
關(guān)注
18文章
6046瀏覽量
136214 -
HTTP
+關(guān)注
關(guān)注
0文章
510瀏覽量
31358 -
數(shù)據(jù)包
+關(guān)注
關(guān)注
0文章
265瀏覽量
24426
原文標(biāo)題:直接用IP訪問百度,我發(fā)現(xiàn)了···
文章出處:【微信號(hào):小林coding,微信公眾號(hào):小林coding】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論