我遇到了一个非常奇怪的问题。我们正在将一个应用程序投入生产,其中一个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);
});
});
答案 0 :(得分:18)
我在Larachat闲谈论坛上也回答了这个问题,对于其他人来说,这里的答案就是下一个有这样一个问题的答案。
只是一个小故事。在聊天中,我们发现它收到301错误,这是一个重定向错误。 我最近在登台服务器上发布到网址时遇到了同样的错误,它在本地工作正常但在登台服务器上却没有。
问题似乎是帖子网址末尾的斜线。
因此发布到https://example.com/post/to/
将无效。
删除/
并发布到https://example.com/post/to
即可。
答案 1 :(得分:0)
仅仅是为了获取信息,我有同样的事情 - axios请求被重定向。对我来说,事实证明是一些导致重定向的本地化中间件!
我在Api路线文件中设置了另一条路线(在问题中再次使用Laravel),绕过该中间件(可能首先路线应该在哪里!)。一切都好!我想是小学生的错误!
答案 2 :(得分:0)
我确认先前的回答。从本地环境到生产环境,我都遇到了同样的问题。
对端点/ api / user / store /
的调用可能会使用301状态代码重定向到/ api / user / store
,并且此调用被解释为显然无法到达的GET(因为它不在路由列表中) 。所以它不起作用。
一个解决方案可以是在Apache配置上工作(修剪最后一个斜杠),但是我更喜欢适应我的Axios调用。