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

时间:2014-03-26 00:53:39

标签: http networking https http-headers

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

Host: www.example.com

Host: www.example.com:443

据我所知,HTTP规范表示必须包含端口,除非它是默认端口。但是,据我所知,如果明确包含默认端口(由于不需要),该怎么办。我似乎无法为HTTPS找到任何东西,这是我在这种情况下的好奇心。

类似于this question,它处理HTTP并询问端口是否是必需的。

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

2 个答案:

答案 0 :(得分:4)

正如您所说,RFC 2616仅指定如果未提供端口信息,则必须使用默认端口,此RFC的默认端口未明确定义但在 RFC 2818指定HTTPS的默认端口为443.因此,如果您未指定端口 使用HTTP端口80的主机请求标头,并使用HTTPS端口443。但是在RFC中,如果指定了默认端口,则没有任何引用,因此如果您指定默认端口(尽管没有必要),则IMHO必须正常工作。然而,这最终取决于供应商的实施。

希望这有帮助,

答案 1 :(得分:2)

那个“似乎不喜欢它”的服务器,简单似乎不喜欢HTTP规范中规定的definition of the Host header,它说你可以指定一个端口号 - 或者省略它,如果它是默认值。但是,规范没有说明您不能在默认情况下指定。顺便说一句,除非该服务器根本不允许你指定端口,甚至是非默认端口,否则程序员可能会花费额外的工作来使它“不喜欢它”。

换句话说:这是该服务器中的一个错误。当然,如果这是默认设置,那么当然不会阻止你通过剥离端口号来解决它。