直接用IP访问百度,我发现了...
mall学习教程官网:macrozheng.com
大家都知道,访问网站的时候,会有一个域名解析的过程,客户端会先拿到网站的IP地址,然后通过IP地址来进行后续的HTTP通信。
那既然如此,如果我已经知道了网站的IP地址,是不是可以跳过域名解析的过程,直接拿着IP地址去请求呢?
以百度为例,我们ping一下百度的域名,拿到它的IP地址。
解析的IP地址是:14.119.104.189
那直接访问
https://14.119.104.189
,是不是也能打开百度?结果他试了一下,发现被拒绝了!
然后这位朋友就想不通了,为啥我跳过了第一步,直接用IP访问就不行呢?网站是如何做到不让直接用IP访问的?
推荐一套基于 SpringBoot + Vue + uni-app 实现的全套电商系统mall(Github标星60K),前台商城项目和后台管理系统都有了,能支持完整的订单流程!涵盖商品、订单、购物车、权限、优惠券、会员等功能,功能很强大!
- 项目地址:https://github.com/macrozheng/mall
- 视频教程:https://www.macrozheng.com/video/
从这个图中就可以合理的怀疑,是不是第二步中,客户端发过去的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证书吗?为什么会有这个提示出现?
Github上
标星60K
的电商实战项目,出 视频教程(2023最新版) 了!全套教程基于SpringBoot 2.7版本,可以说内容非常新!全套教程约40小时,共100期
,通过这套教程你可以拥有一个涵盖主流Java技术栈的完整项目经验
,同时提高自己独立开发一个项目的能力
,下面是项目的整体架构图,感兴趣的小伙伴可以点击链接 mall视频教程 加入学习。整套 视频教程 的内容还是非常完善的,涵盖了mall项目最佳学习路线、整体框架搭建、业务与技术实现全方位解析、线上Docker环境部署等内容,具体大纲可以参考下图,你也可以点击链接 mall视频教程 了解更多内容。
推荐阅读
- Github标星60K!这套涵盖Java主流技术和电商核心业务的实战教程,太香了!
- Github标星60K!mall前台商城系统正式发布,支持完整订单流程!
- 订单系统就该这么设计(万能通用),稳的一批!
- 电商系统中的商品功能就该这么设计,稳的一批!
- 权限系统就该这么设计(万能通用),稳的一批!
- 新入职一家公司,接手了个从零开始的项目,好难!