国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

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

Vue axios與Go Frame后端框架的Options請(qǐng)求跨域問(wèn)題詳解

瀏覽:89日期:2023-02-03 17:53:49

跨域問(wèn)題可從前后兩端分開(kāi)排查:

前端:Vue + axios

axios 請(qǐng)求頭使用 ’Content-Type’: ’application/json’,

并且在Header中設(shè)置了 Authorization 字段用于傳遞 Token,

參數(shù)未經(jīng) Qs 轉(zhuǎn)碼,

使用以下代碼測(cè)試登錄接口:

// 為方便操作,已將 axios 實(shí)例掛載到 this.$axios 上this.$axios.post(’/signin’, {account: ’’, password: ’’}) .then(res => { console.log(’成功:’, res) }) .catch(err => { console.log(’失敗: ’, err) })

出現(xiàn)如下錯(cuò)誤:

Access to XMLHttpRequest at ’http://127.0.0.1:8080/api/v1/signin’ from origin ’http://localhost:8081’ has been blocked by CORS policy: Response to preflight request doesn’t pass access control check: It does not have HTTP ok status.

同時(shí) POST 請(qǐng)求變成了 OPTIONS 請(qǐng)求,并且返回404,如下圖:

Vue axios與Go Frame后端框架的Options請(qǐng)求跨域問(wèn)題詳解

這里有兩個(gè)問(wèn)題,一個(gè)是為什么 POST 變成了 OPTIONS?URL 路徑?jīng)]錯(cuò),為什么又會(huì)返回 404?

POST 變 OPTIONS 問(wèn)題涉及復(fù)雜跨域請(qǐng)求,符合以下任意一個(gè)條件的請(qǐng)求就算復(fù)雜請(qǐng)求:

使用了除 HEAD、GET、POST之外的請(qǐng)求方法; 頭部字段不超出 Accept、Accept-Language、Content-Language、Last-Event-ID、Content-Type,并且 Content-Type 的值只限于 application/x-www-form-urlencoded、multipart/form-data、text/plain;

由于設(shè)置的 Authorization 字段,Content-Type 也設(shè)置為了 application/json,因此這個(gè)請(qǐng)求算復(fù)雜跨域請(qǐng)求,會(huì)在正式通信前增加一次 OPTIONS 查詢請(qǐng)求,稱(chēng)為'預(yù)檢'請(qǐng)求(preflight request),用于向服務(wù)器請(qǐng)求權(quán)限等信息,預(yù)檢請(qǐng)求被成功響應(yīng)后,才會(huì)發(fā)出真實(shí)的 POST 請(qǐng)求。

可為什么 OPTIONS 請(qǐng)求返回 404 呢?通過(guò)上面的錯(cuò)誤說(shuō)明及分析,答案應(yīng)該很清晰了,就是服務(wù)端路由未對(duì) OPTIONS 類(lèi)型請(qǐng)求做出響應(yīng),導(dǎo)致 404 的情況。

后端:GoFrame

GoFrame 的路由代碼如下:

func init() { s := g.Server() // 綁定 CORS 中間件 s.BindMiddleware('/api/*', middleware.CORS) s.Group('/api', func(group *ghttp.RouterGroup) { ... // 重點(diǎn):此路由僅支持 POST group.POST('/signin', userController, 'SignIn') }}

/signin 的路由指定了請(qǐng)求方式為 POST,自然無(wú)法響應(yīng)其他類(lèi)型的請(qǐng)求,使用如下方式定義倒是可響應(yīng)所有類(lèi)型的請(qǐng)求:

group.ALL('/signin', userController, 'SignIn')

這樣就使該路由支持所有的請(qǐng)求方法,但需要在控制器的 SignIn 方法中做判斷需要響應(yīng)哪些類(lèi)型的請(qǐng)求,很繁瑣,不推薦此方式。

其實(shí)只要在 CORS 中間件中對(duì) OPTIONS 請(qǐng)求做統(tǒng)一響應(yīng)即可,上代碼:

// CORS 允許接口跨域請(qǐng)求func CORS(r *ghttp.Request) { // 使用框架默認(rèn)的 CORS 設(shè)置 r.Response.CORSDefault() if r.Method == 'OPTIONS' { r.Response.WriteStatusExit(http.StatusOK) } else { r.Middleware.Next() }}

另外需要注意的是,使用 GoFrame 框架,CORS 中間件要在全局添加,如果在路由組中添加,同樣會(huì)出現(xiàn) OPTIONS 請(qǐng)求 404 的情況,而且中間件的代碼在請(qǐng)求過(guò)程中未執(zhí)行,原因暫不清楚,還需要多了解下框架。

本文描述的跨域問(wèn)題是在網(wǎng)頁(yè)上使用 Vue + axios 時(shí)出現(xiàn)的,使用 Postman 工具調(diào)試則一切正常,這里記錄下排查過(guò)程和解決方法,希望能幫到有需要的童鞋,有任何問(wèn)題可以在評(píng)論里一起討論下。

到此這篇關(guān)于Vue axios與Go Frame后端框架的Options請(qǐng)求跨域問(wèn)題詳解的文章就介紹到這了,更多相關(guān)Vue axios與Go Frame跨域內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: IOS
相關(guān)文章:
主站蜘蛛池模板: 久久在线资源 | 在线视频亚洲欧美 | 亚洲美女精品视频 | 亚洲精品综合久久中文字幕 | 日韩毛片欧美一级a | 国产精品自在欧美一区 | 好吊妞998视频免费观看在线 | 欧美大片毛片aaa免费看 | 亚洲国产成人综合精品2020 | 久草视频中文在线 | 精品高清国产a毛片 | 国产精品成人aaaaa网站 | 免费观看毛片的网站 | 亚洲国产片在线观看 | 精品国产精品久久一区免费式 | 亚洲成aⅴ人片在线影院八 亚洲成av人片在线观看 | 久久是精品 | 日韩中文字幕网 | 亚洲一区在线免费观看 | 日韩欧美中文字幕在线观看 | 国产亚洲福利一区二区免费看 | 宅女深夜福利视频在线 | 在线观看久草视频 | 澳门毛片在线播放 | 日本 欧美 国产 | 全部免费毛片在线 | 韩国免费毛片在线看 | 国产成人精品日本亚洲专区6 | 伊人狠狠丁香婷婷综合色 | 亚洲情a成黄在线观看动 | 亚洲成av人片在线观看无码 | 男女免费视频网站 | 97精品国产91久久久久久 | 亚洲精品久久片久久 | 久久久亚洲欧美综合 | 欧美性视频一区二区三区 | 国产精品成人在线播放 | 香港经典a毛片免费观看看 香港经典a毛片免费观看爽爽影院 | 欧美特一级 | 国产乱码精品一区二区三区卡 | 国内精品久久影院 |