关于JavaScript为何要限制跨域访问
来源:互联网 发布:淘宝新势力周从哪里进 编辑:程序博客网 时间:2024/05/16 09:15
对于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
0 0
- 关于JavaScript为何要限制跨域访问
- 今日学一招:关于JavaScript为何要限制跨域访问
- 为什么浏览器要限制跨域访问?
- 不限制跨域访问
- ArcServer10.2 使用JavaScript API实现地图服务限制访问及跨域问题的解决
- 为何要学JavaScript
- 常用关于 JavaScript 中的跨域访问方法
- Javascript中关于跨域访问的学习笔记
- ajax跨域访问限制的突破
- javascript:跨域访问
- JavaScript 跨域访问
- javascript跨域访问
- Javascript跨域访问
- javascript跨域访问
- JavaScript跨域访问
- JavaScript跨域访问
- 关于跨域访问
- 安卓 4.4 为何要限制 SD 卡读写?
- Oracle EBS 开发如何获得并发请求REQUEST ID
- MySql大数据高并发处理
- java.lang.IllegalStateException: Cannot execute task: the task has already been executed (a task can
- 音视频聊天开发: 7 Android下ffmpeg+x264编译
- 昕音乐网全套模板
- 关于JavaScript为何要限制跨域访问
- Java NIO原理图文分析及代码实现 综合多个文章
- 英文外贸商城及企业展示网站
- Swift字符串与字符基本用法
- java 获取微信服务器ip
- 简繁体字在线转换器源代码中对应的data.txt文件
- Android 开发 之 JNI入门 - NDK从入门到精通
- 中国电信武汉翼天堂手机销售门户
- hihoCoder 1076 与链 (数位dp)