最近使用angular js 访问restful 后台时需要考虑CORS跨域访问的问题,angular js 的http访问本身也是ajax,在跨域访问时需要做响应的设置
1. 服务器端设置
当跨域访问时,服务器端需要设置响应的header,
Access-Control-Allow-Origin: *
表示该资源运行所有的外域进行访问,当然,也可以只允许某些域访问。
2. 使用cookie进行验证的时候,服务端的response中的header中会发送一个set-cookie字段,将保存在浏览器的cookie中,当用户发送request的时候可以直接使用改服务端域名下的cookie,作为 request header中的字段,从而服务端会根据cookie信息进行验证,决用户是否有权利访问该资源。
3. angular js 中,需要对$httpProvider进行设置
$httpProvider.defaults.withCredentials = true;
在发送request时会自动将cookie信息加入到request的header中,此时需要在服务端设置 头部信息
Access-Control-Allow-Credentials:true
如果客户端设置了withCredential = true, 但是服务器的response中没有
Access-Control-Allow-Credentials:
true的话,浏览器会自动忽略该response。
4. angular js 中默认options方法是不带credential的