浏览器同源与跨域问题总结

  最近工作中的项目需要通过浏览器ajax请求访问本地的一个http服务,不可避免遇到了跨域的问题,还要兼容IE,踩了不少坑,在这里作一个总结吧

1.浏览器同源策略

  跨域问题是由于浏览器的同源策略所引起的,浏览器同源策略在web应用中非常重要,没有它web的世界会一团糟

  URL由协议、域名、端口和路径组成,如果两个URL的协议、域名和端口相同,则表示他们同源。

  比较容易忽略的一点就是协议不同也会引发同源策略,httphttps是不同源的

  浏览器的同源策略就是,从一个源上加载的脚本不允许访问不同源的文档,这个有点抽象,具体体现在下面两个方面

  1.标签的同源策略

    我们知道通过标签加载资源是不会受到限制的,比如<script>加载cdn加速的js资源,<img>加载不同域的图片等,<iframe>加载其他域的html。

    似乎浏览器对于标签加载资源没有作同源策略。实际上标签的同源策略体现在浏览器限制了JavaScript的权限使其不能读、写加载的html文档。

    注意仅仅指的是html文档,具体而言指的是iframe加载的html文档,js无法访问其document。 而js,img等仍然认为是同源,不受访问限制。

  2.ajax同源策略

    浏览器发出的xmlhttprequest也存在同源的问题,不同源的访问会被限制,接下来将介绍这部分内容

2.Ajax跨域

  同源策略是web安全上的考虑,但是实际的工作中经常会碰到需要跨域的情况。主流的跨域方式有

  1.jsonp方式

  2.cros跨域同源

 

3.iframe跨域

  1.html5 postMessage方式

  2.window.name

 

 

  

  

posted on 2015-07-15 17:28  罗文兴  阅读(644)  评论(0编辑  收藏  举报