打开cmd,输入ping www.baidu.com,然后把得到的ip地址111.13.101.208输入浏览器的地址栏,可以打开百度。但我重复操作ping www.zhihu.com,得到ip地址54.223.189.245,输入地址栏,返回的却是405 not allowed。想请教一下大家,这是为什么呢?
打开cmd,输入ping www.baidu.com,然后把得到的ip地址111.13.101.208输入浏览器的地址栏,可以打开百度。但我重复操作ping www.zhihu.com,得到ip地址54.223.189.245,输入地址栏,返回的却是405 not allowed。想请教一下大家,这是为什么呢?
是否可以,是 HTTP Server 决定的。
HTTP 协议是“应用层”。
而按 IP 访问,请求到达服务器,只需要“传输层”支持即可。
进一步说,应用层在之上,还可以做很多其它的事(至于为什么要做这些“其它的事”,反正有各种原因,一个 IP 用于多个域名啦,觉得域名更方便啦,域名可以做动态 DNS 啦, HTTP 服务器配置搞错了,自己都搞不懂 HTTP 服务器的这些配置啦,等等等等),比如,判断它协议中的那些“额外”信息。而域名,对 HTTP 协议来说,不过是一个普通的头而已。
这是网络分层模型中的内容,比如“七层模型”之类的东西,你可以先去了解一下。然后,再了解一下 HTTP 协议,这个问题才能搞明白。
在日常的网站发布中很多情况下都无法做到一个IP对应一个站点,在IP4的情况下IP的资源是相对有限的。然而作为最流行的Apache,Nginx等web server自然也考虑到这种情况,
为什么输入网站的ip为什么不能访问网站,输入域名倒可以访问网站?道理也在这里,像这种情况,一个ip对应的几个站点,是通过ServerName来识别同一个IP下的不同站点的,而输入ip地址主机自然是不知道你要访问哪个站点,故无法访问。而现实中,很多的虚拟主机上绑定的是几十甚至几百的网站。