主頁 > 知識庫 > go 原生http web 服務(wù)跨域restful api的寫法介紹

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

熱門標(biāo)簽:百度地圖標(biāo)注后傳給手機(jī) 涿州代理外呼系統(tǒng) 壽光微信地圖標(biāo)注 excel地圖標(biāo)注分布數(shù)據(jù) 外呼系統(tǒng)顯本地手機(jī)號 阿克蘇地圖標(biāo)注 評價高的400電話辦理 外呼系統(tǒng)用什么卡 電話機(jī)器人軟件免費(fèi)

錯誤寫法

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("收到客戶端請求: ", r.Form)

這樣還是會報錯:

說沒有得到響應(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會返回404
router.Use(Cors())

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

您可能感興趣的文章:
  • Django開發(fā)RESTful API實(shí)現(xiàn)增刪改查(入門級)
  • Django restful framework生成API文檔過程詳解
  • Django JWT Token RestfulAPI用戶認(rèn)證詳解
  • Python利用Django如何寫restful api接口詳解
  • 詳解Django rest_framework實(shí)現(xiàn)RESTful API
  • 詳解Go語言RESTful JSON API創(chuàng)建
  • 基于Go語言構(gòu)建RESTful API服務(wù)

標(biāo)簽:蘭州 吐魯番 梅河口 汕頭 重慶 銅川 雞西 欽州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《go 原生http web 服務(wù)跨域restful api的寫法介紹》,本文關(guān)鍵詞  原生,http,web,服務(wù),跨域,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《go 原生http web 服務(wù)跨域restful api的寫法介紹》相關(guān)的同類信息!
  • 本頁收集關(guān)于go 原生http web 服務(wù)跨域restful api的寫法介紹的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章