vue axios Response to preflight request doesn‘t pass access control check: No ‘Access-Control-Allow-

Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

请求返回状态码为 302 not found.

原来的老前端是Ajax,所以没事。

调试新前端的时候就出了这个问题,本来以为是跨域,但并不是,对比了下请求头。。

axiosRequest Headers

老前端的Ajax

没错,就是少了这一句

X-Requested-With: XMLHttpRequest

这是为什么呢?

后端服务会根据这个值判断请求的类型,没有这个值,服务端可能会当做页面请求,或者不处理。

如:

if (request.getHeader("x-requested-with") != null 
&& request.getHeader("x-requested-with").equalsIgnoreCase("XMLHttpRequest")) { 
out.print("该请求是 AJAX 异步HTTP请求。"); 
}else{ 
out.print("该请求是传统的 同步HTTP请求。"); 
}

跨域问题是由于浏览器的同源策略导致的,同源策略要求网页只能访问与其来源相同的资源。当一个网页向不同源的服务器发送请求时,浏览器会进行跨域检查,如果服务器没有正确配置跨域访问的响应头,就会出现"Response to preflight request doesn’t pass access control check: NoAccess-Control-Allow-Origin’ header is present on the requested resource"的错误。 解决这个问题的方法有多种,下面是两种常见的解决方案: 1. 在服务器端配置响应头信息,允许跨域访问。在服务器端的响应头中添加"Access-Control-Allow-Origin"字段,并设置为允许访问的域名或"*"(表示允许任意域名访问)。 示例代码如下(以Node.js为例): ```javascript // 设置允许跨域访问的响应头 res.setHeader('Access-Control-Allow-Origin', '*'); ``` 2. 使用代理服务器进行请求转发。在项目中配置一个代理服务器,将跨域请求转发到目标服务器,这样就可以绕过浏览器的同源策略限制。 示例代码如下(以Vue.js为例): ```javascript // vue.config.js module.exports = { devServer: { proxy: { '/api': { target: 'http://example.com', // 目标服务器地址 changeOrigin: true, // 允许跨域 pathRewrite: { '^/api': '' // 将请求路径中的/api前缀去掉 } } } } }; ``` 这样,当你在前端代码中发送请求到"/api"路径时,代理服务器会将请求转发到目标服务器,并将响应返回给前端,从而解决跨域问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值