前端学习笔记-8.5同源策略

最初,它的含义是指:A网页设置的Cookie,B网页不能打开,除非这两个网页同源。

同源指的是:
协议相同,
域名相同,
端口相同。

同源政策的目的,是为了保证用户信息的安全,防止恶意的网站窃取数据。

随着互联网的发展,同源策略越来越严格,现在的同源指的是:
Cookie、LocalStorage 和 IndexDB 无法读取。
DOM 无法获得。
AJAX 请求不能发送。

Cookie
Cookie 是服务器写入浏览器的一小段信息,只有同源的网页才能共享。但是,两个网页一级域名相同,只是二级域名不同,浏览器允许通过设置document.domain共享 Cookie。

例子:
A网页是http://w1.example.com/a.html,
B网页是http://w2.example.com/b.html,
那么只要设置相同的document.domain,两个网页就可以共享Cookie。

document.domian = ‘example.com’;
document.cookie = “test1=hello”;
var allCookie = document.cookie;
这种方法只适用于 Cookie 和 iframe 窗口

本地存储:
Cookie:4k
localStorage:5M,永久性存储,
sessionStorage:5M,暂时性,用完即销毁
LocalStorage,SessionStorage用于Storage,
在HTML5中,新加入了一个localStorage特性,这个特性主要是用来作为本地存储来使用的,解决了cookie存储空间不足的问题(cookie中每条cookie的存储空间为4k),localStorage中一般浏览器支持的是5M大小,这个在不同的浏览器中localStorage会有所不同。IE8以上。

JSONP
JSONP,它有个限制,只能用GET请求,并且要求返回javascript。这种方式跨域实际上是利用了浏览器允许跨域引用javascript资源。
JSONP是服务器与客户端跨源通信的常用方法。最大特点就是简单适用,老式浏览器全部支持,服务器改造非常小。

它的基本思想是,网页通过添加一个script元素,向服务器请求JSON数据,这种做法不受同源政策限制;服务器收到请求后,将数据放在一个指定名字的回调函数里传回来。

首先,网页动态插入script元素,由它向跨源网址发出请求。

function addScriptTag(src) {
var script = document.createElement(‘script’);
script.setAttribute(“type”,“text/javascript”);
script.src = src;
document.body.appendChild(script);
}

window.onload = function () {
addScriptTag(‘http://example.com/ip?callback=foo’);
}

function foo(data) {
console.log('Your public IP address is: ’ + data.ip);
};
上面代码通过动态添加script元素,向服务器example.com发出请求。注意,该请求的查询字符串有一个callback参数,用来指定回调函数的名字,这对于JSONP是必需的。

服务器收到这个请求以后,会将数据放在回调函数的参数位置返回。

foo({
“ip”: “192.168.45.145”
});
由于script元素请求的脚本,直接作为代码运行。这时,只要浏览器定义了foo函数,该函数就会立即调用。作为参数的JSON数据被视为JavaScript对象,而不是字符串,因此避免了使用JSON.parse的步骤

猜你喜欢

转载自blog.csdn.net/qq_43000359/article/details/82918234