为什么浏览器不能跨域

转载 2015年07月08日 13:31:40

为什么浏览器不能跨域

 现在很多人特别是前端开发人员,在ajax请求,XMLHttpRequest的过程中会碰到一个问题,那就是跨域请求:

当我们javaScript脚本试图跨域访问时,浏览器会告诉你类似于No 'Access-Control-Allow-Origin' header is present on the requested resource.的消息。

可是我有时候又有跨域请求的强烈需求,比如需要去别的网站抓取一些数据(当然现在有很多方法来支持跨域,但这不是本文要讲的内容)。原来这是浏览器的一个策略----“同源策略”

1. 什么是同源策略(Same Origin Policy)?

所谓同源策略,它是浏览器的一种最核心最基本的安全策略。它对来至不同源的文档或这脚本对当前文档的读写操作做了限制。

为什么要有这个策略,想必你已经知道,那就是因为保证用户的信息安全。

2. 假如没有同源策略

假设现在有a.com和b.com两个域,如果没有这一安全策略,那么当用户在访问a.com时,a.com的一段脚本就可以在不加载b.com的页面而随意修改或者获取b.com上面的内容。这样将会导致b.com页面的页面发生混乱,甚至信息被获取,包括服务器端发来的session。这样的话,我们的web世界将是一片混乱。也是因为浏览器的同源策略,保证来至不同源的对象不会互相干扰,保证了我们访问页面最基本的安全。

3. 什么是跨域?

访问同源的资源是被浏览器允许的,但是如果访问不同源的资源,浏览器默认是不允许的。访问不同源的资源那就是我们所说的跨域

图片来源:http://www.cnblogs.com/rainman/archive/2011/02/20/1959325.html

从表中可以看出域名,子域名,端口号,协议不同都属于不同源,当脚本被认为是来至不同源时,均被浏览器拒绝请求。

4. src可以跨域

在这里需要注意的是,文档中的所有带“src”属性的标签都可以跨域加载资源,而不受同源策略的限制。

如<script>、<img>、<iframe>、<link>等。如果你在页面定义了这些标签,在页面加载事都对不同源的资源发起了一次GET请求。但是通过src加载的资源,浏览器限制了脚本对其返回的内容无法读写。特别是在ajax请求的时候,特别要注意XMLHttpRequest的时候是无法跨域访问的。

5. 注意

当我们b.com在页面加载不同源的资源时 <script src='a.com/a.js'></script> ,对于页面来说,a.js是运行在b.com上的,因此对于当前页面来说,a.js的源(Origin)是b.com而不是a.com。

因此页面内存放的资源的域a.com并不重要,重要的是加载资源的页面所在的域b.com

开源android浏览器,访问跨域网页

  • 2017年03月26日 12:06
  • 5.92MB
  • 下载

记一次iphone 微信内置浏览器跨域无法获取cookie问题的解决方法

记录了针对微信IOS客户端无法进行jsonp跨域写cookie值问题的一次解决方法。但未真正解决该问题,只是比较取巧的解决了由该问题引起的一个无法获取登录态的Bug。...

浏览器和服务器实现跨域(CORS)判定的原理

前端对Cross-Origin Resource Sharing 问题(CORS,中文又称'跨域')应该很熟悉了。众所周知出于安全的考虑,浏览器有个同源策略,对于不同源的站点之间的相互请求会做限制(跨...

浏览器拦截跨域请求处理方法(同源策略不允许读取服务器远程资源)

如题目所示,当浏览器进行跨域请求时,会出现跨域问题。该问题在 Firefox 中会报错:已拦截跨源请求:同源策略禁止读取位于 http://XXXX/x 的远程资源。(原因:CORS 头缺少 'Acc...

IE7+浏览器下XMLHttpRequest跨域请求安全配置

IE7+浏览器已经开始支持XMLHttpRequest对象,当使用XMLHttpRequest请求不同源的文件(不同域名的页面),和浏览器是否启用安全-》internet区域的“通过域访问数据源”有关...
  • bytxl
  • bytxl
  • 2015年03月10日 15:43
  • 1078

vue2学习计划1-2 浏览器跨域问题

最近学习vue2,对网上的看到的内容和自己看到vue组件源码,进行记录。 过去跨域都是用JSONP, window.name,postMessage() 等方法模拟,但都不是很纯粹的AJAX解决方...

浅谈浏览器端JavaScript跨域解决方法

由于安全的原因,浏览器做了很多方面的工作,由此也就引入了一系列的跨域问题,需要注意的是: 跨域并非浏览器限制了发起跨站请求,而是跨站请求可以正常发起,但是返回结果被浏览器拦截了。最好的例子是 c...

[Java面试十]浏览器跨域问题

此块内容参考Ajax文档部分。 主要复习内容:     1.JavaScript核心对象     2.浏览器BOM对象      3.文档对象模型DOM      4.常见事件     ...

浏览器和服务器实现跨域(CORS)判定的原理

前端对Cross-Origin Resource Sharing 问题(CORS,中文又称'跨域')应该很熟悉了。众所周知出于安全的考虑,浏览器有个同源策略,对于不同源的站点之间的相互请求会做限制(跨...

chrome浏览器的跨域设置——包括版本49前后两种设置

转自:http://www.cnblogs.com/laden666666/p/5544572.html 做前后分离的webapp开发的时候,出于一些原因往往需要将浏览器设置成支持跨域的模式...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:为什么浏览器不能跨域
举报原因:
原因补充:

(最多只允许输入30个字)