在我读《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 在报头中只指出了路径,并没有带上主机名,