婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

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

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

熱門標簽:百度地圖標注后傳給手機 涿州代理外呼系統 壽光微信地圖標注 excel地圖標注分布數據 外呼系統顯本地手機號 阿克蘇地圖標注 評價高的400電話辦理 外呼系統用什么卡 電話機器人軟件免費

錯誤寫法

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")             //返回數據格式是json
    r.ParseForm()
    fmt.Println("收到客戶端請求: ", r.Form)

這樣還是會報錯:

說沒有得到響應跨域的頭,chrome的network中確實沒有響應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
    }
    // 響應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)
}

補充:go http允許跨域

1.創建中間件

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())

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

您可能感興趣的文章:
  • Django開發RESTful API實現增刪改查(入門級)
  • Django restful framework生成API文檔過程詳解
  • Django JWT Token RestfulAPI用戶認證詳解
  • Python利用Django如何寫restful api接口詳解
  • 詳解Django rest_framework實現RESTful API
  • 詳解Go語言RESTful JSON API創建
  • 基于Go語言構建RESTful API服務

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

巨人網絡通訊聲明:本文標題《go 原生http web 服務跨域restful api的寫法介紹》,本文關鍵詞  原生,http,web,服務,跨域,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《go 原生http web 服務跨域restful api的寫法介紹》相關的同類信息!
  • 本頁收集關于go 原生http web 服務跨域restful api的寫法介紹的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 安岳县| 仁寿县| 温宿县| 突泉县| 百色市| 嵊泗县| 西宁市| 伊宁市| 广州市| 铁岭市| 类乌齐县| 盐源县| 铅山县| 霍山县| 随州市| 土默特右旗| 博湖县| 华坪县| 孙吴县| 湘阴县| 邹平县| 绥阳县| 北票市| 石河子市| 山丹县| 凌海市| 松原市| 同心县| 高州市| 浪卡子县| 柳州市| 清流县| 股票| 封开县| 阿合奇县| 石林| 宾川县| 玉林市| 神池县| 阜宁县| 高青县|