Axios/XMLHttpRequest 在生产环境中发送 GET 而不是 POST
Posted
技术标签:
【中文标题】Axios/XMLHttpRequest 在生产环境中发送 GET 而不是 POST【英文标题】:Axios/XMLHttpRequest is sending GET instead of POST in production environment 【发布时间】:2018-04-22 20:04:12 【问题描述】:我遇到了一个非常奇怪的问题。我们正在将一个应用程序投入生产,其中一个 POST 请求正在变成一个 POST,然后是对同一 URL 的 GET 请求,并且后端(Laravel)永远不会收到 POST。在 chrome 网络选项卡中,它看起来只是一个 GET,但使用 Burpsuite 我们可以看到 POST 请求。
负责的代码
async store()
// This prints post
console.log(this.method());
await this.form[this.method()]('/api/admin/users/' + (this.isUpdate() ? this.id : ''));
if (!this.isUpdate())
this.form.reset();
,
form.post方法内容
return new Promise((resolve, reject) =>
axios[requestType](url, this.data())
.then(response =>
this.busy = false;
this.onSuccess(response.data);
resolve(response.data);
)
.catch(error =>
this.busy = false;
if (error.response.status == 400)
return this.displayErrors(error.response.data)
this.onFail(error.response.data.errors);
reject(error.response.data);
);
);
【问题讨论】:
您很可能遇到了 301/302 重定向。例如,如果您的生产服务器尝试将所有http
流量重定向到 https
,则到 http
的任何 POST 都将被重定向到 https
,但会变成 GET 请求。您可以查看this answer 以获得稍长的解释。
可能重复:axios.post is sending a GET request
【参考方案1】:
这个问题我也在Larachat slack论坛上回答过,为了别人,这里是下一个有这样问题的答案。
只是一个小故事。在聊天中我们发现它收到了一个 301 错误,这是一个重定向错误。 我最近在登台服务器上发布到 url 时遇到了同样的错误,它在本地工作正常,但在登台服务器上却没有。
问题似乎是帖子网址末尾的斜线。
所以发帖到https://example.com/post/to/
是行不通的。
删除/
并发布到https://example.com/post/to
即可。
【讨论】:
我不知道为什么,但就我而言,我不得不做相反的事情! 好指点,谢谢!原来我正在发布到非 i18n 端点,这导致后端重定向到本地化 url。这导致 post-request 最终成为 get-request。 我遇到了完全相同的问题,本地服务器工作正常,只是暂存或生产服务器不行。这就是原因。谢谢! 你救了我一次采访!我欠你一个。 非常感谢......在我的情况下,我的端点是 http 而不是 https,所以它被重定向并获得 301 状态。那种面面相觑的时刻,但修复错误感觉很好【参考方案2】:仅供参考,我也有同样的情况 - axios 请求被重定向。但对我来说,结果是一些本地化中间件导致了重定向!
我在 Api 路由文件中设置了一条替代路由(同样是问题中的 Laravel),绕过了该中间件(可能是路由最初应该去的地方!)。现在一切都好!我猜是小学生的错误!
【讨论】:
你能告诉我你是如何在 axios 中修复它的吗?谢谢 @SakhiMansoor - 我的在 Axios 中没有修复 - 对我来说,这是一些将 POST 重定向为 GET 的中间件【参考方案3】:我确认之前的回答。从本地环境到生产环境,我也遇到了同样的问题。
对/ api / user / store /
等端点的调用可能会重定向到/ api / user / store
,并带有 301 状态代码,并且此调用被解释为显然我们无法到达的 GET(因为它不在我们的路由列表中)。所以它不起作用。
解决方案可以是使用 Apache 配置(修剪最后一个斜杠),但我更喜欢调整我的 Axios 调用。
【讨论】:
以上是关于Axios/XMLHttpRequest 在生产环境中发送 GET 而不是 POST的主要内容,如果未能解决你的问题,请参考以下文章