Nginx 使用 http -> https 重定向丢失 POST 变量

Posted

技术标签:

【中文标题】Nginx 使用 http -> https 重定向丢失 POST 变量【英文标题】:Nginx loses POST variable with http -> https redirect 【发布时间】:2017-01-09 20:37:29 【问题描述】:

我有一个使用重定向方法的网站设置...

server 
    listen 80;
    server_name example.org;
    return 301 https://$server_name$request_uri;

但是,当页面发布到“http://example.com”时,它会重定向到“https://example.com”,并且在此过程中,它会删除 POST。

我知道它是这样工作的,但是我需要以某种方式执行以下操作之一...

从 http -> https 进行重定向,同时保持 POST 变量不变 在重定向期间将 POST 变量转换为 GET 变量(可以正常工作) 重定向除一个文件夹之外的所有内容

有什么建议吗?我有点迷茫……

【问题讨论】:

【参考方案1】:

308 重定向是一种解决方法,但解决方案是直接 POST 到 https:

通过 http 发帖,您的帖子数据不安全 重定向使进程变慢 如果您从 https 网页发布到 http,浏览器可能会向用户显示警告

【讨论】:

当然更愿意这样做......不幸的是,问题是它是一个旧的 flash swf 文件(一个在线课程),它发布到 http/:80 url,不幸的是我无法控制它。我使用 308/307 而不是 301 修复了它。谢谢!【参考方案2】:

如果您愿意放弃“永久”重定向状态,我相信 307 重定向而不是 301 将保留 POST。实际上有一个永久重定向并保留帖子,即 308,但尚未被浏览器和其他用户代理很好地采用。

【讨论】:

【参考方案3】:

这是一个常见问题,没有简单的解决方案。

这里有一些类似问题的答案

Apache 301 Redirect and preserving post data

Is it possible to redirect post data?

也许其中一个答案可以帮助解决您的问题

【讨论】:

以上是关于Nginx 使用 http -> https 重定向丢失 POST 变量的主要内容,如果未能解决你的问题,请参考以下文章

【nginx】最优雅的Nginx配置HTTP跳转HTTPS方法

Nginx使用ssl模块配置HTTPS支持

使用 Docker 并希望 HTTP 到 HTTPS 使用 NGINX 反向代理到 HTTP Grafana

使用 Nginx 将 HTTP 重定向到 HTTPS

Nginx实现同一端口HTTP跳转HTTPS

nginx强制使用https访问(http跳转到https)