axios攜帶cookie配置詳解(axios+koa)
話不多說,一個字,干!
前端配置如下:
axios.defaults.withCredentials = true; //配置為true
axios.post('http://localhost:3000/tpzdz/vote/all', {
openid: 'oJ0mVw4QrfS603gFa_uAFDADH2Uc',
date: '2018-11-21'
}).then(function (response) {
console.log(response)
})
前端配置withCredentials = true 后端的跨域也需要配置
app.use(async (ctx, next) => {
ctx.set('Access-Control-Allow-Origin', ctx.request.header.origin);
ctx.set('Access-Control-Allow-Credentials', true);
await next();
});
//防止每次請求都返回Access-Control-Allow-Methods以及Access-Control-Max-Age,
//這兩個響應(yīng)頭其實是沒有必要每次都返回的,只是第一次有預(yù)檢的時候返回就可以了。
app.use(async (ctx, next) => {
if (ctx.method === 'OPTIONS') {
ctx.set('Access-Control-Allow-Methods', 'PUT,DELETE,POST,GET');
ctx.set('Access-Control-Max-Age', 3600 * 24);
ctx.body = '';
}
await next();
});
實例展示完了,我們來講講都是怎么回事
withCredentials:默認情況下,跨源請求不提供憑據(jù)(cookie、HTTP認證及客戶端SSL證明等)。通過將withCredentials屬性設(shè)置為true,可以指定某個請求應(yīng)該發(fā)送憑據(jù)。
- 默認值為false。
- true:在跨域請求時,會攜帶用戶憑證
- false:在跨域請求時,不會攜帶用戶憑證;返回的 response 里也會忽略 cookie
當(dāng)配置了 withCredentials = true時,必須在后端增加 response 頭信息Access-Control-Allow-Origin,且必須指定域名,而不能指定為*?。?!
那么問題就來了,若是多個域名呢?
我配置的是任意域名都可以訪問,但是這樣并不安全。建議做法是創(chuàng)建一個數(shù)組,每次去檢測域名是否在數(shù)組內(nèi),存在則繼續(xù)
講到這里了,那么延伸一下 post請求下的options
options 它是一種探測性的請求,通過這個方法,客戶端可以在采取具體資源請求之前,決定對該資源采取何種必要措施,或者了解服務(wù)器的性能。
前臺跨域post請求,由于CORS(cross origin resource share)規(guī)范的存在,瀏覽器會首先發(fā)送一次options嗅探,同時header帶上origin,判斷是否有跨域請求權(quán)限,服務(wù)器響應(yīng)access control allow origin的值,供瀏覽器與origin匹配,如果匹配則正式發(fā)送post請求。
每一次非簡單請求都會實際上發(fā)出兩次請求,一次預(yù)檢一次真正請求,這就比較損失性能了。
所以就有了2圖的中間件。 Access-Control-Max-Age: 86400
設(shè)置一個相對時間,在該非簡單請求在服務(wù)器端通過檢驗的那一刻起,當(dāng)流逝的時間的毫秒數(shù)不足Access-Control-Max-Age時,就不需要再進行預(yù)檢,可以直接發(fā)送一次請求。
但是為什么會有兩個中間件的設(shè)置呢,推薦文章 http://www.dhdzp.com/article/135924.htm 很細致哦
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
vue2項目使用element-ui的el-tabs組件導(dǎo)致瀏覽器崩潰卡死問題
這篇文章主要介紹了vue2項目使用element-ui的el-tabs組件導(dǎo)致瀏覽器崩潰卡死問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07
使用Vue父子組件通信實現(xiàn)todolist的功能示例代碼
這篇文章主要給大家介紹了關(guān)于如何使用Vue父子組件通信實現(xiàn)todolist的功能的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用Vue具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
詳解使用vue-router進行頁面切換時滾動條位置與滾動監(jiān)聽事件
本篇文章主要介紹了詳解使用vue-router進行頁面切換時滾動條位置與滾動監(jiān)聽事件,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-03-03
在Vue中使用動態(tài)import()語法動態(tài)加載組件
在Vue中,你可以使用動態(tài)import()語法來動態(tài)加載組件,動態(tài)導(dǎo)入允許你在需要時異步加載組件,這樣可以提高應(yīng)用程序的初始加載性能,本文給大家介紹在Vue中使用動態(tài)import()語法動態(tài)加載組件,感興趣的朋友一起看看吧2023-11-11

