前端跨域问题解决Access to XMLHttpRequest at xxx from has been blocked by CORS policy

在一些前后端不同源的项目中,前端向后端发起请求时,有时候无法正常向后端请求到服务,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就行了。

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个错误一般是由于浏览器的同源策略引起的跨域问题。同源策略是浏览器的一种安全机制,它要求网页的源(包括协议、域名和端口)必须和请求的资源的源一致。当一个网页发起了跨域请求,浏览器会检查响应头中是否包含了"Access-Control-Allow-Origin"字段并且该字段的值与当前网页的源一致。如果不一致,浏览器就会拒绝这个请求,抛出类似于"Access to XMLHttpRequest at 'https://xx.cn' from origin 'http://localhost:8000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present"的错误。 [2] 解决这个问题的方法有多种,其中一种是在浏览器中添加一些参数来禁用安全策略,比如在Chrome浏览器中可以右键点击快捷方式,选择"属性",在目标字段的末尾添加"--disable-web-security --user-data-dir=D:\MyChromeDevUserData",然后重新启动浏览器。这种方法是最简单粗暴的解决方法,但是需要注意的是,这样做会降低浏览器的安全性,不建议在正式环境中使用。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Access to XMLHttpRequest at has been blocked by CORS policy: No ‘Access-Control-Allow-Origin‘ ...](https://blog.csdn.net/shidas/article/details/126039938)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* [Access to XMLHttpRequest at ‘xx‘ from origin ‘XXX‘ has been blocked by CORS policy: Cross origin...](https://blog.csdn.net/qq_40587195/article/details/127749122)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值