前端跨域问题解决Access to XMLHttpRequest at xxx from has been blocked by CORS policy
创始人
2024-11-14 14:05:05

在一些前后端不同源的项目中,前端向后端发起请求时,有时候无法正常向后端请求到服务,F12查看控制台会发现报错Access to XMLHttpRequest at 'xxx' from origin 'xxx' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.而无法正常提供服务。

这是由于所有使用JavaScript的浏览器都会支持同源策略。同源策略即指域名/协议/端口号相同。只要有一个不同,就会当作跨域请求。 此时还有浏览器同源策略的保护,是防止不同源(域、协议或端口)的网页之间进行恶意操作。所以综上,前端后端处在不同的域时就会报该错误。

解决方法为:

1.一种是让后端接口里添加如下两句代码:

header('Access-Control-Allow-Origin:*');//允许所有来源访问  header('Access-Control-Allow-Method:POST,GET');//允许访问的方式 

2.在前端框架index.js添加代理:

如果使用vue-cli脚手架创建的项目,找到config文件夹下的index.js文件。
找到dev下的proxyTable {}

举个例子,如果请求接口为http://www.baidu.com/user/info/list,请求头为http://www.baidu.com/,那么就添加

"/api": { 	target: "http://www.baidu.com/", 	changeOrigin: true, } 

然后找到请求页面,在axios的请求接口里面只写/user/info/list就行了。

3.vue3在项目根目录下新建vue.config.js文件,在该文件内新增如下配置:

module.exports = {     devServer: {         open: true,         host: 'localhost',         port: 8080,         proxy: { 			//这个意思是每一个接口只要匹配到这种开头的接口,就走当前代理配置             '/api': {    //1 				// 意思是目标地址,你请求谁报跨域了,你就把谁放这                 target: 'http://www.baidu.com/user/info/list',    //2                 changOrigin: true, 				//pathRewrite意思是重写地址,这个就是把代理后请求的地址中匹配替换成==> ""空, 				//当实际需要请求的路径里面没有”/api“时. 就需要 pathRewrite,用’’^/api’’:’’, 把’/api’去掉, 这样既能有正确标识, 又能在请求到正确的路径                 pathRewrite: {    //3                     '^/api': ''                 }             }         }     } } 

然后找到请求页面,在axios的请求接口里面只写/api就行了。

相关内容

热门资讯

裸辞做“一人公司”,我后悔了 去年这个时候,一位以色列程序员正在东南亚旅行。他顺手把一个在脑子里转了很久的想法做成了产品,一个让任...
南京建成国内首个Pre-6G试... 4月21日,2026全球6G技术与产业生态大会在南京开幕。全息互动技术展台前,一名远在北京的工作人员...
超梵求职受邀参加“2025抖音... 超梵求职受邀参加“2025抖音巨量引擎成人教育行业生态大会”,探讨分享优质内容传播,服务万千学员。 ...
摩托罗拉Razr 2026(R... IT之家 4 月 22 日消息,摩托罗拉宣布新一代 Razr 折叠手机将于 4 月 29 日在美国发...
库克卸任,特纳斯领航:苹果新纪... 苹果首席执行官蒂姆·库克将卸任,硬件工程主管约翰·特纳斯将接任,苹果公司今天宣布此事。 库克将在夏季...