有人能解释一下 HTTP/1.1 中“Host”标头的端口部分有什么好处吗?是不是这样我们就可以拥有两个或多个具有相同名称(但端口不同)的网站?
答案1
大多数互联网网站流量都是在标准端口 80 上进行的。在这种情况下,可以省略端口号(根据 RFC 应该如此)。HTTPS 流量通常在端口 443 上进行,在这种情况下,浏览器将默认包含该端口。连接到任何其他端口都是相当特殊的情况(主要用于开发或服务分离)。
所以是的,如果你想在一台服务器上拥有两个具有相同(子)域的不同站点,你必须通过端口或某种 cookie 技巧来区分它们。但在 HTTP 通信中使用端口的最常见示例是多应用程序服务器,其中端口决定应使用哪个应用程序 API。
答案2
这是 RFC 所要求的,这一点之前曾在这里提出过: https://stackoverflow.com/questions/3364144/is-port-number-required-in-http-host-header-parameter
问题是为什么,RFC 的要求确实似乎与正常分层有点相反。毕竟,端口是传输连接的属性,而不是应用程序(或会话)层的属性。
然而,我推测将此属性带入应用层可能会被视为可取的做法,以允许在单个 IP 地址上处理多个站点,并且在此处包含端口说明符确实允许自由创建将 TCP 通信过程与 Web 应用程序分开的网站软件,同时仍然能够在需要时使用传入端口号。