前段时间详细的学习了一下http相关的东西,特别是看了http权威指南,感觉收获良多,在未来的一段时间我将把自己所学到的相关东西分享出来,先捡重要的(我自认为的)来说。本章讲述同源策略,希望对大家有所帮助。
基本上每个从事过网络编程,接触过浏览器的程序员都知道浏览器的同源策略。但是深究一下就不一定有很多人知道这是个什么东西了,只是囫囵吞枣的知道不准非同域的请求,知道部分解决方法,例如jsonp啦,带有src的标签啦,ducument.domain之类的东西。但是具体这个东西怎么产生了,又是为什么会这样,不同源之间请求到底发生了什么事,等等这些问题就不是那么多人清楚了。本章会详细分析这些问题,讲述为什么会这样,为什么要这样做?做到授人以渔,当然本文纯属一家之言,参考了一些书和网络资料,甚至包含部分自行理解的,因此可能存在错误疏漏,殷切的希望您能帮我斧正,thx。
讲同源策略之前,还是照顾下一些初学者,把一些基本概念稍微提一下。
同源的概念:同源是指,域名,协议,端口都相同。
同源策略的概念呢?网上找了很多都没有直接定义什么是同源策略,只是讲了同源的概念,讲了同源策略能做什么,如:同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现(百度百科)。讲的东西含糊不清,难以理解,我这里就班门弄斧自己总结一下。
同源策略是指一个源的文档或者脚本不准操作其他源的资源。
我想此时此刻的你一定会有很多问题,觉得不科学,不对,为什么呢?我script从cdn上加载进来的jquery不是还是用的好好的,操作页面简直不要太顺畅,现在你给我说不准操作,我首先就不同意!请看下面这句话:现代浏览器在安全性和可用性之间选择了一个平衡点。在遵循同源策略的基础上,选择性地为同源策略“开放了后门”,例如img script style等标签,都允许垮域引用资源,严格说这都是不符合同源要求的。什么???浏览器自己搞的鬼,他们都是非主流,都是叛逆?这就要讲讲同源策略的来源了。
同源策略,它是由Netscape提出的一个著名的安全策略。现在所有支持JavaScript 的浏览器都会使用这个策略。啥意思呢?其实就是netscape提出来一个概念,然后各个浏览器厂商自行实现的一套东西,很明显大家都为了方便在这个基础上做了扩展,后来觉得这个扩展很好用,大家都接受,因此就成了默认的标准。叫什么来着,三人成虎。但是,这些也不是完全违背同源策略,只能是引用这些资源而已,并不能读取这些资源的内容。既做到了方便,又做到了相对的安全。不信?你可以使用ajax重新请求一下这个资源,看行不行。很明显请求不到吧,为什么?下面又要放大招了,又是自己一套东西!
ajax请求的资源默认是可以操作的,所以ajax必须严格遵守同源策略!
是的,你没有看错,又是我胡诌的一套东西,你心中有一万个问题想要扔给我,最简单一个就是,我大cors如何解释?如何解释?额,现在又必须讲一讲cors了。不过篇幅到现在为止已经很长了,我想很多看官老爷已经有点不太耐烦了,好吧,其实放了两次大招我也有点累了。这篇就先到这里吧,下篇接着讲,thx。