CORS(跨来源资源共享协议),高级浏览器(Chrome,firefox, opera, safir, ie10)在 XMLHttpRequest(AJAX) 中已经支持了这个协议。可以实现ajax跨域访问。(其实IE8也实现了,只不过是另外一个对象) 由于是跨来源的的访问,标识HTTP状态的Cookie的使用有一些特别处理。 Server Nodejs 代码 res.setHeader( 'Access-Control-Allow-Origin' , req.headers.origin);
res.setHeader( 'Access-Control-Allow-Credentials' , true );
res.setHeader( 'Access-Control-Allow-Methods' , 'POST, GET, PUT, DELETE, OPTIONS' );
|
浏览器中 JS 代码 var xhr = new XMLHttpRequest();
xhr.open( "post" , "xxx/xxx" , true );
xhr.withCredentials = true ;
xhr.onload = function (){}
xhr.send( "a=1&b=2" );
|
CORS + Cookie 在nodejs + express 中的实现。 做一个/getInfo 的ajax接口。 浏览器会先发送一个 options请求验证权限,最后再完成真的业务请求。 app.options( '/getInfo' , function (req, res){
res.setHeader( 'Access-Control-Allow-Origin' , req.headers.origin);
res.setHeader( 'Access-Control-Allow-Credentials' , true );
res.setHeader( 'Access-Control-Allow-Methods' , 'POST, GET, PUT, DELETE, OPTIONS' );
});
app.get( '/getInfo' , function (req, res){
res.setHeader( 'Access-Control-Allow-Origin' , req.headers.origin);
res.setHeader( 'Access-Control-Allow-Credentials' , true );
res.end( "I'm jun" );
});
|
最后欢迎观看CORS+WebSocket 做的一个在线用户即时对话工具。http:///c/chat-js Over
|