跨域访问
来源:互联网 发布:管家婆软件电话 编辑:程序博客网 时间:2024/05/16 11:50
1.同源定义
一般一个url为http://www.test.com/index.html
定义:同样的协议,域名(主机),端口,则为同源
栗子:http://store.company.com/dir/page.html 同源url
http://store.company.com/dir2/other.html
成功 http://store.company.com/dir/inner/another.html
成功 https://store.company.com/secure.html
失败协议不同http://store.company.com:81/dir/etc.html
失败端口不同http://news.company.com/dir/other.html
失败主机名不同浏览器的同源策略,限制了来自不同源的"document"或脚本,对当前"document"读取或设置某些属性。 从一个域上加载的脚本不允许访问另外一个域的文档属性。
在浏览器中,<script>、<img>、<iframe>、<link>等标签都可以加载跨域资源,而不受同源限制,但浏览器限制了JavaScript的权限使其不能读、写加载的内容。
另外同源策略只对网页的HTML文档做了限制,对加载的其他静态资源如javascript、css、图片等仍然认为属于同源。
2.跨域的几种方法
#1 JS
因为<script>的src是不受同源策略影响,可以直接获取外域的js内容。因此在这里作一些改变,即可获得对面的内容。
上面是简单的使用JS访问跨域,还可以利用jquery的$.getJson $.ajax等
#2 document.domain
这种方法只适用于主域相同,而子域不同的跨域。
也就是get.a.com和data.a.com的跨域问题.
解决方法很简单:
若get.a.com/get.html需要获取data.a.com/data.html的数据,
首先在get.html插入一个iframe,src指向data.a.com/data.html,
然后在data.html写上document.domain=’a.com’;
即可操纵data.html内的内容。
#3 url hash
通过url的hash来实现跨域。hash就是url#后面的内容
a.com/get.html需要获取b.com/data.html
首先在get.html建立一个iframe,src还是指向data.html,后面带上hash值实现传参。
另一端data.html根据获取的hash作出响应,自身也创建一个iframe,src指向a.com/proxy.html,并把响应数据添加到hash。
之后,a.com/proxy.html只需要修改在同一a.com父域的get.html的hash即可。
Proxy页面的作用:
由于get.html和data.html不在一个域上,所以不能修改location.hash值,
于是运用proxy.html,先跳到找个代理页面,
然后通过parent.parent.location.hash,也就是修改祖父,让get.html也得到响应。
#4 postMessage
html5的新方法postMessage()优雅地解决了跨域,也十分容易理解。
发送方调用postMessage()内容,接受方监听onmessage接受内容即可。
假设发送方为a.com/send.html,接受方为b.com/receive.html。
#5 CORS
以上5点都是前端实现的跨域,但是后台参与会让跨域更容易解决,也就是用CORS。
CORS是Cross-Origin Resource Sharing的简称,也就是跨域资源共享。它有多厉害?之前说JsonP只能get请求,但CORS则可以接受所有类型的http请求,然而CORS只有现代浏览器才支持。
在Java中,你只需要设置
response.setHeader("Access-Control-Allow-Origin", "*");
即可;
http://targetkiller.net/cross-domain/ 写得太好了,请参考
https://developer.mozilla.org/zh-CN/docs/Web/Security/Same-origin_policy
http://blog.csdn.net/shimiso/article/details/21830313
- Ajax访问/跨域访问WebService服务
- HTTP访问控制(CORS) 跨域访问
- sqlserver 跨域访问 链接访问
- WebResponse 跨域访问
- jsonp 跨域访问
- 跨域访问
- Ajax跨域访问
- javascript:跨域访问
- js跨域访问
- js 跨域访问
- js 跨域访问
- js 跨域访问
- JavaScript 跨域访问
- 跨域访问控制
- ajax跨域访问?
- javascript跨域访问
- Javascript跨域访问
- 跨域访问
- “神经猫”等HTML5游戏未来将何去何从?
- 前端开发在不久的将来定会成为主导
- 众多最常用的在线Web编辑器预览及下载 整理汇总
- PHP 6 的新特性
- SA、SD、SE 这三者的含义及区分
- 跨域访问
- 修改windows XP/2000/2003用缩略图方式浏览图片时的默认尺寸
- Jquery插件 - 可以随着滚动条的滚动而即时加载图片
- 使用CreateFile()打开COM10及以上串行口
- 原创,真正解决iframe高度自适应的问题.兼容各浏览器
- 用PHP的CURL写的一个采集Discuz的例子
- 一些使用jQuery開發的在線Web富文本編輯器
- C++中#define的使用方法
- Python中time模块详解(转)