如何使協議 foo 主機名感知?
這是關於主機名感知和代理的規範問題。
我知道有些協議是主機名感知的;也就是說,當我連接到 HTTP 伺服器時,
www.example.com
它知道我想要www.example.com
的是 ’s HTTP 服務,而不是www.example.net
‘s,即使它們在同一個 IP 地址上。我怎樣才能為協議foo做到這一點?(臨時說明:這個問題是根據這個元討論出現的。)
要了解發生了什麼,您需要對 DNS 有所了解。
當客戶端想要連接到給定主機上的服務時,它會通過其本地 DNS 基礎設施查找主機名,並接收 IP 地址作為響應。然後,它連接到該 IP 地址,並以它為實現的協議所規定的方式請求服務。
在某些情況下,該協議的一部分涉及第二次發送最初查找的主機名,在這種情況下,主機名被發送到伺服器而不是 DNS 基礎設施。對於 HTTP,這是在RFC 2616中作為 HTTP/1.1 的一部分添加的;在 HTTPS 的情況下,這在RFC 4366中被實現為伺服器名稱指示(SNI) ;在 FTP 的情況下,這是由命令添加的,在RFC 7151中(但請參閱後面的警告)。 如果沒有發生這樣的第二次發送,則伺服器無法知道客戶端向其本地 DNS 提供的主機名以獲取伺服器的 IP 地址。
HOST
請注意,在所有情況下,都需要更改協議才能進行第二次發送,從而使客戶端-伺服器互動主機名感知。協議更改後,必須更新伺服器程式碼以實現它。最後,必須更新客戶端才能將新協議與伺服器通信。最後一步可能特別慢;在 SNI 的情況下,Windows XP 上的 Internet Explorer 從未實現過它,因此當周圍仍有大量 IE-on-XP 使用者時,無法依賴該協議,而且大約需要十年時間才能讓這些使用者足夠消亡和/或獲得 SNI 可靠部署的升級。
這就是使非主機名感知協議主機名感知所需要的。這不是簡單的標誌設置或配置更改。我們有一些特定於協議的答案來處理事務狀態,以及可能的緩解措施,特別是針對該協議: SSH(以及 SFTP)和 FTP(指出
HOST
目前對 FTP 的支持尚不完整-support 階段,因此還不能依賴)。簡短的回答是,如果您的協議目前沒有實現主機名感知,在客戶端和伺服器之間有良好的支持,請忘記它:這不是您可以做的事情。