布吕马是我在日常生活复试中时常会问及的难题,这词在后端界再次出现的振幅相当可观,主要就其原因却是虽然安全可靠管制(相混思路, 即JavaScript或Cookie根本无法出访草同域下的文本),即使他们在日常生活的工程项目合作开发时能无可避免的须要展开布吕马操作方式,因此布吕马潜能也称得上后端技师的底子众所周知。
和绝大多数布吕马的软件系统那样,JSONP 也是我的优先选择,不过某日 PM 的市场需求变了,某机能须要换成全力支持 POST,即使数据传输的信息量较为大,GET 方式不乐意。因此提心吊胆了下闻名于世多时的CORS(布吕马数据共享,Cross-Origin Resource Sharing),那边该文也是提心吊胆前夕的展毛与归纳。
简述
CORS 能做甚么?
恒定采用 AJAX 会须要恒定考量布吕马难题,因此了不起的合作开发人员们又提心吊胆出了一连串布吕马难题的软件系统,如 JSONP、flash、ifame、xhr2之类。 责任编辑如是说的 CORS 是两套 AJAX 布吕马难题的软件系统。
CORS 的基本原理
CORS 表述一类布吕马出访的监督机制,能让 AJAX 同时实现布吕马出访。CORS 容许两个域上的应用软体向另两个域递交布吕马 AJAX 允诺。同时实现此机能较为简单,只需由服务器端两个积极响应file方可。
CORS 应用程序全力支持情形
如下表所示图:


喜闻乐见、普大喜奔的全力支持情形,尤其是在移动终端上,除了 opera Mini,PC 上的现代应用程序都能友好的全力支持,除了 IE9-,不过后端技师对这种情形早应该习惯了。
CORS 启航
假设他们页面或者应用已在http://www.test1.com上了,而他们打算从http://www.test2.com允诺提取数据。一般情形下,如果他们直接采用 AJAX 来请求将会失败,应用程序也会返回“源不匹配”的错误,”布吕马“也就以此由来。
利用 CORS,http://www.test2.com只需添加两个file,就能容许来自http://www.test1.com的请求,下图是我在 PHP 中的 hander() 设置,* 号表示容许任何域向他们的服务端递交允诺:

也能设置指定的域名,如域名http://www.test2.com,那么就容许来自这个域名的允诺:

当前我设置的 header 为 *,任意两个允诺过来之后服务端他们都能展开处理&积极响应,那么在调试工具中能看到其头信息设置,其中见红框中有一项信息是 Access-Control-Allow-Origin:*,表示他们已经启用 CORS,如下表所示图。

简单的两个 header 设置,两个全力支持布吕马 & POST 允诺的 server 就完成了,当然如果没有开启 CORS 必定失败的啦,如下表所示图:

难题 & 小结
刚刚说到的兼容性。CORS 是 W3C 中一项较新的方案,因此部分应用程序还没有对其展开全力支持或者完美全力支持,详情可移至http://www.w3.org/TR/cors/
安全可靠难题。CORS 提供了一类跨域允诺方案,但没有为安全可靠出访提供足够的保障监督机制,如果你须要信息的绝对安全可靠,不要依赖 CORS 当中的权管制度,应当采用更多其它的措施来保障,比如 OAuth2。自认为的 cors 采用场景: