📅  最后修改于: 2023-12-03 15:09:23.080000             🧑  作者: Mango
同源策略是浏览器中的一个安全机制,它限制了一个源中的资源能否被另一个源访问。源(origin)是协议(protocol)、主机名(hostname)和端口(port)的组合,只有协议、主机名和端口完全一致,才能算是同一个Origin。
简单来说,当浏览器发起一个跨域请求时,同源策略会限制它是否能够访问响应的数据。如果不符合同源策略,则会出现跨域问题。
同源策略的主要作用是保护用户的信息安全,防止恶意网站通过跨域攻击窃取数据。
例如,假设你在A网站中输入了用户名和密码,A网站通过Ajax请求B网站的数据,如果B网站没有限制跨域请求并返回响应,那么B网站的数据会被暴露给A网站,这就会导致安全问题。
因此,同源策略的作用就是限制Cookie、LocalStorage和IndexDB等客户端存储的读写操作,防止其他的网站篡改你的数据和Cookie。
JSONP是一种通过script标签实现跨域的技术,其原理是利用script标签没有同源策略限制的漏洞。
通过script标签的src属性请求一个相对路径,后端返回一个JavaScript回调函数的调用。
function jsonp(url, callback) {
const script = document.createElement('script');
script.type = 'text/javascript';
script.src = url + '?callback=' + callback;
document.head.appendChild(script);
}
jsonp('http://www.example.com/jsonp', 'jsonpCallback');
在后端接收到请求并处理好数据后,返回给前端调用函数的代码。
jsonpCallback({"success": true, "data": {"name": "Tom", "age": 20}});
CORS是一种新型的跨域解决方案,它是一种服务器端改写的技术,可以让服务端决定是否允许跨域请求。
在HTTP请求报文中增加Origin字段,后端返回响应报文的时候增加Access-Control-Allow-Origin头部,只有符合要求的请求才会被允许访问。
app.use(function(req, res, next) {
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
next();
});
通过代理服务器转发信息可以规避同源策略的限制。使用代理服务器,可以将前端请求发送到代理服务器,代理服务器再将请求发送到真正的服务器,获取到数据后返回给前端。
app.use('/api', proxy('http://www.example.com'));
同源策略是浏览器的一项安全机制,主要是为了保证用户的信息安全。如果不遵守同源策略,可能会引起一些安全问题,例如Cookie被盗取等情况。
所以在开发和测试过程中,必须注重同源策略问题,将相应的跨域问题解决掉,保证用户的信息安全。