CORS请求在Chrome上运行良好,但在Safari/Firefox上不起作用。

5
问题

在本地主机上通过CORS请求登录我的应用程序时,我在运行Sierra的最新版本的Safari / Firefox上遇到以下错误。

但是在Chrome上执行相同的操作却没有任何问题。我使用启用了CORS的Laravel 5.6+。

Safari

enter image description here

Firefox

enter image description here

Firefox网络选项卡

enter image description here

/login POST OK,/user GET NOPE

enter image description here

Chrome /user GET(注意Access-Control-Allowed-Origin)

enter image description here

但是在Safari / Firefox上执行相同的操作时,在/user GET中,该标头缺失(?)

enter image description here

Laravel 5.6 CORS设置

'supportsCredentials' => false,
'allowedOrigins' => [env('ALLOWED_ORIGINS')],
'allowedOriginsPatterns' => [],
'allowedHeaders' => ['Origin', 'Content-Type', 'X-Requested-With', 'Accept', 'Authorization'],
'allowedMethods' => ['*'],
'exposedHeaders' => ['*'],
'maxAge' => 0,

工具

  1. Laravel Mix
  2. Laravel 5.6+
  3. axios
  4. Vue.js 2
  5. @websanova/vue-auth

我还将以下内容设置为axios的默认值。没有理由这段代码在最新版Chrome上能够正常运行,但是在最新版FF/Safari上不能工作。我已经花费了数小时来解决这个问题,但一无所获。

window.axios = axios;
window.axios.defaults.headers.post['Content-Type'] = 'application/json';
window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
window.axios.defaults.baseURL = baseURL;

更新

我注意到在Chrome浏览器上,/user GET请求会设置Authorization Bearer,但在Firefox或Safari上却没有。这太荒谬了。可能出了什么问题?


火狐浏览器的响应是401,而谷歌浏览器则是200。可能是CORS库在错误响应时没有发送CORS头。 - apokryfos
@apokryfos 请看我在最底部的更新。不,实际上它也会在错误响应上发送CORS标头。 - Ali Gajani
1个回答

4

发现了问题:

'exposedHeaders' => ['Authorization'],需要在我的cors.php里明确指定。

[]['*']被Safari和Firefox拒绝了,但Chrome可以使用。很奇怪。

现在,这似乎是Chrome的CORS违规行为。

它不关心暴露的标头是否设置正确,它仍然可以工作。


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