直接用IP访问百度,我发现了···

文章探讨了为什么已知IP地址时直接访问网站会被拒绝,发现问题出在HTTP请求的Host字段。通过对比域名访问和IP访问的请求头,确认服务器通过Host字段识别访问方式。文章还介绍了如何通过Postman验证这一现象,并推荐加入知识星球获取更多技术资源。

👉 这是一个或许对你有用的社群

🐱 一对一交流/面试小册/简历优化/求职解惑,欢迎加入「芋道快速开发平台」知识星球。下面是星球提供的部分资料: 

a7498e8b05db7f0a76ebc205db4b702e.gif

👉这是一个或许对你有用的开源项目

国产 Star 破 10w+ 的开源项目,前端包括管理后台 + 微信小程序,后端支持单体和微服务架构。

功能涵盖 RBAC 权限、SaaS 多租户、数据权限、商城、支付、工作流、大屏报表、微信公众号等等功能:

  • Boot 地址:https://gitee.com/zhijiantianya/ruoyi-vue-pro

  • Cloud 地址:https://gitee.com/zhijiantianya/yudao-cloud

  • 视频教程:https://doc.iocoder.cn

来源:编程技术宇宙


大家知道,访问网站的时候,会有一个域名解析的过程,客户端会先拿到网站的IP地址,然后通过IP地址来进行后续的HTTP通信。

6d494a3d7b0fb99f5349d53d7f3d207d.png

那既然如此,如果我已经知道了网站的IP地址,是不是可以跳过域名解析的过程,直接拿着IP地址去请求呢?

以百度为例,我们ping一下百度的域名,拿到它的IP地址。

d9c4491e560f35cd2afea27c592ffbbc.png

解析的IP地址是:14.119.104.189

那直接访问https://14.119.104.189,是不是也能打开百度?

结果试了一下,发现被拒绝了!

e25cac8601c51497b39c1d0f0063d101.png

这就想不通了,为啥我跳过了第一步,直接用IP访问就不行呢?网站是如何做到不让直接用IP访问的?

从这个图中就可以合理地怀疑,是不是第二步中,客户端发过去的HTTP请求在使用域名和直接使用IP地址的时候有所不同,让服务器“察觉”出来你是直接使用的IP地址在访问网站,跳过了第一步。

1a5ab4914cac061e0bcca6db6ef77095.png

大胆假设,小心论证,接下来我们就来看一下是不是这样。

因为HTTPS的通信是加了密的,为了看清楚通过域名访问和通过IP访问的时候,HTTP请求内容的区别,我们使用Fildder抓包软件,这样可以看到HTTPS加密的正文内容。

首先咱们通过域名来访问一下:

d51f9c69df90267cc373265a79507e95.png

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

54cf1626b249ddf9e43ad2dc9d5a4cfd.png

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

211573badbab6184fcf227c0fc02ddbf.png

分别是Host字段和Cookie字段。

这样一看,真相基本就明确了,问题多半出在这个Host字段。

为了进一步验证,我们使用Postman来直接访问https://14.119.104.189,可以看到服务器返回了403错误!

85547695adaf52ce4bb08495d1704c70.png

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

b55a717fb1d5df90dd5dc5feb2bf39b1.png

这次能成功访问了!

至此,问题就得到解答了:

客户端在发起HTTP请求的时候,会将其要访问的服务器地址填在Host字段。当使用域名访问的时候,这个字段的值就是域名,而通过IP地址访问的时候,这个字段的内容就是对应的IP地址。而服务器正是通过请求中的Host字段,识别出了客户端是直接通过IP访问的还是通过域名访问的。


欢迎加入我的知识星球,全面提升技术能力。

👉 加入方式,长按”或“扫描”下方二维码噢

70e55c0cdf9e9b1975e0d8e2c4ad133f.png

星球的内容包括:项目实战、面试招聘、源码解析、学习路线。

63524104ab1067f797ba11af371ca92e.png

869fdb4961a9c71c89e419bbb1fc49ff.png1e9ed3c21694a2a5dd01f3866783b2db.pngf42ee4d35c9782955a997833f7df1945.png9ac5e116d7582c7525dab5bab1449577.png

文章有帮助的话,在看,转发吧。
谢谢支持哟 (*^__^*)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值