HTTPS Host: 标头中显式默认端口的定义行为?

Jos*_*eph 4 https networking http http-headers

在 HTTPS 中,如果主机标头中提供/未提供默认端口,服务器的行为是否应该有所不同?也就是说,在 HTTPS 中,将这两个标头视为请求的一部分:

Host: www.example.com

Host: www.example.com:443
Run Code Online (Sandbox Code Playgroud)

据我所知,HTTP 规范规定必须包含端口,除非它是默认端口。但是,据我所知,它没有提到如果显式包含默认端口该怎么办(因为不需要)。我似乎找不到任何有关 HTTPS 的信息,这正是我在这种情况下感到好奇的地方。

与此问题类似,它处理 HTTP 并询问是否需要端口。

对于上下文,我正在使用Mechanize Python 模块,并且在通过登录服务处理一些 302 重定向时,最终发送包含默认端口(即 443)的 Host: 标头。但是,接收此标头的服务器似乎不喜欢它,并且只有在不包含端口时才能正常运行。我试图确定这是否是服务器中的错误,或者机械化中的错误,或者两者都不是。我认为是前者,但我只有能力改变机械化的工作方式。

alb*_*iff 5

正如您所说,RFC 2616仅指定如果未提供端口信息,则必须使用默认端口,在此 RFC 中未显式定义 HTTPS 的默认端口,但在 RFC 2818中指定 HTTPS 的默认端口为 443。因此,如果您没有在主机请求标头上指定端口,对于 HTTP,使用端口 80;对于 HTTPS,使用端口 443。然而,在 RFC 中,如果指定默认端口,则没有任何参考,因此恕我直言,如果您指定默认端口(尽管不是必需的),服务器必须工作。然而,这最终取决于供应商的实施。

希望这可以帮助,