我遇到了一个非常奇怪的问题。我们正在将一个应用程序投入生产,其中一个 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);
});
});
这个问题我也在Larachat slack论坛上回答过,为了其他人的缘故,这里是下一个有这样问题的答案。
只是一个小背景故事。在聊天中我们发现它收到了 301 错误,这是一个重定向错误。 我最近在发布到临时服务器上的网址时遇到了同样的错误,它在本地工作正常,但在临时服务器上却不起作用。
问题似乎是帖子网址末尾的斜线。
所以发帖到
https://example.com/post/to/
是行不通的。
删除
/
并发布到 https://example.com/post/to
即可。
仅供参考,我也遇到了同样的事情 - axios 请求被重定向。但对我来说,结果是一些本地化中间件导致了重定向!
我在 Api 路由文件中设置了一条替代路由(同样是问题中的 Laravel),绕过该中间件(可能是路由最初应该去的地方!)。现在一切都好啦!我猜是小学生的错误!
我确认之前的答案。从本地到生产环境,我也遇到了同样的问题。
对像
/ api / user / store /
这样的端点的调用可能会重定向到带有 301 状态代码的 / api / user / store
,并且此调用被解释为显然我们无法到达的 GET(因为它不在我们的路由列表中)。所以这不起作用。
解决方案可以是在 Apache 配置上工作(修剪最后一个斜杠),但我更喜欢调整我的 Axios 调用。
我也收到了这个,问题与 url 配置无关。我所做的是显式创建 axios POST 有效负载并且它正常工作。我从邮递员那里拿了它,它按预期工作了。
let config = {
method: 'post',
maxBodyLength: Infinity,
url: 'https://my.normalurl.com/api/v2',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Session ' + token
},
data : data
};
axios.request(config)