“HTTP 请求消息中的 URL”在哪里?

“HTTP 请求消息中的 URL”在哪里?

HTTP:权威指南

非虚拟托管且不允许资源因请求的主机而异的源服务器可以忽略 Host 标头字段值。但任何根据主机区分资源的源服务器都必须使用以下规则来确定 HTTP/1.1 请求中请求的资源:

  1. 如果HTTP 请求消息中的 URL是绝对的(即包含方案和主机组件),则将忽略 Host 标头中的值,而采用 URL。

  2. 如果HTTP 请求消息中的 URL没有主机,并且请求包含 Host 标头,则从 Host 标头中获取主机/端口的值。

  3. 如果通过步骤 1 或 2 无法确定有效主机,则向客户端返回 400 Bad Response 响应。

“HTTP请求报文中的URL”在哪里?

它是请求行中的那个吗(在 HTTP 请求的第一行,在方法之后,例如GET)?

谢谢。

答案1

URL 不需要出现在 HTTP 请求中的任何地方(除非是向代理发出请求;请参见下文)。

您书中引用的第 2 点有错误。URL 未出现在请求行中,Origin 格式是最常见的 HTTP 请求目标格式。通常,只有 URL 的特定组件才会出现在请求中,即出现在 Host 标头中的主机(如果适用,还包括端口)以及出现在请求行中的路径和查询字符串。请求中未出现的一项内容是方案(http 或 https),如果 Web 应用程序确实需要知道方案,这偶尔会让开发人员感到困惑。

请求行的另一种形式可以包含完整的 URL 作为请求目标,并且服务器必须能够处理这种格式,称为绝对形式。除非用户代理故意与 HTTP 代理对话,否则通常看不到这种形式。在这种情况下,代理需要知道方案,以便它可以尝试传递请求,而完整的 URL 形式是相关标准 (RFC 7230) 中定义的实现方式。

相关内容