`
isiqi
  • 浏览: 16047120 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

理解IIS中的Host Header

 
阅读更多
简介:

IIS可以在一个服务器上搭建多个网站。你需要使用到host header名,ip地址,和端口号。这篇文章解释了什么是host header以及它是如何工作的。


Host header是HTTP消息的一部分:

客户端与web服务器之间的通信使用的是HTTP协议。客户端与服务器之间发送的数据称为HTTP消息。HTTP消息有body部分和header部分。Body部分可以包含服务器响应客户端GET请求的网页HTML代码。Header部分包含Content-Length, Referer, Host等等的信息。


客户端是如何与web服务器进行通信的:

这个通信过程是由用户在网页浏览器的地址栏中键入域名及端口号所引发的。比如说一个用户键入www.ilopia.com,他的浏览器会自动地使用HTTP协议以及80端口http://www.ilopia.com
客户端需要与ip地址和端口号建立连接,所以浏览器需要解析域名。域名解析为ip地址可以通过使用DNS服务器和hosts文件。
一旦域名被解析后,客户端就与web服务器建立了连接,然后发送一个请求消息。这个请求消息包含host header,比如象下面这样:
GET /index.htm HTTP/1.1
Host: www.ilopia.com

服务器接收到HTTP消息后对它进行检查。如果发现HTTP消息中包含host header(HTTP消息中也可以不包含host header), IIS会查找它的配置中是否有匹配的host header名。如果发现了匹配,网站中home folder里的index.htm就会被返回。最后的这一步就是IIS响应请求。


域名解析不是IIS的一部分:

从上面一节可以看出,HTTP消息(host header)一直到客户端与服务器间建立连接后才被检查。所以当配置服务器使用host header时,必须也配置DNS服务,对于一个小的网络,hosts file也可以满足需求。


后台:

每个IIS搭建的网站都bind到一个ip地址,端口号和host header名。每个网站的配置都存储在metabase属性ServerBindings,它的字符串结构是IP:Port:Hostname。举一个例子192.168.0.1:80:www.gafvert.info。要决定哪个网站处理请求,IIS检查是否有一个网站配置监听这个ip地址和端口号,并且也匹配HTTP消息中的host header。如果发现了一个网站的ServerBindings属性匹配,请求就会被转发到这个网站。如果没有网站匹配,IIS检查是否有一个网站配置为监听所有的ip地址(在IIS Manager中叫做”All Unassigned”),和端口,并且配置了一个host header匹配HTTP消息中的host header。如果找到了这样一个网站,IIS把请求转发到这个网站。如果还是没有找到匹配,最后一步是检查IIS是否有一个网站有空白的host header配置,如果有的话,转发请求到该网站。


最后举一个实例,有一个网站使用了一个host header(Host Name)为crmexport的site binding,当用浏览器访问这个网站是,用fidller截取HTTP请求的消息中包含Host为crmexport,见下图:




原文参见http://www.it-notebook.org/iis/article/understanding_host_headers.htm Kristofer Gafvert

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics