javascript - 是否可以向 CORS 预检请求添加请求 header ?

标签 javascript http browser cors xmlhttprequest

我有一个从外部服务器(不是服务器)访问 API 的网站 为网站提供服务)通过普通的 XmlHttpRequest(见下文)。那个API 需要用于访问服务的 API key 添加为请求 header 。 但是,由于这些是 CORS 请求浏览器首先执行预检请求以检查该服务器是否 支持 CORS。现在,服务器似乎也想在中查看 API key 这些由浏览器完成的预检请求。是否可以通过 API key 也用于预检请求?

const req = new XMLHttpRequest();
req.open("GET", "https://some/api/endpoint");
req.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
req.setRequestHeader("x-api-key", _apiKey);
req.onload = () => {
  // ...
};
req.send();

最佳答案

CORS 预检OPTIONS 请求完全由浏览器控制;所以不可能向它添加请求 header 。参见 https://fetch.spec.whatwg.org/#cors-preflight-fetch .这就是为什么您发送请求的任何端点都必须设置为允许未经身份验证的 OPTIONS 请求,并用 200 OK 响应它们(至少只要请求触发预检,如果您添加自定义请求 header ,例如问题中的 x-api-key header ,它总是会这样做。

关于javascript - 是否可以向 CORS 预检请求添加请求 header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58547499/

相关文章:

javascript - 两台服务器可以访问共同的mongoDB数据库吗

Python脚本动态查找firefox在打开url时监听的端口?

html - Mozilla 将 <br></br> 翻译成 <br></br><br></br>

Java 异步等待 http 重定向

google-chrome - NET::ERR_CERT_DATE_INVALID 情况下的自定义错误文本

javascript - 即使元素存在, document.getElementById(..) 也会给出 null

javascript - 无法从内存中删除已创建但从未附加到页面的 Canvas 元素

javascript - 字符串中与“\”反斜杠匹配的Javascript

java - 从 HttpResponse 克隆/多重读取输入流

C HTTP 套接字过早关闭并明显出现读取错误