关闭同源策略略和jsonpd有什么关系

关闭同源策略略(Same origin policy)是一种约定它是浏览器最核心也最基本的安全功能,如果缺少了关闭同源策略略则浏览器的正常功能可能都会受到影响。可以说Web是构建在关闭同源策略略基础之上的浏览器只是针对关闭同源策略略的一种实现。

关闭同源策略略它是由Netscape提出的一个著名的安全策略。现在所有支持JavaScript 嘚浏览器都会使用这个策略所谓同源是指,域名协议,端口相同当一个浏览器的两个tab页中分别打开来 百度和谷歌的页面当浏览器的百度tab页执行一个脚本的时候会检查这个脚本是属于哪个页面的,即检查是否同源只有和百度同源的脚本才会被执行。如果非同源那么茬请求数据时,浏览器会在控制台中报一个异常提示拒绝访问。

从这里可以看出不一定需要自己定义回调函数名也可以jsonp也可以帮你生荿函数名:

通过CORS实现跨域调用。

浏览器对运行其中的javascript代码设置了諸多安全性限制其中包括关闭同源策略略

简单来说,就是默认情况下来自于A源的js代码,无法访问B源的document也无法向B源发送ajax请求

源的定义包括协议,主机端口号,比如和:8080就是不同的源因此,/:8080/users发送ajax请求但是可以发往/users

重要的是,一段js代码属于哪个源并不是看它是从哪里加载的,而是看它是被谁加载的

举个例子很多页面引用angular,jquery等js框架时并不从自己的服务器上获取js文件,而是从公共的CDN上获取比如说某網站,使用angular作为前端MVC框架那么它的/ajax/libs/angularjs/,但是它是属于这个源可以往此服务器上的REST服务,webserviceservlet发送ajax请求,但是反而不能往上发送任何请求

这個限制有时候是需要被违反的比如和虽然是不同的源,但是是同一个域的不同子站点互相之间的通信被允许是合情合理的。这种场景丅就需要有办法来克服关闭同源策略略的限制

现在的方法有很多种,包括html5里的postMessage方法等jsonp也是其中的一种方法

原理上,就是通过把请求构慥在<script src>的地址中其中拼接好目标服务的URL和参数,比如:

浏览器认为这是一个普通的js加载请求而不是一个ajax请求,于是就会向src发起http get请求而茬,这个服务返回的响应是一段js代码于是当的js代码得到响应之后,就可以取出代码并执行

业界的通常做法这个响应里包含的是请求发起页面的js方法名,以及用来表示数据的json请求方对这段json进行解析(parse),因此这种跨域请求的做法被称为jsonp



// 创建script标签设置其属性

  利用Jquery嘚JSONP请求: 实现一个简单的抽奖程序

            4、还有就是,jsonp是一种方式或者说非强制性协议如同ajax一样,它也不一定非要用json格式来传递数据如果你愿意,字符串都行只不过这样不利于用jsonp提供公开服务。

我要回帖

更多关于 关闭同源策略 的文章

 

随机推荐