限制 Host 标头的“URL”是什么?

限制 Host 标头的“URL”是什么?

以下引自HTTP 权威指南假设“URL”来自某个地方并使用它来限制 Host 标头。“URL”来自哪里?是来自 HTTP 请求的第一行(例如 之后GET),还是来自 Web 客户端的输入(例如 的参数curl或 Web 浏览器地址栏中的输入)?谢谢。

Host 标头指定了所请求资源的 Internet 主机和端口号,该标头从原始网址

Host = "Host" ":" host [ ":" port ]

尤其:

• 如果主机标头不包含端口,则假定使用方案的默认端口。

• 如果URL包含 IP 地址,主机头也应该包含相同的地址。

• 如果URL包含主机名,Host 头必须包含相同的名称。

• 如果URL包含主机名,则 Host 标头不应包含与 URL 主机名等同的 IP 地址,因为这将破坏虚拟托管服务器(该服务器在单个 IP 地址上分层放置多个虚拟站点)。

• 如果URL包含主机名,则 Host 标头不应包含此主机名的另一个别名,因为这也会破坏虚拟托管的服务器。

答案1

主机字段是在HTTPv1.0标准中引入的,并且是可选的。

在 HTTPv1.1 中,您必须使用 Host 字段。

在此标准之前,以 HTTPv0.9 为例,浏览器过去常常简单地发出单个远程命令,例如;

GET example.com/index.html[cr][lf][cr][lf]

[cr][lf] 是回车符,因此该行上有双回车符。

为了更好地支持 SSL 以及其他一些原因,他们在 HTTPv1 中添加了 Host 字段。

在 HTTPv1+ 中,浏览器中的相同请求如下所示;

GET example.com/index.html[cr][lf]
Host: example.com[cr][lf]
[cr][lf][cr][lf]

或者

GET index.html[cr][lf]
Host: example.com[cr][lf]
[cr][lf][cr][lf]

例如请求;

GET example.com/index.html[cr][lf]
Host: contoso.com[cr][lf]
[cr][lf][cr][lf]

这将是一个逻辑错误,并且 RFC 警告您这是反对这种事情的。

如您所见,URL 是由远程服务器构建的,具体取决于查询的编写方式。

相关内容