火狐浏览器:CORS缺少允许头信息

5
我的火狐浏览器向我的私有后端发出OPTIONS预检请求,以便使用凭据进行后续的GET请求。
预检请求包括以下标头。
Origin http://localhost:9670
Access-Control-Request-Headers authorization
Access-Control-Request-Method GET

我的服务器响应为:
Access-Control-Allow-Credentials true
Access-Control-Allow-Origin http://localhost:9670
Vary: Origin

根据我找到的文档,那应该没问题。

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Credentials

无论如何,我的火狐浏览器仍然显示:

CORS缺少允许头部

在开发者控制台的网络选项卡的传输部分中。

我的服务器响应缺少什么?


你是不是试图使用 ng serve 命令来运行 Firefox?在最终找到这个问题/答案之前,这可能会有所帮助。 - Collin
1个回答

13
除此之外
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: http://localhost:9670
Vary: Origin

预检请求的响应还必须包含
Access-Control-Allow-Headers: Authorization

否则,访问控制检查将失败,您的浏览器将不会发送实际的(预检)请求。请参阅https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Headers
您是否在后端从头开始实现CORS?如果是这样,为什么不使用一个(好的)CORS库,您可以配置它来为您处理所有这些事情呢?

1
我添加了这两个头文件,现在预检通过了!谢谢。 - ulrich
1
我需要检查一下cors库,这可能是个好主意。 - ulrich
即使使用了授权头,我仍然收到了错误。结果发现我需要 header('Access-Control-Allow-Headers: authorization,x-csrf-token')。基本上检查 $_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS'] 的内容,并查看是否需要在响应头中添加更多内容。另请参阅:https://dev59.com/02oy5IYBdhLWcg3wL7H1 - nuala

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接