nginx配置CORS服务
同源策略
含义
同源策略(same origin policy)是浏览器安全的基石,同源是指三个相同
- 协议相同(http不能访问https)
- 域名相同(miaoshu.me不能访问www.miaoshu.me)
- 端口相同(localhost:80不能访问localhost:8080)
目的
保证用户信息的安全,防止恶意的网站窃取数据。
限制范围
- Cookie、LocalStorage 和 IndexDB 无法读取。
- DOM无法获得。(iframe, window.open)
- AJAX不能发送。
CORS
相比如jsonp(网页动态添加script标签,向服务器请求json数据)的只能发送GET请求的限制,CORS(Cross-Origin Resource Sharing)是跨域ajax请求的根本解决方案。
CORS需要浏览器和服务器同时支持。
实现CORS通信的关键是服务器。只要服务器实现了CORS接口,就可以跨源通信。
两种请求
simple request
满足以下条件
method: HEAD/GET/POST
http header不超出以下name:
* Accept * Accept-Language * Content-Language * Last-Event-ID * Content-Type: 只限于application/x-www-form-urlencoded、multipart/form-data、text/plain
not-so-simple request
浏览器处理流程
simple request
直接发出CORS请求
not-so-simple request
预检请求(preflight)
nginx配置
如果服务不是属于开放平台服务,则需要先过滤请求域名
并在response header中增加Access-Control-Allow-*系列参数
1 | set $cors ''; |
无论response code是多少都允许跨域
add_header后增加参数always(此参数必须在1.7.5以上的nginx,否则服务无法启动)
允许跨域发送Cookie
angularjs中的$http服务可全局指定ajax请求的是否发送credentials(angular版本1.1.1以上)
1 | angular.module('app').config(['$httpProvider', function($httpProvider) { |