NodeJS配置CORS實(shí)現(xiàn)過(guò)程詳解
跨域問(wèn)題主要在header上下功夫
首先提供一個(gè)w3c的header定義 http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
再提供一個(gè)網(wǎng)友提供的header詳解 http://kb.cnblogs.com/page/92320/
這兩個(gè)有助于幫助大家理解header的類型和作用, 但是遺憾的是跨域相關(guān)的兩個(gè)header屬性我都沒(méi)有找到相關(guān)的定義,
下面直接告訴大家 1是Access-Control-Allow-Origin 允許的域 2是Access-Control-Allow-Headers 允許的header類型
第一項(xiàng)可以直接設(shè)為* 表示任意 但是第二項(xiàng)不能這樣寫(xiě),在chrome中測(cè)試跨域發(fā)現(xiàn)報(bào)錯(cuò), 最終的代碼看起來(lái)是這個(gè)樣子:
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請(qǐng)求快速返回*/ else next(); });
另外有cors模塊可以用
CORS需要瀏覽器和服務(wù)器同時(shí)支持。目前,所有瀏覽器都支持該功能,IE瀏覽器不能低于IE10。
整個(gè)CORS通信過(guò)程,都是瀏覽器自動(dòng)完成,不需要用戶參與。對(duì)于開(kāi)發(fā)者來(lái)說(shuō),CORS通信與同源的AJAX通信沒(méi)有差別,代碼完全一樣。瀏覽器一旦發(fā)現(xiàn)AJAX請(qǐng)求跨源,就會(huì)自動(dòng)添加一些附加的頭信息,有時(shí)還會(huì)多出一次附加的請(qǐng)求,但用戶不會(huì)有感覺(jué)。
因此,實(shí)現(xiàn)CORS通信的關(guān)鍵是服務(wù)器。只要服務(wù)器實(shí)現(xiàn)了CORS接口,就可以跨源通信。
瀏覽器將CORS請(qǐng)求分成兩類:簡(jiǎn)單請(qǐng)求(simple request)和非簡(jiǎn)單請(qǐng)求(not-so-simple request)。
只要同時(shí)滿足以下兩大條件,就屬于簡(jiǎn)單請(qǐng)求。
(1) 請(qǐng)求方法是以下三種方法之一:
- HEAD
- GET
- POST
(2)HTTP的頭信息不超出以下幾種字段:
- Accept
- Accept-Language
- Content-Language
- Last-Event-ID
Content-Type:只限于三個(gè)值application/x-www-form-urlencoded、multipart/form-data、text/plain
這是為了兼容表單(form),因?yàn)闅v史上表單一直可以發(fā)出跨域請(qǐng)求。AJAX 的跨域設(shè)計(jì)就是,只要表單可以發(fā),AJAX 就可以直接發(fā)。
凡是不同時(shí)滿足上面兩個(gè)條件,就屬于非簡(jiǎn)單請(qǐng)求。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
手把手教你使用TypeScript開(kāi)發(fā)Node.js應(yīng)用
為了減少代碼編寫(xiě)過(guò)程中出現(xiàn)的錯(cuò)誤,以及更好的維護(hù)你的項(xiàng)目,本文將手把手教你配置一個(gè)簡(jiǎn)單的開(kāi)發(fā)環(huán)境來(lái)編寫(xiě)Node.js的應(yīng)用程序,感興趣的小伙伴們可以參考一下2019-05-05詳解webpack打包nodejs項(xiàng)目(前端代碼)
這篇文章主要介紹了webpack打包nodejs項(xiàng)目(前端代碼),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-09-09nodejs開(kāi)發(fā)環(huán)境配置與使用
經(jīng)過(guò)幾個(gè)星期的nodejs學(xué)習(xí),從開(kāi)始的小白到現(xiàn)在漸漸得熟悉,走過(guò)來(lái)也才算明白,現(xiàn)在已經(jīng)入門(mén)也掌握了相關(guān)的學(xué)習(xí)方法,今天開(kāi)始記錄下自己學(xué)習(xí)的過(guò)程,以便日后查看。2014-11-11Nodejs極簡(jiǎn)入門(mén)教程(二):定時(shí)器
這篇文章主要介紹了Nodejs極簡(jiǎn)入門(mén)教程(二):定時(shí)器,本文講解了setTimeout、setInterval、setImmediate及process.nextTick等內(nèi)容,需要的朋友可以參考下2014-10-10Node.js中Process.nextTick()和Process.setImmediate()的區(qū)別
這篇文章介紹了Node.js中Process.nextTick()和Process.setImmediate()的區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07用node.js寫(xiě)一個(gè)jenkins發(fā)版腳本
這篇文章主要介紹了用node.js寫(xiě)一個(gè)jenkins發(fā)版腳本,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05Node.js REPL (交互式解釋器)實(shí)例詳解
這篇文章主要介紹了Node.js REPL (交互式解釋器)實(shí)例詳解的相關(guān)資料,Node.js REPL(Read Eval Print Loop:交互式解釋器) 表示一個(gè)電腦的環(huán)境,類似 Window 系統(tǒng)的終端,我們可以在終端中輸入命令,并接收系統(tǒng)的響應(yīng),需要的朋友可以參考下2017-08-08