大家好,我是小林。
对于「访问一个百度的过程,期间发生了什么?」这个问题面试中也很经常问,我之前也写过详细文章说明:探究!一个数据包在网络中的心路历程
现在问题来了。
大家知道,访问网站的时候,会有一个域名解析的过程,客户端会先拿到网站的IP地址,然后通过IP地址来进行后续的HTTP通信。

图片
那既然如此,如果我已经知道了网站的IP地址,是不是可以跳过域名解析的过程,直接拿着IP地址去请求呢?
以百度为例,我们ping一下百度的域名,拿到它的IP地址。

图片
解析的IP地址是:14.119.104.189
那直接访问https://14.119.104.189,是不是也能打开百度?
结果他试了一下,发现被拒绝了!

图片
然后这位球友就想不通了,为啥我跳过了第一步,直接用IP访问就不行呢?网站是如何做到不让直接用IP访问的?
从这个图中就可以合理的怀疑,是不是第二步中,客户端发过去的HTTP请求在使用域名和直接使用IP地址的时候有所不同,让服务器“察觉”出来你是直接使用的IP地址在访问网站,跳过了第一步。

图片
大胆假设,小心论证,接下来我们就来看一下是不是这样。
因为HTTPS的通信是加了密的,为了看清楚通过域名访问和通过IP访问的时候,HTTP请求内容的区别,我们使用Fildder抓包软件,这样可以看到HTTPS加密的正文内容。
首先咱们通过域名来访问一下:

图片
然后通过IP地址来访问一下:

图片
放在一起一对比,在请求头中就只有两个地方不一样:

图片
分别是Host字段和Cookie字段。
这样一看,真相基本就明确了,问题多半出在这个Host字段。
为了进一步验证,我们使用Postman来直接访问https://14.119.104.189,可以看到服务器返回了403错误!

图片
然后,我们通过Postman修改一下Host字段,将其设置为域名www.baidu.com,再试一次:

图片
这次能成功访问了!
至此,这个问题就得到解答了:
客户端在发起HTTP请求的时候,会将其要访问的服务器地址填在Host字段。当使用域名访问的时候,这个字段的值就是域名,而通过IP地址访问的时候,这个字段的内容就是对应的IP地址。而服务器正是通过请求中的Host字段,识别出了客户端是直接通过IP访问的还是通过域名访问的。
最后给大家留一个思考题:
当我用HTTPS直接访问https://14.119.104.189的时候,浏览器给了我这样一个提示:

图片
这不是百度自己的SSL证书吗?为什么会有这个提示出现?
评论区说说看!
历史好文:
拿了 7 个大厂 offer,我有话说!
就按这个方向冲!
字节一面:网站显示不出来,怎么排查?
字节面试:连接一个不存在的 IP 地址,会发生什么?
-
通信
+关注
关注
18文章
6316浏览量
139567 -
HTTP
+关注
关注
0文章
531浏览量
34857 -
数据包
+关注
关注
0文章
269浏览量
25425
原文标题:直接用IP访问百度,我发现了···
文章出处:【微信号:小林coding,微信公众号:小林coding】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
请问SRIO每次出传输数据包的个数,数据包负载大小怎么设置?
请问为什么ZigBee网络组建中会频繁地广播一个数据包?
发送一个数据包,网络什么也看不到
解决Labview报表问题的一般思路
【睿赛德 RW007 WiFi 模块试用连载】RW007模块调试心路历程
一个AVR新手蓝牙模块调试的心路历程简介遇到的问题
学习单片机的心路历程分享
为什么一个数据包会收到两个独立的netbufs呢?
网络数据包捕获机制研究
ttl传输中过期可能是什么原因_ttl传输中过期怎么解决
黄仁勋分享作为工程师的心路历程
一个AVR新手蓝牙模块调试的心路历程

探究!一个数据包在网络中的心路历程
评论