国产成人精品亚洲777人妖,欧美日韩精品一区视频,最新亚洲国产,国产乱码精品一区二区亚洲

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

解決vue axios跨域 Request Method: OPTIONS問(wèn)題(預(yù)檢請(qǐng)求)

瀏覽:134日期:2022-12-06 14:49:05

我們?cè)趘ue開(kāi)發(fā)中用axios進(jìn)行跨域請(qǐng)求時(shí)有時(shí)會(huì)遇到,同一個(gè)接口請(qǐng)求了兩次,并且第一次都是options請(qǐng)求,然后才是post/get請(qǐng)求

如下圖

解決vue axios跨域 Request Method: OPTIONS問(wèn)題(預(yù)檢請(qǐng)求)

options請(qǐng)求

解決vue axios跨域 Request Method: OPTIONS問(wèn)題(預(yù)檢請(qǐng)求)

get請(qǐng)求

為什么會(huì)出現(xiàn)這種原因呢?

這是因?yàn)镃ORS跨域分為 簡(jiǎn)單跨域請(qǐng)求和復(fù)雜跨域請(qǐng)求;

簡(jiǎn)單跨域不會(huì)發(fā)送options請(qǐng)求,復(fù)雜跨域會(huì)發(fā)送一個(gè)預(yù)檢請(qǐng)求options。

1.簡(jiǎn)單跨域滿足的條件

1.請(qǐng)求方式是以下三種之一:

HEAD

GET

POST

2.HTTP的頭信息不超出以下幾種字段

Accept

Accept-Language

Content-Language

Last-Event-ID

Content-Type

但是Content-Type的值,只限于三個(gè)值:

application/x-www-form-urlencoded、multipart/form-data、text/plain

2.復(fù)雜跨域滿足的條件

1.請(qǐng)求方法不是GET/HEAD/POST

2. post請(qǐng)求的Content-Type并非application/x-www-form-urlencoded, multipart/form-data, 或text/plain

3.請(qǐng)求設(shè)置了自定義的header字段

在header中自定義了字段就會(huì)觸發(fā)options預(yù)檢請(qǐng)求

// 請(qǐng)求攔截器service.interceptors.request.use( config => { if (store.getters.token) { config.headers[’Content-MD5’] = ’MD5’ config.headers[’authToken’] = getToken() config.headers[’accessTokenRetireTime’] = getTokenTime() } return config }, error => { console.log(error) // for debug return Promise.reject(error) })

3.解決方案

1.可以通過(guò)跟后端協(xié)調(diào),將所有options放行,此時(shí)便能通過(guò)post/get請(qǐng)求訪問(wèn)到數(shù)據(jù)。

2.引入qs模塊處理數(shù)據(jù)

qs.parse()將URL解析成對(duì)象的形式

qs.stringify()將對(duì)象 序列化成URL的形式,以&進(jìn)行拼接

1.安裝qs

npm install qs

2.在main.js引入qs

import qs from ’qs’;

Vue.prototype.$qs = qs;

3.vue實(shí)例組件里都可以直接用this.$qs.stringify(要處理的數(shù)據(jù)),進(jìn)行數(shù)據(jù)轉(zhuǎn)換

個(gè)人傾向第一種方法,如果用第二種方法對(duì)前后端來(lái)說(shuō)比較繁瑣。

補(bǔ)充知識(shí):vue當(dāng)中axios調(diào)取后臺(tái)數(shù)據(jù) 以及設(shè)置自定義請(qǐng)求頭

從vue2.0開(kāi)始vue-resource就不再維護(hù)了,尤大大開(kāi)始推薦使用 axios。 具體詳細(xì)教程可在官網(wǎng)查閱,這篇文章主要說(shuō)明一些簡(jiǎn)單的問(wèn)題。

第一步:安裝axios

$ npm install axios

第二步:在 main.js中引入axios

解決vue axios跨域 Request Method: OPTIONS問(wèn)題(預(yù)檢請(qǐng)求)

第三步:設(shè)置我們自定義的 頭請(qǐng)求;

header也可以在我們具體的請(qǐng)求中添加 header參數(shù),我們這里是在main.js中添加公眾的。

axios.defaults.timeout = 5000;

//請(qǐng)求超時(shí)的時(shí)間設(shè)定

axios.defaults.headers.post[’Content-Type’] = ’application/json’;

//axios默認(rèn)的請(qǐng)求方式,可以自己設(shè)置

axios.defaults.baseURL = ’http://localhost:8008’;

//axios默認(rèn)的請(qǐng)求地址,開(kāi)發(fā)時(shí)可以實(shí)際的接口地址來(lái)設(shè)置該值,去請(qǐng)求別人的接口(前提是后臺(tái)已經(jīng)幫你解決了接口的跨域問(wèn)題,如果沒(méi)有,請(qǐng)看下文,我們自己可以解決開(kāi)發(fā)跨域的問(wèn)題)

axios.defaults.headers.common['token'] = 'aaaaaaaaaaa';

這塊token呢是因?yàn)楫?dāng)初調(diào)試接口的時(shí)候 有些接口必須登錄才可以調(diào)用,而我們的登陸注冊(cè)并未寫(xiě)好,因此 后臺(tái)給了一個(gè)故固定的token,然后寫(xiě)在了頭里面。

以上這篇解決vue axios跨域 Request Method: OPTIONS問(wèn)題(預(yù)檢請(qǐng)求)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: IOS
相關(guān)文章:
主站蜘蛛池模板: 海晏县| 五常市| 讷河市| 屯昌县| 兴仁县| 正镶白旗| 武汉市| 宾阳县| 和田县| 西藏| 个旧市| 色达县| 遵义县| 湛江市| 尚义县| 华容县| 福海县| 岳阳市| 临夏市| 开原市| 于都县| 绥江县| 涿鹿县| 康保县| 兰坪| 大石桥市| 武邑县| 大邑县| 元阳县| 蕉岭县| 伊金霍洛旗| 安吉县| 汾阳市| 陇西县| 灵武市| 文成县| 正镶白旗| 铜鼓县| 昭平县| 兴和县| 青岛市|