使用XHR请求API出现CORS错误、Postman请求正常问题咨询
问题属性判定
这是纯服务端配置问题,你没有遗漏必要请求头,代码的核心配置没有错误。
CORS报错的原因
浏览器遵循同源策略,跨域发起请求时会自动先发送OPTIONS预检请求,要求目标服务端返回符合规则的CORS响应头(最基础的就是Access-Control-Allow-Origin),如果响应头缺失或者不符合规则,就会直接拦截请求。
而Postman属于独立客户端工具,不会执行同源策略的CORS校验,所以就算服务端没有返回CORS头也能正常拿到结果,和你前端的请求头配置没有关系。
"拒绝设置不安全标头Host"的说明
Host、Accept-Encoding、Connection都属于浏览器规范中禁止前端脚本手动修改的标头,会由浏览器自动生成填充,你不需要手动设置,这个报错是正常行为,和CORS问题没有关联。
解决方案
- 方案1:联系
api.cloud.im的服务端维护人员,添加CORS配置:- 将你的站点源
http://www.im-cmp.ch添加到CORS白名单,注意你开启了xhr.withCredentials = true,所以Access-Control-Allow-Origin不能返回通配符*,必须返回明确的域名 - 新增
Access-Control-Allow-Credentials: true响应头 - 将你用到的自定义请求头
X-Subscription-Key、Authorization等添加到Access-Control-Allow-Headers响应头 - 确保OPTIONS预检请求的响应状态码为200/204
- 将你的站点源
- 方案2:如果无法联系对方修改配置,你可以在自己的服务端新增一层请求代理:前端先请求同域的你的后端接口,由后端转发请求到
api.cloud.im,再将结果返回给前端,绕开浏览器的跨域限制。
代码优化建议
你当前使用的是GET请求,没有携带JSON格式的请求体,Content-Type: application/json这个请求头可以移除,不影响请求结果。
内容的提问来源于stack exchange,提问作者JonasKaufmannBambus
相关产品推荐
相关产品推荐

