前端跨域方法
来源:互联网 发布:java socket 广播 编辑:程序博客网 时间:2024/06/02 01:07
同源策略:它是由Netscape提出的一个著名的安全策略。现在所有支持JavaScript 的浏览器都会使用这个策略。所谓同源是指,域名,协议,端口相同。
跨域:跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制。
不受同源策略限制:①script标签的src属性;②img标签的src属性;③iframe标签的src属性;④link的href属性……
解决跨域的方法:①JSONP;②CORS(跨域资源共享);③window.name;④document.domain;⑤postMessage;⑥……
JSONP
原理:<script>
是可以跨域的,而且在跨域脚本中可以直接回调当前脚本的函数。
限制:需要创建一个DOM对象并且添加到DOM树,只能用于GET方法
function handle(res){ console.log(res);}var script = document.createElement('script');script.src = 'http://chunling.com/json/?callback=handle';document.body.insertBefore(script,document.body.fistChild);
CORS
原理:实现CORS通信的关键是服务器。只要服务器实现了CORS接口,就可以跨源通信。服务器设置Access-Control-Allow-OriginHTTP响应头之后,浏览器将会允许跨域请求。
限制:CORS需要浏览器和服务器同时支持。目前,所有浏览器都支持该功能,IE浏览器不能低于IE10。
window.name
原理:window对象有个name属性,该属性有个特征:即在一个窗口(window)的生命周期内,窗口载入的所有的页面都是共享一个window.name的,每个页面对window.name都有读写的权限,window.name是持久存在一个窗口载入过的所有页面中的,并不会因新页面的载入而进行重置。
限制:window.name的值只能是字符串的形式,这个字符串的大小最大能允许2M左右,具体取决于不同的浏览器,但一般是够用了。
a.html页面
<script> window.name = "{'name':'Jack','age':18}";</script>
另一个域的b.html页面
<script> console.log(window.name);</script>
document.domain
原理:相同主域名下不同子域页面,通过设置document.domain让他们同域
限制:这两个域名必须属于同一个基础域名,而且所用的协议,端口都要一致,否则无法利用document.domain进行跨域,即只适用于跨子域,不适用于跨父域
http://qingyu.com/example
http://wu.qingyu.com/example
两个页面跨域,需同时设置document.domain = ‘qingyu.com’;
postMessage
原理:HTML5允许窗口之间发送消息
限制:浏览器需要支持HTML5,获取窗口句柄后才能相互通信
不同与的a与b页面
a页面
<script> function onload(){ var iframe = document.getElementById('iframe'); var win = iframe.contentWindow; win.postMessage('我是来自页面a的信息','*'); }</script><iframe id="iframe" src="b页面" onload="onload()"><iframe/>
b页面
<script> window.onmessage = function(e){ e = e || event; console.log(e.data); }</script>
- 前端跨域方法
- 前端跨域处理方法
- 前端跨域html5方法
- 解决前端跨域方法
- 前端跨域的各种方法
- 【前端学习笔记】原生Javascript中通过JSONP(前端常用方法)进行跨域
- 深入理解前端跨域方法和原理
- 深入理解前端跨域方法和原理
- 前端跨域杂谈
- 前端跨域解决方法
- 前端跨域整理
- 前端跨域整理
- 前端跨域解决
- 前端跨域问题
- 前端跨域详解
- 前端跨域问题
- 前端跨域
- 前端跨域问题
- HOWTO Build an RT-application
- tca9539
- 11个强大的Visual Studio调试小技巧
- HTTP,HTTPS和HSTS详解
- QBC离线条件查询。JPA不能使用。
- 前端跨域方法
- Tesseract 进行图像识别
- 神经网络焦点问题的解决方案
- Java字串与整数转换问题
- 操作系统面试笔试题
- 第八节第三大特性多态
- iOS C语言 inf和nan 打印进度是inf
- Python3.5——迭代器与生成器(下)
- STL学习入门