欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

go 原生http web 服務(wù)跨域restful api的寫法介紹

 更新時(shí)間:2021年04月27日 14:55:36   作者:過兒9973  
這篇文章主要介紹了go 原生http web 服務(wù)跨域restful api的寫法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧

錯(cuò)誤寫法

func main() {
    openHttpListen()
}
func openHttpListen() {
    http.HandleFunc("/", receiveClientRequest)
    fmt.Println("go server start running...")
    err := http.ListenAndServe(":9090", nil)
    if err != nil {
        log.Fatal("ListenAndServe: ", err)
    }
}
func receiveClientRequest(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Access-Control-Allow-Origin", "*")             //允許訪問所有域
    w.Header().Add("Access-Control-Allow-Headers", "Content-Type") //header的類型
    w.Header().Set("content-type", "application/json")             //返回?cái)?shù)據(jù)格式是json
    r.ParseForm()
    fmt.Println("收到客戶端請(qǐng)求: ", r.Form)

這樣還是會(huì)報(bào)錯(cuò):

說沒有得到響應(yīng)跨域的頭,chrome的network中確實(shí)沒有響應(yīng)Access-Control-Allow-Origin

正確寫法:

func LDNS(w http.ResponseWriter, req *http.Request) {
    if origin := req.Header.Get("Origin"); origin != "" {
        w.Header().Set("Access-Control-Allow-Origin", origin)
        w.Header().Set("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE")
        w.Header().Set("Access-Control-Allow-Headers",
            "Accept, Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization")
    }
    if req.Method == "OPTIONS" {
        return
    }
    // 響應(yīng)http code
    w.WriteHeader(200)
    query := strings.Split(req.Host, ".")
    value, err := ldns.RAMDBMgr.Get(query[0])
    fmt.Println("Access-Control-Allow-Origin", "*")
    if err != nil {
        io.WriteString(w, `{"message": ""}`)
        return
    }
    io.WriteString(w, value)
}

補(bǔ)充:go http允許跨域

1.創(chuàng)建中間件

import (
 "github.com/gin-gonic/gin"
 "net/http"
)
// 跨域中間件
func Cors() gin.HandlerFunc {
 return func(c *gin.Context) {
  method := c.Request.Method
  origin := c.Request.Header.Get("Origin")
  if origin != "" {
   c.Header("Access-Control-Allow-Origin", origin)
   c.Header("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE, UPDATE")
   c.Header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization")
   c.Header("Access-Control-Expose-Headers", "Content-Length, Access-Control-Allow-Origin, Access-Control-Allow-Headers, Cache-Control, Content-Language, Content-Type")
   c.Header("Access-Control-Allow-Credentials", "false")
   c.Set("content-type", "application/json")
  }
  if method == "OPTIONS" {
   c.AbortWithStatus(http.StatusNoContent)
  }
  c.Next()
 }
}

2.在route中引用中間件

router := gin.Default()
// 要在路由組之前全局使用「跨域中間件」, 否則OPTIONS會(huì)返回404
router.Use(Cors())

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • 在Go中使用jwt的教程詳解

    在Go中使用jwt的教程詳解

    JWT (JSON Web Tokens) 是一種基于 JSON 格式的輕量級(jí)身份驗(yàn)證和授權(quán)方案,用于在各方之間以JSON方式安全地傳輸信息,本文給大家詳細(xì)介紹了在Go中使用jwt的教程,文中通過代碼示例講解的非常詳細(xì),需要的朋友可以參考下
    2024-06-06
  • VSCode1.4 搭建Golang的開發(fā)調(diào)試環(huán)境(遇到很多問題)

    VSCode1.4 搭建Golang的開發(fā)調(diào)試環(huán)境(遇到很多問題)

    這篇文章主要介紹了VSCode1.4 搭建Golang的開發(fā)調(diào)試環(huán)境(遇到很多問題),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • 利用go語言實(shí)現(xiàn)查找二叉樹中的最大寬度

    利用go語言實(shí)現(xiàn)查找二叉樹中的最大寬度

    這篇文章主要介紹了利用go語言實(shí)現(xiàn)查找二叉樹中的最大寬度,文章圍繞主題展開詳細(xì)介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-05-05
  • GScript?編寫標(biāo)準(zhǔn)庫示例詳解

    GScript?編寫標(biāo)準(zhǔn)庫示例詳解

    這篇文章主要為大家介紹了GScript?編寫標(biāo)準(zhǔn)庫示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • 詳解Go語言中如何高效遍歷目錄

    詳解Go語言中如何高效遍歷目錄

    目錄遍歷是一個(gè)很常見的操作,它的使用場(chǎng)景有如文件目錄查看、文件系統(tǒng)清理、日志分析、項(xiàng)目構(gòu)建等,本文將詳細(xì)介紹在Go中幾種遍歷目錄文件的方法,需要的可以參考下
    2024-02-02
  • Golang當(dāng)中的定時(shí)器實(shí)例詳解

    Golang當(dāng)中的定時(shí)器實(shí)例詳解

    這篇文章主要給大家介紹了關(guān)于Golang當(dāng)中定時(shí)器的相關(guān)資料,定時(shí)器的實(shí)現(xiàn)大家應(yīng)該都遇到過,最近在學(xué)習(xí)golang,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • Go語言LeetCode題解682棒球比賽

    Go語言LeetCode題解682棒球比賽

    這篇文章主要為大家介紹了Go語言LeetCode題解682棒球比賽示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • Golang連接Redis數(shù)據(jù)庫的方法

    Golang連接Redis數(shù)據(jù)庫的方法

    這篇文章主要介紹了Golang連接Redis數(shù)據(jù)庫的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • HTTP服務(wù)壓力測(cè)試工具及相關(guān)術(shù)語講解

    HTTP服務(wù)壓力測(cè)試工具及相關(guān)術(shù)語講解

    這篇文章主要為大家介紹了HTTP服務(wù)壓力測(cè)試工具使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-04-04
  • 一文幫你搞懂Go面試中常問的channel問題

    一文幫你搞懂Go面試中常問的channel問題

    channel是Golang面試時(shí)經(jīng)常會(huì)問到的問題,所以這篇文章為大家整理了channel??嫉囊恍﹩栴}以及回答,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-06-06

最新評(píng)論