NodeJS配置CORS實(shí)現(xià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屬性我都沒有找到相關(guān)的定義,
下面直接告訴大家 1是Access-Control-Allow-Origin 允許的域 2是Access-Control-Allow-Headers 允許的header類型
第一項(xiàng)可以直接設(shè)為* 表示任意 但是第二項(xiàng)不能這樣寫,在chrome中測(cè)試跨域發(fā)現(xiàn)報(bào)錯(cuò), 最終的代碼看起來是這個(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通信過程,都是瀏覽器自動(dòng)完成,不需要用戶參與。對(duì)于開發(fā)者來說,CORS通信與同源的AJAX通信沒有差別,代碼完全一樣。瀏覽器一旦發(fā)現(xiàn)AJAX請(qǐng)求跨源,就會(huì)自動(dòng)添加一些附加的頭信息,有時(shí)還會(huì)多出一次附加的請(qǐng)求,但用戶不會(huì)有感覺。
因此,實(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)文章
Node學(xué)習(xí)筆記:Node.js安裝及環(huán)境配置 史詩(shī)級(jí)詳細(xì)版【含測(cè)試與鏡像說明】
這篇文章主要介紹了Node學(xué)習(xí)筆記之Node.js安裝及環(huán)境配置方法,詳細(xì)分析了node.js的基本安裝、配置、環(huán)境變量設(shè)置、以及環(huán)境測(cè)試與鏡像使用說明,需要的朋友可以參考下2023-05-05
詳解Node.js access_token的獲取、存儲(chǔ)及更新
本篇文章主要介紹了Node.js access_token的獲取、存儲(chǔ)及更新 ,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06
使用Node和Puppeteer實(shí)現(xiàn)批量生成PDF
這篇文章主要為大家詳細(xì)介紹了使用Node.js和Puppeteer庫(kù)將網(wǎng)頁(yè)內(nèi)容轉(zhuǎn)換為PDF文件的過程,文中的示例代碼講解詳細(xì),有需要的小伙伴可以了解下2024-11-11
nodejs express搭建服務(wù)并熱更新文件過程詳解
這篇文章主要為大家介紹了nodejs express搭建服務(wù)并熱更新文件過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11

