IIS可以在一台服務器上配置多個web站點,每個站點通過ip地址、端口(port)和主機名(host)結合的標識符(ServerBindings Metabase)進行區分。標識字符串的格式如下:
IP:Port:Hostname
上面的IP和Hostname是可選項,假如設定站點時不指定,表示匹配所有。
主機名(Host Headers)是HTTP消息的一部分
瀏覽器和web服務器之間是通過http協議通信的。http發送的請求頭部(headers)部分包含有很多信息,如Content-Length, Referer, Host等等。
瀏覽器如何和web服務器通信
互聯網上的兩台主機之間是通過TCP/IP協議進行通信的,通信建立連接時需要指定ip和端口號(port)。當我們在瀏覽器中輸入一個網站的域名,並按回車后,瀏覽器默認會使用http協議和80端口發出請求。
瀏覽器首先需要把域名解析為對應的ip地址。域名解析可以使用dns服務器或本地的host文件。 當域名解析為ip地址后,瀏覽器會和web服務器建立連接,並發出網頁訪問請求信息。請求信息的頭部一般像下面這樣:
GET /index.htm HTTP/1.1 Host: www.ilopia.com
IIS接收到請求后,會檢查請求是否帶有host信息(請求中也可能不帶有host信息,如使用ip直接訪問)。IIS發現有host后,會查找是否有匹配該host的站點,如果有匹配的站點,就會把請求路由給它進行處理。 最后一步是IIS響應處理請求。
IIS如何分發請求到指定web站點
IIS分發請求到指定站點的規則如下:
- 1、是否存在准確匹配 IP:Port:Hostname標識字符串的站點,存在即分發請求,沒有進行下一步匹配
- 2、是否存在監聽所有IP地址(站點設定時不指定),並且Port和Hostname都匹配的站點,存在即分發請求,沒有進行下一步匹配
- 3、是否存在端口Port匹配,而IP和Hostname都未指定的站點,存在即分發請求,沒有瀏覽器會提示沒法連接到服務器
參考資料
ServerBindings Metabase Property (IIS 6.0) Understanding Host Headers in IIS Using Host Headers to host multiple websites on IIS 6.0

