nginx重写发布数据 [英] nginx rewrite post data

查看:90
本文介绍了nginx重写发布数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要将POST数据保存到其他网址

I need to preserve the POST data to a different url

重写有效,但发布数据丢失

The rewrite works but the post data is lost

需要将数据从user_info.php发布到userhistory

need to post data from user_info.php to userhistory

 location  ~ user_info.php {
  rewrite ^/.* http://testing.com/userhistory  permanent;
 }

数据丢失.如何保存数据?

The data is lost. How can I preserve the data?

推荐答案

基本上,您想使用301移动永久重定向自动重定向POST请求.

Basically, you want to automatically redirect a POST request using a 301 Moved Permanently redirect.

但是. HTTP规范明确禁止此类重定向

However. such redirect are specifically disallowed by the HTTP Specifications which states that:

如果响应GET或HEAD以外的请求而收到301状态码,则用户代理不得自动重定向请求,除非用户可以确认,因为这可能会改变请求被请求的条件.发布.

If the 301 status code is received in response to a request other than GET or HEAD, the user agent MUST NOT automatically redirect the request unless it can be confirmed by the user, since this might change the conditions under which the request was issued.

规范还指出:

在收到301状态代码后自动重定向POST请求时,某些现有的HTTP/1.0用户代理将错误地将其更改为GET请求.

When automatically redirecting a POST request after receiving a 301 status code, some existing HTTP/1.0 user agents will erroneously change it into a GET request.

我相信第二种情况可能是发生了什么,而目标服务器正在等待POST数据,而接收的却是GET数据.

I believe the second situation may be what is going on and that while the target server is expecting POST data, it is receiving GET data instead.

您的选择是:

A.更改代码以使用GET数据或更好的POST和GET.即,查找POST,如果不存在,请尝试获取GET等效项.

A. Change the code to work with GET data or better still, both POST and GET. I.E., look for POST and if not there, try GET equivalents.

B.尝试通过使用规范来确保代码接收POST数据.

B. Try to ensure the code receives POST data by working with the Spec.

通过使用proxy_pass指令来处理请求,您也许可以实现选择B.

You may be able to achieve Choice B by using the proxy_pass directive to handle the request instead.

诸如:

location  ~ user_info.php {
    proxy_pass http://testing.com/userhistory;
    proxy_redirect off;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

通过这种方式,从技术上讲,不会重定向用户.

In this way, the user is technically not being redirected.

这篇关于nginx重写发布数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆