【问题标题】:Safari on IOS ignoring CORS / not sending CORS preflight OPTIONS requestIOS 上的 Safari 忽略 CORS/不发送 CORS 预检选项请求
【发布时间】:2018-08-22 03:48:11
【问题描述】:

我在使用 Axios 和 VUEJS 时遇到问题,我仅在 Safari 上不断收到错误 xmlhttprequest cannot load XXX due to access control checks。该应用程序可以在 Chrome 和 Brave 上找到,但不能在 Safari 上找到。

此外,Safari 似乎对预期的 URL 发出了 CORS 请求,但随后在不等待响应的情况下取消了它。

我的端点是用 PHP 编写的

$origin = 'http://192.168.1.6:8080'; // For testing
$response = $response->withAddedHeader('Access-Control-Allow-Origin', $origin);
$response = $response->withAddedHeader('Access-Control-Allow-Headers', 'Authorization,Origin,X-Requested-With,Content-Type,Range');
$response = $response->withAddedHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');

【问题讨论】:

    标签: php vue.js mobile-safari axios


    【解决方案1】:

    问题似乎是由于 Safari 之前没有为网站定义 CORS 数据。 Axios 中的 API 调用是 302 响应的结果(我不知道这是否相关),无论出于何种原因,它都不喜欢这样。

    解决方案是在应用程序首次加载时添加一个建立 CORS 的 ping 请求(至少,我认为这是这样做的)。像这样:

      this.$axios.get('api/ping').then(() => {
        if (localStorage.getItem('id_token')) {
          this.$router.push('/app/requests')
        }
      })
    

    该 ping 仅包含带有 CORS 标头的未经身份验证的回复,允许后续 API 调用正常执行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-29
      • 2012-02-24
      • 1970-01-01
      • 2019-10-13
      • 2018-04-06
      • 2012-11-08
      • 2019-10-10
      • 2018-06-20
      相关资源
      最近更新 更多