我正在尝试了解$request_uri
nginx 配置中的变量。文档说
完整的原始请求 URI(带参数)
对我来说,这似乎完全没有歧义 - 它应该是整个请求的 URI,包括主机和协议。但在实际使用中,它似乎只包含路径和查询参数。是否有任何权威来源确切说明 nginx 将什么视为 request_uri?我在文档中找不到任何其他参考资料,我试图将其从源代码中取出,但没有注释,很难理解整体结构。
答案1
这请求URI并不是指RFC 3986URI,但它是一个来自RFC 2616,5.1.2HTTP/1.1标准草案从 1999 年开始。
这请求URI在 RFC 2616 中可能是以下任一种:
Request-URI = "*" | absoluteURI | abs_path | authority
此处,absoluteURI
相当于 RFC 3986 URI,主要用于 HTTP 代理。Søren Løvborg 在Stack Overflow 上的答案为什么在这个上下文中不需要完整的 URI:
在普通的 HTTP 请求中,URL 方案和主机在发送请求时就已经处理好了(并且 URL 片段在 HTTP 协议级别根本不存在),这意味着 Request-URI 是一个路径绝对 URL 字符串,可能随后
?
是URL 查询字符串。
请求URI似乎被(更明确的)术语取代请求目标在RFC 7230, 3.1.1 拟议标准从 2014 年开始,请求行...
以方法标记开头,后跟一个空格 (
SP
)、request-target
、另一个空格 (SP
)、协议版本,最后以 结尾CRLF
。
request-line = method SP request-target SP HTTP-version CRLF
这请求目标术语也用于RFC 9110, 7.1的互联网标准(2022 年 6 月);URI 参考定义在RFC 9110, 4.1。