【发布时间】:2019-05-01 21:21:53
【问题描述】:
我必须使用不记名令牌发出经过身份验证的 HTTP 请求。这在我测试过的所有东西上都能完美运行……除了 一些 iOS 设备。
fetchWithToken : function( endpoint, token ){
return Vue.http.get( urlBase + endpoint, {
headers : {
Authorization : 'Bearer ' + token
}
});
},
据我所知,请求被发送了两次。请注意,此函数仅被调用一次(通过调试验证),但服务器会收到 2 个请求。第一个请求包含令牌并成功授权。第二个没有令牌并且失败,将该失败返回给我的应用程序的其余部分。
一次调用的两个 HTTP 请求让我想到了 CORS 预检请求。但是,它是同一个域,并且上述函数中的 urlBase 变量是相对地址('/api/'),而不是完整的 URL。
iOS 是否强制使用 CORS?如果是这样,为什么第二个请求没有授权标头而不是预检请求发送?
【问题讨论】:
-
对服务器和前端的进一步日志显示,这 2 个请求实际上不是 CORS,而是 301 重定向。授权令牌从 iOS 上的第二个请求中被剥离,而不是其他设备。还没有解决方法。
-
事件组合错误。服务器(一个 symfony 应用程序)正在为没有以斜线结尾的端点执行 301 重定向。显然,iOS 是唯一不让授权标头继续进行 301 重定向的用户代理。所以第一个请求有令牌,它是 301 的,而第二个请求没有。基本上 3 小时的日志记录和跟踪所有内容以了解我需要用 / 结束端点调用。
标签: ios vue.js vue-resource