当前位置:   article > 正文

为什么有些网站无法通过IP地址进行访问,却能通过域名访问?_为什么用ip无法访问网站,而用域名可以?

为什么用ip无法访问网站,而用域名可以?

        在我读《HTTP权威指南》的18章Web主机托管,有关通过Host首部进行虚拟主机托管时,脑海中突然产生了一个问题,就是当人们通过IP地址进行访问网站时,怎么区分用户访问的是哪个网站?最后上网搜了一下,发现有人说有些网站是不能通过IP地址访问的。这时我感觉这是因为服务器托管商采用了多个站点共享一个IP地址所造成的,也就是采用Host首部进行虚拟主机托管。这也就是我今天要谈的问题的由来。

        在万维网的早期,每个组织都是自行购买计算机硬件,搭建计算机机房,申请自己的网络连接,并管理自己的Web服务器软件。随着Web的快速发展,每个人都想有个自己的网站,但有个问题,那就是并不是每个人都有能力购买服务器和花费时间去搭建有空调的服务器机房,为了满足这些人的需求,就有相应的企业来做这些事了。商家把服务器,网络带宽等等事情都包办了,你只需花钱买现成就是了。

       当人们在Web托管商那里买服务器时,一般情况都是多个网站共用一台物理服务器,这是因为大多数人的网站流量都不大,如果用专门的一台服务器来管理一个网站的话,就有点资源浪费,大材小用了,当然商家也不会这样,不然他们就真的是在为社会做贡献了,要不了几下就玩完。所以大多数网站都是由托管商来托管,并托管在同一台服务器上的,当然,除非你是个土豪,自己买台服务器放家里。

        当托管商为很多人托管网站,并把多个网站托管在一个服务器上时,问题就来了,由于HTTP/1.0的一个设计缺陷,使虚拟主机托管变得不那不容易。因为HTTP/1.0规范中并没有为共享的Web服务器提供任何方法来识别要访问的是所托管的哪个虚拟网站。(这里要对HTTP报文有所了解。当访问网站时,报文的报头是这样的,以GET请求为例:GET /index.html HTTP/1.0 在报头中只指出了路径,并没有带上主机名,所以当一个服务器托管多个网站时,服务器并不知道用户请求的是哪个网站。HTTP/1.0当初设计时,并没有考虑到一台服务器托管多个虚拟主机这种情况,因为当时都是一台服务器托管一个网站,所以就把报文中的主机名给去掉了)。

        因为有了这个问题,所以也就有了相应的不同解决方法。在这就主要说两种常用方法,如果想了解其他的可以看《HTTP权威指南》的第十八章 Web主机托管。

        第一种解决方法:为每个网站分配一个或多个IP地址,把所有虚拟网站的IP地址绑定到同一台共享服务器上去,这样通过HTTP/1.0就可以访问各个不同的虚拟网站了,虽然它们是在同一台服务器上,但他们都有属于自己的IP地址。这种方法倒是解决了一台服务器托管多个虚拟网站用户对其访问的问题,但是有一个缺点,那就是IP地址数量的限制。这种方法会造成大量的IP地址被消耗。而且还有就是一台服务器上能绑定IP地址的数量也是有限的。这些各种的限制造成了这种方法并不是那么的实用,所以就又有了另一种方法。

       第二种解决方法:后来人们就扩展了HTTP/1.0,在HTTP/1.1中加了Host这个首部,Host首部用于携带主机名(也称为域名)。如 Host:www.baidu.com 这样就算多个虚拟网站共享一个IP地址,最后服务器也能通过Host首部中携带的主机名来确定用户访问的是那个网站了。

       前面说了那么多,现在终于回到了开始时的那个问题“为什么有些网站无法通过IP地址进行访问?”

       解答:如果托管商采用的是第二种解决方法:“多个虚拟网站共享一个IP地址,最后通过Host首部携带的主机名(也就是域名)来辨别用户访问的网站。”当用户通过域名来访问网站时,就不会出错。但当用户通过IP地址来访问,就出错了,因为用户在地址栏中输入的是IP地址,而不是域名,这时Host首部就没法携带主机名了,因为根本就没主机名让他携带。所以最后服务器并不知道用户访问的是哪一个网站。

       本人对第二种方法缺陷的胡乱思考:对IP地址进行反向解析,也就DNS反向解析。通过IP得到域名。虽然这种方法并不是太现实,但暂时也就只想到了这个。

----------------------------------------------------------------无聊的分割线---------------------------------------------------------------------

       昨天晚上对“第二种方法的胡乱思考”再此思考之后,现在感觉有点搞笑,完全就是瞎扯淡,还是无济于事。就算反向解析出域名,还是无法确定用户究竟要访问哪个网站。其实是准备把那段删掉的,但是鄙人有个小洁癖,凡是已经写了的东西,一般就不想去再大动了,不管对与错,若最后发现错了,也只会在旁边重新开行写。只想保留最原始的模样。毕竟那是一个思考的过程。存在即合理嘛。

       最后特别说明一下: 就是各位大佬多多包涵,文中说的有错的地方望指出,鄙人一定虚心改正,毕竟鄙人只是一个业余的计算机爱好者,而且这也是第一次写这样的文章,感觉逻辑都有点混乱,望多多指正。

      特注:文中相关知识来自《HTTP权威指南》,如果要了解的话,这是一本不错的书。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/648143
推荐阅读
相关标签
  

闽ICP备14008679号