我正在Angular中构建这个与REST api通信的Web应用程序。有时,当前端通过GET向某个URL请求某些数据时,服务器不会立即返回200 OK,而是抛出301响应。 Chrome正确处理此301并对响应标头中返回的网址发出后续请求。以下是Chrome中引发的请求序列的屏幕截图:
请注意,在每次实际请求之前都有一个预检请求,因为我正在使用CORS。
现在,当我在Firefox中尝试此操作时(我相信Edge可能会出现同样的问题),这就是我在网络中检查的内容:
浏览器甚至不会尝试获取301响应中返回的资源,因此实际数据永远不会到达前端,我的表单显示为空。
要添加更多信息,后端正在Django上运行,此测试在开发服务器上完成。
以下是一段代码,展示了Angular如何执行此请求(我认为非常简单):
getUser(id: number): Promise<User> {
return this.http.get('/users/'+id)
.toPromise()
.then(data => data as User )
.catch(this.handleError);
}
出于某种原因,当我开始这个项目时,我决定使用promises而不是observables。不确定这是否相关。
答案 0 :(得分:0)
为了不让这个看似无法解决的目的,并且如果有人因这个愚蠢的问题而绊倒了,这就是发生的事情:
我的应用程序的实际URL包含一个斜杠(/ users /),而我所要求的URL不带斜杠(/ user)。因此,我的后端将通过重定向(301)来响应适当的URL。看起来,虽然Chrome可以处理这种重定向,但Firefox不会。就这么简单。
最重要的是:正确编写网址。