nginx 重写帖子数据 [英] nginx rewrite post data

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

问题描述

我需要将 POST 数据保存到不同的 url

I need to preserve the POST data to a different url

重写成功,但是post数据丢失了

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 Moved Permanently 重定向自动重定向 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天全站免登陆