如何解决URL 路径中的空格“/path/subpath name”导致“Invalid HTTP Version: 'name”错误
我有以下 nginx 配置:
location ~* ^/path/(.*) {
set $query $1;
proxy_pass http://backend_app/$query;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Proto $scheme;
}
我希望 nginx 将请求从 http://frontend/path/subpath name
代理到 http://backend_app/subpath name
。但我看到了一些奇怪的行为:
http://frontend/path/subpath
--> http://backend_app/path/subpath
工作正常。
但是
http://frontend/path/subpath name
--> 返回带有以下错误消息的 400 错误请求:
< HTTP/1.1 400 Bad Request
< Server: nginx/1.16.1
< Date: Sat,06 Feb 2021 01:13:15 GMT
< Content-Type: text/html
< Content-Length: 198
< Connection: keep-alive
< Strict-Transport-Security: max-age=31536000; includeSubDomains
<
<html>
<head>
<title>Bad Request</title>
</head>
<body>
<h1><p>Bad Request</p></h1>
Invalid HTTP Version 'Invalid HTTP Version: 'name HTTP/1.0''
</body>
</html>
* Connection #0 to host frontend left intact
* Closing connection 0
注意响应中的错误消息说 Invalid HTTP Version 'Invalid HTTP Version: 'name HTTP/1.0''
因此 nginx 将路径中空格后的单词解释为 http 版本名称的一部分。
我也尝试过使用 URL 编码,但仍然没有运气。
解决方法
刚刚了解了 URI 规范化,我能够按照以下配置解决此问题:
location /path {
rewrite /path/(.*) /$1 break;
proxy_pass http://backend_app;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Proto $scheme;
}
一切都按预期进行。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。