CORS(跨來(lái)源資源共享協(xié)議),高級(jí)瀏覽器(Chrome,firefox, opera, safir, ie10)在 XMLHttpRequest(AJAX) 中已經(jīng)支持了這個(gè)協(xié)議。可以實(shí)現(xiàn)ajax跨域訪問(wèn)。(其實(shí)IE8也實(shí)現(xiàn)了,只不過(guò)是另外一個(gè)對(duì)象) 由于是跨來(lái)源的的訪問(wèn),標(biāo)識(shí)HTTP狀態(tài)的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 中的實(shí)現(xiàn)。 做一個(gè)/getInfo 的ajax接口。 瀏覽器會(huì)先發(fā)送一個(gè) options請(qǐng)求驗(yàn)證權(quán)限,最后再完成真的業(yè)務(wù)請(qǐng)求。 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 做的一個(gè)在線用戶即時(shí)對(duì)話工具。http:///c/chat-js Over
|