JS的跨域问题
1、什么是跨域?
跨域问题是由于javascript语言安全限制中的同源策略造成的。
2、什么是同源策略:
同源策略是指一段脚本只能读取来自同一来源的窗口和文档的属性,这里的同一来源指的是主机名、协议和端口号的组合。不同源的‘document’或脚本在没有明确授权的情况下,不能读写对方的资源。
同域要求两个站点同协议,同域名,同端口号。
对于javascript来说,当javascript被浏览器认为来自不同源时,请求被拒绝。注意:对当前页面来说,js文件存放的域并不重要,重要的是加载js的页面所在的域是什么。例如:在a.com通过<script src=http://b.com/b.js></script>加载了b.com下的b.js。但b.js是运行在a.com页面中,因此对于当前打开的页面(a.com)来说,b.js的Origin(源)是a.com。
3.跨域加载资源
在浏览器中<script>、<img>、<iframe>、<link>等标签都可以跨域加载资源,而不受同源策略的限制。这些带“src”属性的标签在每次加载时,实际上是由浏览器发起了一次GET请求。不同于XMLHttpRequest的是,通过src加载的资源,浏览器限制了Javascript的权限,使其不能读、写返回内容。
XMLHttpRequest受到同源策略的约束,不能跨域访问资源。但随着跨域请求的需求越来越迫切,W3C标准制定了XMLHttpRequest跨域访问标准:它需要通过目标域返回的HTTP头来授权是否允许跨域行为。这一跨域方案的安全基础是信任“Javascript无法控制该HTTP头”。
存在的问题:
(1)安全性:当一个站点被攻击之后,另一个也会引起安全漏洞。
(2)当页面中有多个iframe时,要想能够操作所有的iframe,必须都设置相同的domain。
2.基于script标签实现跨域
这样通过动态创建script标签就可以加载其它域的js文件,然后通过本页面就可以调用加载后js文件的函数,这样做的缺陷就是:只能加载js文件,jsonp便是通过这种方式实现的,jsonp通过向其它域传入一个callback参数,通过其他域的后台将callback参数值和json串包装成javascript函数返回,因为是通过script标签发出的请求,浏览器会将返回来的字符串按照javascript进行解析执行,实现了域与域之间的数据传输。
jquery中对jsonp的支持也是基于此方案。
3. 使用HTML5 postMessage ( 跨文档消息传输Cross Document Messaging)
postMessage是通信对象的一个方法,所以向iframe通信,就是iframe对象调用postMessage方法。
4. 使用www.corsproxy.com 或
https://crossorigin.me/ 等跨域代理
JS的跨域问题的更多相关文章
- js执行跨域请求
//js执行跨域请求 var _script = document.createElement('script'); _script.type = "text/javascript" ...
- js调用跨域
web aapi 初体验 解决js调用跨域问题 跨域界定 常见跨域: 同IP不同端口: http:IP:8001/api/user http:IP:8002/api/user 不同IP不同 ...
- js&jquery跨域详解jsonp,jquery并发大量请求丢失回调bug
URL 说明 是否允许通信 http://www.a.com/a.js http://www.a.com/b.js 同一域名下 允许 http://www.a.com/lab/a.js http:/ ...
- react-native debug js remotely跨域问题
react-native debug js remotely跨域问题 我们在安卓真机上调试react-native时,启用debug js remotely的时候,会出现跨域问题.这个时候我们只需要一 ...
- JS JSOP跨域请求实例详解
JSONP(JSON with Padding)是JSON的一种“使用模式”,可用于解决主流浏览器的跨域数据访问的问题.这篇文章主要介绍了JS JSOP跨域请求实例详解的相关资料,需要的朋友可以参考下 ...
- JS Ajax跨域访问
js ajax跨域访问报"No 'Access-Control-Allow-Origin' header is present on the requested resource 如果请求的 ...
- js原生跨域--用script标签实现
刚刚从培训班学习完,总想写一下东西,自从进入了这个院子,每次出现问题,总是能找到一些答案,给我一些帮助. 作为新手,就写一下简单的吧,院子里面有很多大牛, 说句实话,他们的很多代码我都看不懂. 我就写 ...
- 后台访问 JS解决跨域问题
今天看了看以前做的一个小项目(其实就是一个页面),分享一下当时解决跨域问题的: 背景:公司把项目部署在多台服务器上,防止一台服务器崩溃后,其他的可以继续访问,对应本公司来说,某台服务器出问题后,技术人 ...
- 【js跨域】js实现跨域访问的几种方式
这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被 ...
- 如何处理js的跨域问题
在bill.mail.10086.cn域内访问smsrebuild1.mail.10086.cn下的接口出现“阻止跨域源请求” 例如: URL 说明 是否允许通信 http://www.a.com/a ...
随机推荐
- 二模 (9)day1
第一题: 题目大意: 给出一个n位01串,要么不动它,要么把它删掉一个字符,要么插入一个字符(0或1),要么把一个1变成0,.使得有1的位置号的总和是n+1的倍数,或者是0. 解题过程: 1.直接枚举 ...
- inoic是什么
本篇只侧重框架提供的功能和能力的研究,请关注后续实际部署使用体验. 一.inoic是什么? inoic是一个可以使用Web技术以hybird方式开发移动app的前端开源框架. 二.inoic框架特点 ...
- NOIP 2013 提高组 day2 积木大赛
积木大赛 描述 春春幼儿园举办了一年一度的“积木大赛”.今年比赛的内容是搭建一座宽度为 n 的大厦,大厦可以看成由 n 块宽度为1的积木组成,第
- Windows任务计划
任务计划,可以将任何脚本.程序或文档安排在某个时间运行.“任务计划”在每次启动windows系统的时候自动启动(默认Task Scheduler服务是开启的)并在后台运行.使用“任务计划”可以完成以下 ...
- HDU 5439 Aggregated Counting
题目大意: 由1开始不断往数组中添加数 就是按照当前所在位置所在的数表示的个数添加这个数目的数 1 2 2 3 3 后面因为要填4,而4号位置为3,说明之后要填3个4 问题就是给定一个n,找到n出现的 ...
- Line计划今年全面进军中国市场:建立本地团队
北京时间6月13日下午消息,<华尔街日报>报道称,移动消息应用Line计划于今年晚些时候进军中国市场.Line将在中国建立本地团队,开发内容和功能,从而进一步开拓中国这一全球最大的移动市场 ...
- julia文件合并排序.jl
julia文件合并排序.jl """ julia文件合并排序.jl http://bbs.bathome.net/thread-39841-1-1.html 2016年3 ...
- 【python】list。列表
列表 list 特点:有序,支持不同类型的元素在一个列表中,可变(使用sort方法排序,影响到的是列表自身而不是创建新的列表——这与字符串不同,所以说字符串是不可变的) 在python中列表也是对象, ...
- windows下将磁盘脱机,并在"我的电脑"下显示
方案一: .右键单击"我的电脑". 2.打开:管理-磁盘管理. 3.在右边出现的磁盘分区里,你想隐藏的分区上右键单击“更改驱动器名和路径”. 4.出现一个对话框,点击“删除”. 5 ...
- BigBlueButton的安装
下来VM文件,打开系统后 sudo apt-get updatesudo apt-get upgradesudo apt-get dist-upgrade sudo apt-get install b ...