CORS Cookie,和nodejs中的具體實現


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);//告訴客戶端可以在HTTP請求中帶上Cookie
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;//放在 open 方法后面比較靠譜
xhr.onload = function(){}
xhr.send("a=1&b=2");  

  

CORS + Cookie 在nodejs + express 中的實現。

做一個/getInfo 的ajax接口。

瀏覽器會先發送一個 options請求驗證權限,最后再完成真的業務請求。

//首先做一個 options 的請求返回CORS的頭信息。
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://vchat.co/c/chat-js

Over

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM