最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue axios與Go Frame后端框架的Options請求跨域問題詳解

 更新時間:2020年03月03日 11:06:02   作者:大漠風(fēng)起沙飛揚  
這篇文章主要介紹了Vue axios與Go Frame后端框架的Options請求跨域問題詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

跨域問題可從前后兩端分開排查:

前端:Vue + axios

axios 請求頭使用 'Content-Type': 'application/json',

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

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

使用以下代碼測試登錄接口:

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

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

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.

同時 POST 請求變成了 OPTIONS 請求,并且返回404,如下圖:

這里有兩個問題,一個是為什么 POST 變成了 OPTIONS?URL 路徑?jīng)]錯,為什么又會返回 404?

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

  1. 使用了除 HEAD、GET、POST之外的請求方法;
  2. 頭部字段不超出 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,因此這個請求算復(fù)雜跨域請求,會在正式通信前增加一次 OPTIONS 查詢請求,稱為"預(yù)檢"請求(preflight request),用于向服務(wù)器請求權(quán)限等信息,預(yù)檢請求被成功響應(yīng)后,才會發(fā)出真實的 POST 請求。

可為什么 OPTIONS 請求返回 404 呢?
通過上面的錯誤說明及分析,答案應(yīng)該很清晰了,就是服務(wù)端路由未對 OPTIONS 類型請求做出響應(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) {
  ...
  // 重點:此路由僅支持 POST
  group.POST("/signin", userController, "SignIn")
 }
}

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

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

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

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

// CORS 允許接口跨域請求
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 中間件要在全局添加,如果在路由組中添加,同樣會出現(xiàn) OPTIONS 請求 404 的情況,而且中間件的代碼在請求過程中未執(zhí)行,原因暫不清楚,還需要多了解下框架。

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

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

相關(guān)文章

  • 利用Vue.js框架實現(xiàn)火車票查詢系統(tǒng)(附源碼)

    利用Vue.js框架實現(xiàn)火車票查詢系統(tǒng)(附源碼)

    這篇文章主要介紹了利用Vue.js框架實現(xiàn)火車票查詢系統(tǒng)的相關(guān)資料,,文中給出了詳細(xì)的介紹與示例代碼,并在文章結(jié)尾給出了完整的項目下載,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-02-02
  • vue.config.js打包優(yōu)化配置

    vue.config.js打包優(yōu)化配置

    這篇文章主要介紹了vue.config.js打包優(yōu)化配置,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • 使用vue-print-nb打印el-table問題總結(jié)

    使用vue-print-nb打印el-table問題總結(jié)

    這篇文章主要介紹了使用vue-print-nb打印el-table問題總結(jié),通過實例代碼介紹了vue-print-nb 打印功能,本文結(jié)合實例代碼講解的非常詳細(xì),感興趣的朋友一起看看吧
    2024-01-01
  • 解讀計算屬性和watch監(jiān)聽的區(qū)別及說明

    解讀計算屬性和watch監(jiān)聽的區(qū)別及說明

    計算屬性是基于它們的依賴進行緩存的,只有在它的相關(guān)依賴發(fā)生改變時才會重新求值,而watch則是一個更為通用的監(jiān)聽器,它可以在數(shù)據(jù)變化時執(zhí)行異步操作或開銷較大的操作
    2025-01-01
  • 詳解如何在Vue3中與后端API進行交互

    詳解如何在Vue3中與后端API進行交互

    在現(xiàn)代的 web 應(yīng)用中,與后端 API 的交互成為了不可或缺的一部分,特別是在 Vue 3 這樣的前端框架中,如何高效地進行數(shù)據(jù)請求,處理響應(yīng),本文將帶您深入了解在 Vue 3 中如何與后端 API 進行交互,并通過示例代碼幫助您快速上手,需要的朋友可以參考下
    2025-01-01
  • Vue3的vite中圖片動態(tài)加載3種方式

    Vue3的vite中圖片動態(tài)加載3種方式

    這篇文章主要給大家介紹了關(guān)于Vue3的vite中圖片動態(tài)加載3種方式的相關(guān)資料,圖片進入可視區(qū)域,進行動態(tài)加載圖片操作,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • vue實現(xiàn)購物車加減

    vue實現(xiàn)購物車加減

    這篇文章主要為大家詳細(xì)介紹了vue實現(xiàn)購物車加減,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • Vue使用moment將GMT時間轉(zhuǎn)換為北京時間

    Vue使用moment將GMT時間轉(zhuǎn)換為北京時間

    GMT(Greenwich Mean Time)和UTC(Coordinated Universal Time)是兩個時間標(biāo)準(zhǔn),它們在許多方面非常相似,但也有一些微小的差異,本文給大家詳細(xì)介紹了Vue使用moment將GMT時間轉(zhuǎn)換為北京時間,需要的朋友可以參考下
    2023-12-12
  • vue開發(fā)樹形結(jié)構(gòu)組件(組件遞歸)

    vue開發(fā)樹形結(jié)構(gòu)組件(組件遞歸)

    這篇文章主要為大家詳細(xì)介紹了vue開發(fā)樹形結(jié)構(gòu)組件的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • vue實現(xiàn)在data里引入相對路徑

    vue實現(xiàn)在data里引入相對路徑

    這篇文章主要介紹了vue實現(xiàn)在data里引入相對路徑,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06

最新評論

曲阜市| 杭州市| 新和县| 临高县| 安顺市| 商洛市| 伊宁市| 兴业县| 赤水市| 温宿县| 永福县| 习水县| 五指山市| 南宁市| 富平县| 武威市| 山东省| 隆化县| 南宫市| 石棉县| 龙游县| 万州区| 溆浦县| 米泉市| 休宁县| 四会市| 榆社县| 汉源县| 商南县| 万全县| 安阳县| 南乐县| 衡阳县| 娱乐| 祁连县| 满城县| 五峰| 平武县| 望城县| 汾阳市| 阳曲县|