对跨域请求的理解——从反证法的角度来理解跨域
平时,我们从书籍上看到关于跨域请求的问题时,绝大多数作者只是给出“某某某不允许跨域操作”,但很少提及为什么不允许。其实可以从反证法的角度来看对跨域请求问题。你可以这样思考:
如果允许跨域请求,那么会发生什么?
下面举一例:
我们知道XMLHttpRequest是不允许跨域请求,为什么?
举个返例即可知若XMLHttpRequest允许跨域会发生多可怕的事。很多浏览器的插件是直接在当前文档里插入DOM及相关动态脚本的,若允许XMLHttpRequest跨域请求的话,那么对于一些恶意插件,其插入的动态脚本完成可以使用XMLHttpRequest将当前文档的相关隐私数据,或伪造表单将用户相关数据通过XMLHttpRequest提交到跨域的恶意服务器上。
这样讲可能有点空洞。下面举一个跨域请求的切实一点的例子:
1.打开itravel.smartcom.cc
2.在控制台上运行
$.get('http://www.google.com/ig/api?weather=%E6%B7%B1%E5%9C%B3&hl=zh-cn', function(res) {
}, 'xml');
浏览器会明确提示:
XMLHttpRequest cannot load http://www.google.com/ig/api?weather=%E6%B7%B1%E5%9C%B3&hl=zh-cn.Origin http://itravel.smartcom.ccis not allowed by Access-Control-Allow-Origin.
以上跨域请求只是为了测试,对于恶意请求,其完全有可能在请求体中塞入本文档中的隐私数据。
所以XMLHttpRequest是不允许跨域请求的。