React如何解決fetch跨域請求時session失效問題
這篇文章主要給大家介紹了關(guān)于React如何解決fetch跨域請求時session失效問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的...
這篇文章主要給大家介紹了關(guān)于React如何解決fetch跨域請求時session失效問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
前言
fetch在reactjs中等同于 XMLHttpRequest,它提供了許多與XMLHttpRequest相同的功能,但被設(shè)計成更具可擴(kuò)展性和高效性。
Fetch 的核心在于對 HTTP 接口的抽象,包括 Request,Response,Headers,Body,以及用于初始化異步請求的 global fetch。得益于 JavaScript 實現(xiàn)的這些抽象好的 HTTP 模塊,其他接口能夠很方便的使用這些功能;除此之外,F(xiàn)etch 還利用到了請求的異步特性——它是基于 Promise 的。
請注意,fetch 規(guī)范與 jQuery.ajax() 主要有兩種方式的不同,牢記:
- 當(dāng)接收到一個代表錯誤的 HTTP 狀態(tài)碼時,從 fetch()返回的 Promise 不會被標(biāo)記為 reject, 即使該 HTTP 響應(yīng)的狀態(tài)碼是 404 或 500。相反,它會將 Promise 狀態(tài)標(biāo)記為 resolve (但是會將 resolve 的返回值的 ok 屬性設(shè)置為 false ), 僅當(dāng)網(wǎng)絡(luò)故障時或請求被阻止時,才會標(biāo)記為 reject。
- 默認(rèn)情況下, fetch 不會從服務(wù)端發(fā)送或接收任何 cookies, 如果站點依賴于用戶 session,則會導(dǎo)致未經(jīng)認(rèn)證的請求(要發(fā)送 cookies,必須設(shè)置 credentials 選項).
發(fā)現(xiàn)問題
在解決fetch跨域請求接口的時候,一般都是讓后臺接口在返回頭里添加
//允許所有域名的腳本訪問該資源
header(
"Access-Control-Allow-Origin: *"
);
確實這樣是可以解決跨域請求的問題,但是如果我們要在請求的時候添加session,那么這樣設(shè)置就會出現(xiàn)問題了。
fetch添加Cookie驗證的方法是設(shè)置credentials: 'include'
fetch(url, {
method:
'POST'
,
body: JSON.stringify(params),
mode:
'cors'
,
//請求時添加Cookie
credentials:
'include'
,
headers:
new
Headers({
'Accept'
:
'application/json'
,
"Content-Type"
:
"application/x-www-form-urlencoded; charset=utf-8"
,
})
})
設(shè)置好了之后,信心滿滿的發(fā)起請求。卻發(fā)現(xiàn)網(wǎng)絡(luò)請求報錯了
A wildcard '*' cannot be used in the 'Access-Control-Allow-Origin' header when the credentials flag is true. Origin 'http://localhost:3000' is therefore not allowed access
解決方法
原因是網(wǎng)絡(luò)請求需要攜帶Cookie時Access-Control-Allow-Origin是不能設(shè)置為*的,這個時候應(yīng)該要給Access-Control-Allow-Origin指定域名
這樣就可以達(dá)到跨域請求的同時傳遞Cookie的目的了
- 列表項目
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,
Javascript類庫:vue.js中的vue-resource示例詳解
Vue與后臺Api進(jìn)行交互通常是利用vue-resource來實現(xiàn)的,本質(zhì)上vue-resource是通過http來完成AJAX請求相應(yīng)的。這篇文章主要介紹了Vue中的vue-resource示例詳解,需要的朋友可以...
javascript類庫:element ui table 增加篩選的方法示例
文章主要介紹了element ui table 增加篩選的方法示例,詳細(xì)的介紹了如何添加規(guī)則內(nèi)容,具有一定的參考價值,感興趣的小伙伴們可以參考一下網(wǎng)上大部分都可以增加篩選功能,但沒有找...
Win10系統(tǒng)下怎么禁止同步主機(jī)session
近來,有些剛剛升級Win10正式版的用戶反映自己的電腦開機(jī)時有個同步主機(jī)session啟動項占用了將近半分鐘,而選擇用360禁止后,下次會出現(xiàn)同步主機(jī)session3,再禁止下次又會出現(xiàn)同步主機(jī)session5這樣的服務(wù)。那么,我們該如...
PHP遭棄用!Wordpress.com開源并轉(zhuǎn)用Javascript
據(jù)外媒消息稱,Wordpress母公司Automattic將完全重寫Wordpress.com網(wǎng)站代碼,并將此項計劃命名為“Calypso”,代碼開源并被托管于Github平臺。此外,最新的wordpress.com放...
可穿戴設(shè)備React Sidekick 一鍵報警售價29美元
截至目前,有不少可穿戴設(shè)備將產(chǎn)品定位于完全,這當(dāng)中又分為一鍵報警和實時監(jiān)測兩類??偛课挥谖餮艌D的ReactMobile最近結(jié)束了它們在Kickstarter上的眾籌項目,共籌得近3.5萬美元。...