- CORS的意义:在不同domain之间共享数据
- 通过在请求中附带登陆token实现登陆过一次后,就可以免登陆的功能
- 如果有恶意网站使用一些特殊手段骗取浏览器把本来只会发给其他网站的token也发给恶意网站了。这下恶意网站就可以使用token以用户的身份登陆了。(Cross-site request forgery)
- 为了防止这种行为,浏览器一般只允许相同demain内的web相互请求数据
- 但实际情况这是不现实的,一个页面的所有数据不可能都存在一个domain下。比如第三方的api
- 于是才有了CORS跨域功能出现。就是指怎么在保证安全的情况下,一个页面可以从不同domain中获取数据。
- 怎么实现:
- CORS必须要server配合才能实现。
- 原理是浏览器发出外域的请求时,会在请求(Request)的header中加入一项,如图
- 就是把发出请求的页面的domain告诉被请求的服务器。
- 服务器通过这个header判断是否是被允许的源。比如我的系统由两个domain A和B组成。A上的一个网页请求B中的资源。当B收到请求,发现是来至A的网页在请求,才回传数据。
- 这还不够,B还需要在回传的数据的Respond的header中加入下面这一项:
- 这样浏览器才真正放行这次请求
- 其实这一步感觉是多余的。推测这是为了不要让CORS机制影响太多正常的流程。也就是不用动上层的逻辑,只用在底层做一些改变,就能让之前没有考虑CORS的系统支持CORS。
- 应用1:
- html文件放本地,同时向服务器请求资源。浏览器是不允许请求的。因为本地文件没有domain,而且也没有接口允许在Request加入CORS头
- 如果一定要实现本地文件访问服务器数据(主要是一些移动端的Web App),可以用ajax的JSONP技术,这个也是需要client和server同时配合才能实现。
相关文章: