亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

更多QQ空间微信QQ好友腾讯朋友复制链接
您的位置:首頁/技術文章
文章詳情頁

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

【字号: 作者:豬豬瀏覽:76日期:2023-02-03 17:53:49

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

前端:Vue + axios

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

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

參數未經 Qs 轉碼,

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

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

出現如下錯誤:

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,如下圖:

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

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

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

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

由于設置的 Authorization 字段,Content-Type 也設置為了 application/json,因此這個請求算復雜跨域請求,會在正式通信前增加一次 OPTIONS 查詢請求,稱為'預檢'請求(preflight request),用于向服務器請求權限等信息,預檢請求被成功響應后,才會發出真實的 POST 請求。

可為什么 OPTIONS 請求返回 404 呢?通過上面的錯誤說明及分析,答案應該很清晰了,就是服務端路由未對 OPTIONS 類型請求做出響應,導致 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,自然無法響應其他類型的請求,使用如下方式定義倒是可響應所有類型的請求:

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

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

其實只要在 CORS 中間件中對 OPTIONS 請求做統一響應即可,上代碼:

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

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

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

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

標簽: IOS
相關文章:
主站蜘蛛池模板: 国产成a人片在线观看视频99 | 韩国福利影视一区二区三区 | 欧美精品在线免费 | 亚洲国产中文字幕 | 国产大片在线播放 | 一本一道久久a久久精品综合 | 国产大片网站 | 国产大片免费观看资源 | 国产不卡在线视频 | 国产成人永久免费视 | 国产精品不卡在线 | 特黄特色大片免费视频播放 | 国产精品成人久久久 | 豆国产97在线 | 中国 | 久久一区二区明星换脸 | 国产精品每日在线观看男人的天堂 | 成人国产精品毛片 | 免费特级黄毛片在线成人观看 | 欧美精品黄页免费高清在线 | 成年视频xxxxx在线入口 | 欧美日韩精品一区二区三区不卡 | 亚洲欧美日韩中另类在线 | 久久精品国产精品亚洲婷婷 | 日韩免费在线 | 一区二区不卡视频 | 日韩在线一区二区三区视频 | 丝袜美女被出水视频一区 | 欧美黄色一级视屏 | 最新91网址| 亚洲欧美专区精品久久 | 亚洲一区二区三区四区视频 | 免费在线观看中日高清生活片 | 国产伦精品一区三区视频 | 香蕉视频色 | 成年女美黄网站大全免费播放 | 妞干网在线视频观看 | 六月婷婷视频 | 亚洲成人免费网站 | 欧美精品在线免费 | 97dyy在线观看手机版 | 日本黄大片在线观看视频 |