跨域问题实际是由同源策略衍生出的一个问题,当传输协议、域名、端口任一部分不一致时, 便会产生跨域问题,从而拒绝请求,但<img src=XXX> <link href=XXXXscript src=XXX>; 天然允许跨域加载资源。
解决方案有:
JSONP
1、 原理:利用<script>;标签没有跨域限制的漏洞,使得网页可以得到从其他来源动态产生 的JSON数据(前提是服务器支持)。
2、 优点:实现简单,兼容性好。
3、 缺点:仅支持get方法,容易受到XSS攻击。
C0RS
1、 原理:服务器端设置Access-Control-Allow-Origin以开启CORS。该属性表示哪些域名 可以访问资源,如设置通配符则表示所有网站均可访问。
2、 实现实例(express):
//app. js中设置
var app = express ();
//CORS 跨域
// CORS:设置允许跨域中间件
var allowCrossDomain = function(req, res, next) {
//设置允许跨域访问的URL(表示允许任意URL访问)
res. header("Access-Control-Allow-Origin", "
");
//设置允许跨域访问的请求头
res. header ("Access-Control-Al1ow-Headers",
"X-Requested-With,Origin,Content-Type.Accept,Authorization");
//设置允许跨域访问的请求类型
res. header("Access-Contro1-Al1ow-Methods", "PUT, POST,GET, DELETE,OPTIONS");
//设置允许服务器接收cookie
res. header(‘Access-Control-Allow-Credentials’, ‘true’);
next ();
};
app. use(allowCrossDomain);
//
Node中间件代理
原理:同源策略仅是浏览器需要遵循的策略,故搭建中间件服务器转发请求与响应,达到跨域 目的。
/* serverl. js 代理服务器(http://localhost: 3000) */
const http = require(‘http’)
//第一步:接受客户端请求
const server = http. createServer((request, response) = > {
//代理服务器,直接和浏览器直接交互,需要设置CORS的首部字段
response. writeHead(200, {
‘Access-Control-Allow-Origin’:,
‘Access-Control-Allow-Methods’: ‘,
‘Access-Control-Al1ow-Headers’: ‘Content-Type ‘
})
//第二步:将请求转发给服务器
const proxyRequest = http. request({
host: ‘127. 0. 0. 1’,
port: 4000,
url: ‘/’,
method: request. method,
headers: request. headers
}, serverResponse = > {
//第三步:收到服务器的响应
var body = ”
serverResponse. on(‘data’, chunk = > {
body += chunk
})
serverResponse. on(‘end’, () = > {
console. log(‘The data is ‘ + body)
//第四步:将响应结果转发给浏览器
response. end(body)
})
}).end 0
})
server.listen(3000, () = > {
console. log( ‘中间件服务器地址:http://localhost:3000’)
})
// server2. js(http://localhost:4000)
const http = require("http");
const data = {
title: "fontend",
password: "123456"
};
const server = http. createServer((request, response) = > {
if (request. url = "/") {
response. end(JSON. stringify(data));
}
});
server. listen(4000, () = > {
console. log("The server is running at http://localhost:4000");
});
nginx反向代理
1、 原理:类似Node中间件服务器,通过nginx代理服务器实现。
2、 实现方法:下载安装nginx,修改配置。

Was this helpful?

0 / 0

发表回复 0

Your email address will not be published.