Nginx 301 重定向 HTTPS 导致 POST 请求变成了 GET 请求

Nginx 强制配置 301 永久跳转后,APP 发起 POST 请求会出现 405 错误,这是因为 301 跳转的操作让浏览器把 POST 请求变成了 GET 请求。

示例 301 跳转示例:

return 301 https://www.xxx.com$request_uri;

解决办法:

return 307 https://www.xxx.com$request_uri;

return 308 https://www.xxx.com$request_uri;

状态码

301 Moved Permanently

被请求的资源已永久移动到新位置,并且将来任何对此资源的引用都应该使用本响应返回的若干个 URI 之一

307 Temporary Redirect

请求的资源现在临时从不同的 URI 响应请求。由于这样的重定向是临时的,客户端应当继续向原有地址发送以后的请求

308 永久重定向

308 状态代码 [永久重定向],类似于 301 ( 永久移动 ),但不允许将请求方法从 POST 更改为 GET.

301 和 308 的区别

在 HTTP 协议中, 308 Permanent Redirect(永久重定向)是表示重定向的响应状态码,说明请求的资源已经被永久的移动到了由 Location 首部指定的 URL 上。在重定向过程中,请求方法和消息主体不会发生改变!

然而在 301 状态码的情况下,请求方法有时候会被客户端错误地修改为 GET 方法

Nginx-301重定向到HTTPS的问题/