今日学一招:关于JavaScript为何要限制跨域访问
来源:互联网 发布:tensorflow 安装 编辑:程序博客网 时间:2024/06/05 20:12
对于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
大神的解答
在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
参考来源:
今日学一招:关于JavaScript为何要限制跨域访问
http://www.lai18.com/content/407150.html
0 0
- 今日学一招:关于JavaScript为何要限制跨域访问
- 关于JavaScript为何要限制跨域访问
- 为什么浏览器要限制跨域访问?
- 不限制跨域访问
- ArcServer10.2 使用JavaScript API实现地图服务限制访问及跨域问题的解决
- 为何要学JavaScript
- 常用关于 JavaScript 中的跨域访问方法
- Javascript中关于跨域访问的学习笔记
- ajax跨域访问限制的突破
- javascript:跨域访问
- JavaScript 跨域访问
- javascript跨域访问
- Javascript跨域访问
- javascript跨域访问
- JavaScript跨域访问
- JavaScript跨域访问
- 关于跨域访问
- 安卓 4.4 为何要限制 SD 卡读写?
- 使用servlet实现简易上传文件(带进度条版本)
- hdu 2046 骨牌铺方格(简单dp)
- ubuntu的root用户登录登出及密码设置
- 关于win8下pip安装mysql找不到config-win.h文件的一种解决方案
- git add和git commit
- 今日学一招:关于JavaScript为何要限制跨域访问
- OC入门第一课
- Python程序执行原理+
- javascript函数声明提前的一个例子
- iOS的事件分发
- Object-C第一课,我们要注意到的小细节
- 怎么创建一个设备
- c语言 格式化文件输入输出
- POJ - 1061 青蛙的约会