关于跨域

跨域

说到跨域,不得不聊一下浏览器的“同源策略”。

浏览器安全的基石是"同源政策"(same-origin policy),1995年,同源政策由 Netscape 公司引入浏览器。目前,所有浏览器都实行这个政策。最初,它的含义是指,A网页设置的 Cookie,B网页不能打开,除非这两个网页"同源"。所谓"同源"指的是"三个相同":

协议相同 域名相同 端口相同

随着互联网的发展,"同源政策"越来越严格。目前,如果非同源,共有三种行为受到限制:

(1) Cookie、LocalStorage 和 IndexDB 无法读取。

(2) DOM 无法获得。

(3) AJAX 请求不能发送。

今天的主题是跨域所以只讲第三种行为。

跨域的原因:浏览器的原因:同源策源(服务器并没有限制不能访问)

火狐:

关于跨域_第1张图片

谷歌:

解决方案:

1 让浏览器不做校验(缺点:不可能让每个用户都使用这种方式打开浏览器)

使用前必须关闭所有谷歌浏览器窗口

Chrome --disable-web-security --user-data-dir 命令行打开浏览器(不使用安全策略)

关于跨域_第2张图片

2 规避‘同源策略’,不使用XHR请求,采用jsonp

关于跨域_第3张图片

使用jsonp后上面的type就会变成 script

callback=jQuery21404407734151639556_1442902171702&_=1442902171703
这些都是jquery默认生成的
&_=1442902171703 表示生成一个时间码有助于更新缓存

Jsonp的原理:

利用
并提供一个回调函数来接收数据(函数名可约定,或通过地址参数传递)。
第三方产生的响应为json数据的包装(故称之为jsonp,即json padding),形如:
callback({"name":"hax","gender":"Male"})
这样浏览器会调用callback函数,并传递解析后json对象作为参数。本站脚本可在callback函数里处理所传入的数据。

Jsonp在浏览器的具体表现

(1) :Web页面上调用js文件时不受是否跨域的影响(不仅如此,凡是拥有"src"这个属性的标签都拥有跨域的能力,比如

你可能感兴趣的:(nginx)