直接用 ip 访问知乎,我发现了一个秘密···

这是「进击的Coder」的第 411 篇技术分享
作者:帅地
来源:帅地玩编程

阅读本文大概需要 4 分钟。



我们先来ping知乎的域名,然后可以得到响应的服务器的ip,


直接用 ip 访问知乎,我发现了一个秘密···


之后我们用浏览器来访问这个ip,结果如下


直接用 ip 访问知乎,我发现了一个秘密···


被拒绝访问了。


而用ip来访问百度,则没啥问题,如图


直接用 ip 访问知乎,我发现了一个秘密···

直接用 ip 访问知乎,我发现了一个秘密···


访问知乎的时候,域名可以访问,ip不可以访问,这究竟是为啥?


我们知道,ipv4的ip地址是非常有限的,如果每个人都想拥有一个全球ip,那肯定是不够分配的,不知道啥是全球ip的可以看我这篇文章:谈谈NAT:什么?全球IP和私有IP是什么鬼?


所以,很多网站在发布的时候,是有可能几个域名共用一个CDN服务器的。


直接用 ip 访问知乎,我发现了一个秘密···


稍微解释下CDN是啥: CDN服务器可以说是一种缓存服务器。当我们要访问某个网站的资源时,如果该网站的服务器离我们很远,这样的话响应速度就会很慢,为了让响应速度快一些,我们可以把资源分布放在各个地方,然后响应客户端的时候,把离客户端较近的资源传送给他。


当我们用域名访问知乎的时候,CDN服务器可以根据访问的域名知道你想要的是哪个网站的资源,然后直接给你返回对应的资源。


但是当你用公网ip访问就不一样了,由于一个CDN服务器的公网ip对应多个域名网站,他不知道你想要的是哪个网站的资源,也就是说,当你用 118.89.204.192 去访问知乎的时候,CDN服务器不知道你要访问的是 zhihu.com,还是访问 a.com 或 b.com,所以他也干脆明了点,直接拒绝你的访问。


有人可能会问,我输入域名之后,DNS服务器帮我自动解析成对应的ip,去访问知乎的时候,也还是用ip访问的啊,这貌似和ip访问没啥区别啊。


确实,访问的时候,DNS服务器都会帮们我把域名解析成ip去访问,CDN服务器之所以能够检测到对应的域名,其实是这样的:


当客户端用域名访问知乎的时候,DNS会解析成对应的ip去访问CDN服务器,然后CDN服务器可以根据SNI机制获得该ip对应的来源域名,然后返回对应的资源。


这里稍微简单粗暴解释下SNI机制: 该机制主要是用来解决一个服务器对应多个域名时产生的一些问题,通过这种机制,服务器可以提前知道(还没建立链接)客户端想要访问的网站,想要知道更加具体的我已经给你们准备好文章:https://blog.csdn.net/firefile/article/details/80532161


知道了用域名可以访问知乎,而用ip不可以访问知乎之后,我们再来说说百度。


为啥百度ip和域名都可以访问呢?


这其实很简单,就是百度用的CDN服务器,只对应一个网站域名呗,说白了,就是百度有钱!


print_r('点个好看吧!');
var_dump('点个好看吧!');
NSLog(@"点个好看吧!");
System.out.println("点个好看吧!");
console.log("点个好看吧!");
print("点个好看吧!");
printf("点个好看吧!");
cout << "点个好看吧!" << endl;
Console.WriteLine("点个好看吧!");
fmt.Println("点个好看吧!");
Response.Write("点个好看吧!");
alert("点个好看吧!")
echo "点个好看吧!"


直接用 ip 访问知乎,我发现了一个秘密···

End

「进击的Coder」专属学习群已正式成立,搜索「CQCcqc4」添加崔庆才的个人微信或者扫描下方二维码拉您入群交流学习。


直接用 ip 访问知乎,我发现了一个秘密···

看完记得关注@进击的Coder
及时收看更多好文
↓↓↓

直接用 ip 访问知乎,我发现了一个秘密···


点个在看你最好看

原文始发于微信公众号(进击的Coder):直接用 ip 访问知乎,我发现了一个秘密···

链接:https://bbbe.top/archives/1692.html
来源:随风的博客
文章版权归作者所有,未经允许请勿转载。
本网站使用者因为违反本声明的规定而触犯中华人民共和国法律的,一切后果自己负责,本网站不承担任何责任。
本声明未涉及的问题参见国家有关法律法规,当本声明与国家法律法规冲突时,以国家法律法规为准。
本文仅供学习参考,请勿用于违法用途。 若根据文章内容操作遭受任何损失,请自行承担责任。
THE END
分享
二维码
打赏
< <上一篇
下一篇>>