获取API:无法在Chrome上的请求标头上添加授权

Sev*_*Lee 6 http fetch cors preflight fetch-api

Chrome版本:57.0.2987

实际上,在较旧的Chrome版本中我也有这个问题.我Authorization在Request Header上添加了访问令牌,

fetch('https://example.com/endpoint', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer ' + accesstoken
  }  
})
Run Code Online (Sandbox Code Playgroud)

我总是在Chrome中Access-Control-Allow-Headers:authorization使用响应标题除此之外,我的提取始终是请求方法:选项(不显示GET),然后Status Code在Chrome中为200 OK

但是如果我在Firefox(版本52.0.1)中运行相同的获取代码,一切都很好.我可以添加Authorization请求标题正确.它不会显示Access-Control-Allow-Headers:authorization响应头在Firefox.它将显示Authorization: Bearer accesstoken在Request标头上.

服务器端已经为我的请求标头处理了CORS ..

这是Chrome错误或我的代码错误?我应该怎么做才能让Authorization请求头在Chrome是否正确?

下面的图片是细节Chrome的开发工具: 下面的图片是Chrome开发工具中的详细网络:

下面的图片是细节Firefox的开发工具: 在此输入图像描述

Sev*_*Lee 0

正如@stackdave所说,跨域ajax时,浏览器在GET请求之前发送OPTIONS请求。然后浏览器将等待服务器响应。我的情况是服务器没有响应,所以浏览器只是停止 OPTIONS 状态。服务器需要处理这个问题,它仍然是 CORS 问题,而不是 fetch api bug 或问题。