preflight 错误,但服务端告诉你已经设置过了 CORS 信息怎么办

简介: preflight 错误,但服务端告诉你已经设置过了 CORS 信息怎么办

开发过程遇到一个问题

异步去一个 cdn 上请求一个自定义 JSON 格式的文件报了一个 preflight 错误

has been blocked by CORS policy: Response to preflight request doesn't pass access control check: It does not have HTTP ok status

但当我在开发者工具内直接使用 fetch(url) 去请求这个文件时却可以正常返回。

服务端开发人员告诉我已经设置过允许跨域的信息了..

查了一下资料发现,当请求是非“简单”请求时,浏览器会先触发预检测 pre-flgith, 就是我们常在异步请求前看到的 OPTIONS 请求

Request Method: OPTIONS

所以当遇到 preflight 错误时,会感受到浏览器完全没有发起任何请求,就报错。

分析原因: 我当前项目中的所有请求都由 axios 做了拦截层,会带上自定义的信息比如授权的 token 版本号等。且 header 是以 application/json 格式返回

所以我项目中的所有请求都是非 “简单” 请求

解决方案

调整 axios 请求的配置,避免发送预检请求:

  1. 确保不使用任何会触发预检的请求方法(如 PUT, DELETE, CONNECT 等)。
  2. 避免在请求中设置任何非简单请求头部。

将 Content-Type 设置为 text/plain,或不设置,直接使用 fetch(url)

如果是 axios 可以像下面这样尝试:

axios.get('http://example.com/data.json', {
  headers: {
    'Content-Type': 'text/plain'
  }
})
相关文章
|
对象存储
如何设置对象存储OSS跨域(CORS)?
CORS的中文名是跨域资源共享,是HTML5提供的标准跨域解决方案。跨域访问,也叫JavaScript跨域访问问题,是浏览器出于安全考虑而设置的一个限制,即同源策略。当来自于A网站的页面中的JavaScript代码希望访问B网站的时候,浏览器会拒绝该访问,因为A、B两个网站是属于不同的域。
8867 0
|
6月前
|
JSON 小程序 API
【Azure API 管理】APIM CORS策略设置后,跨域请求成功和失败的Header对比实验
【Azure API 管理】APIM CORS策略设置后,跨域请求成功和失败的Header对比实验
|
8月前
|
JavaScript API
蓝易云 - 如何使用CORS来允许设置Cookie
以上就是使用CORS来允许设置Cookie的方法。
44 2
|
9月前
|
缓存 安全 数据安全/隐私保护
在智能媒体服务中,跨域问题可以通过设置CORS(跨源资源共享)规则来解决
在智能媒体服务中,跨域问题可以通过设置CORS(跨源资源共享)规则来解决
116 4
|
9月前
|
JSON 前端开发 Java
12:CORS跨域设置-Java Spring
12:CORS跨域设置-Java Spring
135 0
|
JSON JavaScript 前端开发
使用Vue、ElementUI实现登录注册,配置axios全局设置,解决CORS跨域问题
使用Vue、ElementUI实现登录注册,配置axios全局设置,解决CORS跨域问题
178 0
|
安全 中间件
koa2-cors设置允许指定单个域名、多个域名、所有域名跨域
在你koa项目入口文件中引入一个中间件koa2-cors,然后执行下它的cors()方法就完了,但考虑到安全性问题,我们上线后并不希望所有人可以去跨域访问接口,那么如何做?
Ajax-21:设置CORS响应头实现跨域
Ajax-21:设置CORS响应头实现跨域
248 0
|
5月前
|
JSON 安全 前端开发
浅析CORS跨域漏洞与JSONP劫持
浅析CORS跨域漏洞与JSONP劫持
201 3