NodeJS配置CORS實現(xiàn)過程詳解
跨域問題主要在header上下功夫
首先提供一個w3c的header定義 http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
再提供一個網(wǎng)友提供的header詳解 http://kb.cnblogs.com/page/92320/
這兩個有助于幫助大家理解header的類型和作用, 但是遺憾的是跨域相關(guān)的兩個header屬性我都沒有找到相關(guān)的定義,
下面直接告訴大家 1是Access-Control-Allow-Origin 允許的域 2是Access-Control-Allow-Headers 允許的header類型
第一項可以直接設(shè)為* 表示任意 但是第二項不能這樣寫,在chrome中測試跨域發(fā)現(xiàn)報錯, 最終的代碼看起來是這個樣子:
app.all('*', function(req, res, next) { res.header("Access-Control-Allow-Origin", "*"); res.header("Access-Control-Allow-Headers", "Content-Type,Content-Length, Authorization, Accept,X-Requested-With"); res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS"); res.header("X-Powered-By",' 3.2.1') if(req.method=="OPTIONS") res.send(200);/*讓options請求快速返回*/ else next(); });
另外有cors模塊可以用
CORS需要瀏覽器和服務(wù)器同時支持。目前,所有瀏覽器都支持該功能,IE瀏覽器不能低于IE10。
整個CORS通信過程,都是瀏覽器自動完成,不需要用戶參與。對于開發(fā)者來說,CORS通信與同源的AJAX通信沒有差別,代碼完全一樣。瀏覽器一旦發(fā)現(xiàn)AJAX請求跨源,就會自動添加一些附加的頭信息,有時還會多出一次附加的請求,但用戶不會有感覺。
因此,實現(xiàn)CORS通信的關(guān)鍵是服務(wù)器。只要服務(wù)器實現(xiàn)了CORS接口,就可以跨源通信。
瀏覽器將CORS請求分成兩類:簡單請求(simple request)和非簡單請求(not-so-simple request)。
只要同時滿足以下兩大條件,就屬于簡單請求。
(1) 請求方法是以下三種方法之一:
- HEAD
- GET
- POST
(2)HTTP的頭信息不超出以下幾種字段:
- Accept
- Accept-Language
- Content-Language
- Last-Event-ID
Content-Type:只限于三個值application/x-www-form-urlencoded、multipart/form-data、text/plain
這是為了兼容表單(form),因為歷史上表單一直可以發(fā)出跨域請求。AJAX 的跨域設(shè)計就是,只要表單可以發(fā),AJAX 就可以直接發(fā)。
凡是不同時滿足上面兩個條件,就屬于非簡單請求。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
手把手教你使用TypeScript開發(fā)Node.js應(yīng)用
為了減少代碼編寫過程中出現(xiàn)的錯誤,以及更好的維護你的項目,本文將手把手教你配置一個簡單的開發(fā)環(huán)境來編寫Node.js的應(yīng)用程序,感興趣的小伙伴們可以參考一下2019-05-05Node.js中Process.nextTick()和Process.setImmediate()的區(qū)別
這篇文章介紹了Node.js中Process.nextTick()和Process.setImmediate()的區(qū)別,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-07-07