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'
  }
})
相关文章
|
26天前
|
JSON 小程序 API
【Azure API 管理】APIM CORS策略设置后,跨域请求成功和失败的Header对比实验
【Azure API 管理】APIM CORS策略设置后,跨域请求成功和失败的Header对比实验
|
3月前
|
JavaScript API
蓝易云 - 如何使用CORS来允许设置Cookie
以上就是使用CORS来允许设置Cookie的方法。
18 2
|
4月前
|
缓存 安全 数据安全/隐私保护
在智能媒体服务中,跨域问题可以通过设置CORS(跨源资源共享)规则来解决
在智能媒体服务中,跨域问题可以通过设置CORS(跨源资源共享)规则来解决
54 4
|
4月前
|
JSON 前端开发 Java
12:CORS跨域设置-Java Spring
12:CORS跨域设置-Java Spring
74 0
|
11月前
|
JSON JavaScript 前端开发
使用Vue、ElementUI实现登录注册,配置axios全局设置,解决CORS跨域问题
使用Vue、ElementUI实现登录注册,配置axios全局设置,解决CORS跨域问题
121 0
|
11月前
|
缓存 API
SAP 电商云 Spartacus UI 的 CORS 设置
SAP 电商云 Spartacus UI 的 CORS 设置
|
安全 中间件
koa2-cors设置允许指定单个域名、多个域名、所有域名跨域
在你koa项目入口文件中引入一个中间件koa2-cors,然后执行下它的cors()方法就完了,但考虑到安全性问题,我们上线后并不希望所有人可以去跨域访问接口,那么如何做?
|
JavaScript API Perl
关于SAP Commerce Cloud CORS policy的设置问题
关于SAP Commerce Cloud CORS policy的设置问题
145 0
关于SAP Commerce Cloud CORS policy的设置问题
|
存储 缓存 API
SAP Spartacus CORS 设置
SAP Spartacus CORS 设置
SAP Spartacus CORS 设置
|
14天前
|
安全
CORS 跨域资源共享的实现原理
CORS 跨域资源共享的实现原理