关于JavaScript为何要限制跨域访问

对于JavaScript限制跨域访问的原因一直不明白,因为他给我的开发过程中带来不少的麻烦,也实在想不明白JavaScript限制跨域的作用,今天带着这个疑问到开元中国提问了,没想到一个大神的解答让我茅塞顿开啊。 

大神的解答  

在Firebug控制台中运行 
$.ajax('http://www.baidu.com/'); 
请求会被Firefox阻止并提示: 
已阻止交叉源请求:同源策略不允许读取  http://www.baidu.com/  上的远程资源。可以将资源移动到相同的域名上或者启用 CORS 来解决这个问题。 


由于浏览器实现的同源策略的限制,XmlHttpRequest只允许请求当前源(域名、协议、端口)的资源,所以AJAX是不允许跨域的。不过 像<script>,<link>,<img>,<iframe>这些标签是允许跨域的,但你并不能修 改这些资源,比如iframe里的内容。 

为什么浏览器要实现同源限制?我们举例说明:  

比如一个黑客,他利用iframe把真正的银行登录页面嵌到他的页面上,当你使用真实的用户名和密码登录时,如果没有同源限制,他的页面就可以通过 JavaScript读取到你的表单中输入的内容,这样用户名和密码就轻松到手了.又比如你登录了OSC,同时浏览了恶意网站,如果没有同源限制,该恶意 网站就可以构造AJAX请求频繁在OSC发广告帖. 

想必大家已经明白了吧,假如不阻止JavaScript的跨域访问那将发生多么危险的事情啊。 

但是有时候我们确实是要跨域访问的,我们要的是正常跨域访问,对于这个问题我们可以用JSONP的格式来实现跨域访问,但是这个访问必须是服务端返回一个回调函数,所以这种访问是基于访问者和被访问者直接的一种约定好的方式访问的,也就不存在上面的安全隐患了。 

原问题地址:  http://www.oschina.net/question/2321543_229731  
答疑人地址(感谢):  http://my.oschina.net/eechen
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值