CORS,防止带有授权标头的请求预检

新手上路,请多包涵

AngularJS 将我的 POST 请求转换为 OPTIONS 当我添加 Authorization 标头时:

   $http({
    url: ApiEndpoint + 'logout',
    method: 'POST',
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded',
      'Authorization': UserService.getApiKey()
    }
  })

我正在使用我在浏览器中测试的 Ionic 开发一个混合移动应用程序,因为它是一个 CORS 请求。

我已经看过 这个 问题了。建议的解决方法是更改 Content-Type 我所做的并且它在没有 Authorization 下工作。使用 Authorization 标头,请求再次更改为 OPTIONS 方法。

您能否提出客户端解决方案,因为无法控制服务器 API。

谢谢你。

原文由 VladRia 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 251
1 个回答

正如其他人所指出的,您看到的是 CORS 预检请求。

如果您想设置 Authorization 标头,则无法避免它们,但如果您控制后端(或愿意使用代理),则有一些解决方法。更多信息: https://damon.ghost.io/killing-cors-preflight-requests-on-a-react-spa/

简而言之:

  • 浏览器可以缓存 CORS 预检标头(将 Access-Control-Max-Age 标头 设置为应缓存响应的秒数)
  • 授权标头可以移动到 URL 参数(如果这是一个好主意或不是一个完整的其他讨论)
  • 您可以在没有适当标头的情况下发送 JSON(同样,这不是最好的主意,但是……)
  • 如果适合您的用例,最简单的解决方案是使用代理,从而完全避免 跨源 请求

原文由 johndodo 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题