跨域问题

1、什么跨域?

跨域指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制。

同源策略:是指协议、域名、端口都要相同,只要三者有一个不同就会产生跨域。
例如:a页面想获取b页面资源,如果a、b页面的协议、域名、端口、子域名有不同,所进行的访问行为都是跨域的,而浏览器为了安全问题一般都限制了跨域访问,也就是不允许跨域请求资源。注意:跨域限制访问,事实上是浏览器的限制策略,理解这一点很重要。

2、三种方式解决跨域问题

JSONP(需前后端配合来完成)
前端使用script标签来调用接口。
后端需要配合使用res.jsonp()返回数据。
JSONP只适用于GET请求,POST请求用不了。

// 第一种写法

<script>
	function handleData(res) {console.log('res', res)}
</script>
<script src="http://localhost:8001/user/list?callback=handleData"></script>

// 第二种写法

<script>
	function handleData(res) {console.log('res', res)}

	var oScript = document.createElement('script')
	oScript.src = "http://localhost:8001/user/list?callback=handleData"
	oScript.type = "text/javascript"
	document.body.appendChild(oScript)
</script>
	代理:使用http-proxy-middleware中间件来实现代理
	在Node.js中使用http-proxy-middleware来进行接口代理
	后端还可以使用Nginx进行接口代理
	前端可以使用Webpack进行接口代理
	const app = require('express')()
	const {createProxyMiddleware} = require('http-proxy-middleware')
	
	app.use('/api', createProxyMiddleware({
		target: 'http://10.36.136.170:9999',
		changeOrigin: true
	}))

CORS

	只需要后端工程师来处理
	const app = require('express')()
	//设置跨域访问(前端需要清除缓存后,才能再测试跨域)
	app.all('*', function(req, res, next) {
	    res.header("Access-Control-Allow-Origin", "*");
	    res.header("Access-Control-Allow-Headers", "X-Requested-With");
	    res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");
	    res.header("X-Powered-By",' 3.2.1')
	    res.header("Content-Type", "application/json;charset=utf-8");
	    next();
	});
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值