跨域CORS 带Cookie传递,在nodejs + express中的具体实现
分类:服务器| 发布:佚名| 查看:1728 | 发表时间:2015/5/5
CORS(跨来源资源共享协议),高级浏览器(Chrome,firefox, opera, safir, ie10)在 XMLHttpRequest(AJAX) 中已经支持了这个协议。可以实现ajax跨域访问。(其实IE8也实现了,只不过是另外一个对象)
由于是跨来源的的访问,标识HTTP状态的Cookie的使用有一些特别处理。
Server Nodejs 代码
1 | res.setHeader( 'Access-Control-Allow-Origin' , req.headers.origin); |
2 | res.setHeader( 'Access-Control-Allow-Credentials' , true ); |
3 | res.setHeader( 'Access-Control-Allow-Methods' , 'POST, GET, PUT, DELETE, OPTIONS' ); |
浏览器中 JS 代码
1 | var xhr = new XMLHttpRequest(); |
2 | xhr.open( "post" , "xxx/xxx" , true ); |
3 | xhr.withCredentials = true ; |
4 | xhr.onload = function (){} |
CORS + Cookie 在nodejs + express 中的实现。
做一个/getInfo 的ajax接口。
浏览器会先发送一个 options请求验证权限,最后再完成真的业务请求。
02 | app.options( '/getInfo' , function (req, res){ |
03 | res.setHeader( 'Access-Control-Allow-Origin' , req.headers.origin); |
04 | res.setHeader( 'Access-Control-Allow-Credentials' , true ); |
05 | res.setHeader( 'Access-Control-Allow-Methods' , 'POST, GET, PUT, DELETE, OPTIONS' ); |
09 | app.get( '/getInfo' , function (req, res){ |
10 | res.setHeader( 'Access-Control-Allow-Origin' , req.headers.origin); |
11 | res.setHeader( 'Access-Control-Allow-Credentials' , true ); |
12 | res.end( "I'm Camnpr" ); |