【nginx】为什么nginx获取到的参数,带有URL格式的斜杠变成一个

如图

【nginx】为什么nginx获取到的参数,带有URL格式的斜杠变成一个

nginx配置

location ~* ^/_proxy/(.*)$ {

return 200;

add_header Your-Params $1;

}

我传过去参数是https://a.com/a.jpg,但返回的却是 https:/a.com/a.jpg,斜杠变成一个了,这是为什么

回答

题主注意到了吗,您这个地址是一个完整的地址,nginx在解析路径之前会先将路径规范化的.这里说明一下什么时规范化

所谓规范化,就是先将URI中形如“%XX”的编码字符进行解码,再解析URI中的相对路径“.”和“..”部分, 另外还可能会压缩相邻的两个或多个斜线成为一个斜线。

举例说明:若REQUEST_URI为//trip/t.php,则规范化后为/trip/t.php,Nginx将规范前的值存放在$request_uri中,而规范化后的值存放在$uri中。ps其中,$request_uri和$uri为Nginx内嵌变量。

这下明白了吗,我传过去参数是https://a.com/a.jpg,但返回的却是 https:/a.com/a.jpg,斜杠变成一个了的原因是因为nginx将url格式规范化了.

ps:我是做java的,其实这种url规范化的问题在spring security的官方文档中同样有解释,题主如果英文不错的话可以看一下原文,https://docs.spring.io/spring...

spring 安全组件针对 url 存在// 这种情况的做法,直接是抛出500异常,因为这个不符合url规范,nginx是将他规范化

以上是 【nginx】为什么nginx获取到的参数,带有URL格式的斜杠变成一个 的全部内容, 来源链接: utcz.com/a/84481.html

回到顶部