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

golang實現(xiàn)跨域訪問的方法

 更新時間:2019年01月30日 09:45:45   作者:benben_2015  
這篇文章主要介紹了golang實現(xiàn)跨域訪問的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

前端通過Ajax來獲取服務器資源時,會存在跨域問題。因為Ajax只能同源使用(預防某些惡意行為),所以當訪問不在同一個域中的資源時,就會出現(xiàn)跨域限制。尤其在開發(fā)和測試時,跨域問題會給前端測試帶來非常不便。

不過CORS(Cross-Origin Resource Sharing,跨域資源共享)解決了這個問題,它背后的基本思想是:使用自定義的HTTP頭部讓瀏覽器與服務器進行溝通,從而決定請求或響應是否應該成功。CORS需要瀏覽器和服務器同時支持。整個CORS通信過程,瀏覽器是自動完成,而服務器需要手動配置。

ajax.html

<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport"
     content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <script>
    function loadXMLDoc() {
      var xmlhttp;
      if (window.XMLHttpRequest) {
        xmlhttp = new XMLHttpRequest();
      }
      else {
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
      }
      xmlhttp.onreadystatechange = function () {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
          document.getElementById("myDiv").innerHTML = xmlhttp.responseText;
        }
      }
      xmlhttp.open("GET", "http://127.0.0.1:8000/ajax", true);
      xmlhttp.send();
    }
  </script>
  <title>Document</title>
</head>
<body>
  <h2>cross origin</h2>
  <button type="button" onclick="loadXMLDoc()">請求數(shù)據(jù)</button>
  <div id="myDiv"></div>
</body>
</html>

crossorigin.go

package main

import (
  "net/http"
  "html/template"
  "fmt"
  "encoding/json"
)

type Message struct {
  Name string `json:"name"`
  Msg string `json:"msg"`
}

func main() {
  http.HandleFunc("/", Entrance)
  http.HandleFunc("/ajax", TestCrossOrigin)
  http.ListenAndServe(":8000", nil)
}

func Entrance(w http.ResponseWriter, r *http.Request) {
  t,_:=template.ParseFiles("templates/ajax.html")
  t.Execute(w, nil)
}

func TestCrossOrigin(w http.ResponseWriter, r *http.Request) {
  if r.Method == "GET" {
    var message Message
    message.Name = "benben_2015"
    message.Msg = "success"

    result, err := json.Marshal(message)
    if err != nil {
      fmt.Println(err)
      return
    }
    ResponseWithOrigin(w, r, http.StatusOK, result)
    return
  }
}
func ResponseWithOrigin(w http.ResponseWriter, r *http.Request, code int, json []byte) {
  w.Header().Set("Content-Type", "application/json; charset=utf-8")
  w.WriteHeader(code)
  w.Write(json)
}

當從 http://localhost:8000/ 頁面(ajax.html)通過ajax訪問 http://localhost:8000/ajax 時,就會出現(xiàn)下圖所示的錯誤:

 

解決方法: golang設置HTTP頭部相當簡單,標準包有現(xiàn)成的方法可以使用。只要在服務器端的響應頭中添加下面一句代碼就可以正常訪問了。

w.Header().Set("Access-Control-Allow-Origin", "*")
//"*"表示接受任意域名的請求,這個值也可以根據(jù)自己需要,設置成不同域名

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • GO語言基本類型分析

    GO語言基本類型分析

    這篇文章主要介紹了GO語言基本類型,較為詳細的分析了整形、浮點型、字符串、指針等類型的具體用法,是深入學習GO語言所必須掌握的重要基礎,需要的朋友可以參考下
    2014-12-12
  • go語言的初始化順序,包,變量,init詳解

    go語言的初始化順序,包,變量,init詳解

    這篇文章主要介紹了go語言的初始化順序,包,變量,init詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • 詳解如何利用GORM實現(xiàn)MySQL事務

    詳解如何利用GORM實現(xiàn)MySQL事務

    為了確保數(shù)據(jù)一致性,在項目中會經(jīng)常用到事務處理,對于MySQL事務相信大家應該都不陌生。這篇文章主要總結(jié)一下在Go語言中Gorm是如何實現(xiàn)事務的;感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助
    2022-09-09
  • golang通過http訪問外部網(wǎng)址的操作方法

    golang通過http訪問外部網(wǎng)址的操作方法

    這篇文章主要介紹了golang通過http訪問外部網(wǎng)址的操作方法,分為?get方式訪問外部的接口,Post方式請求外部接口,本文通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2024-02-02
  • 淺談GO中的Channel以及死鎖的造成

    淺談GO中的Channel以及死鎖的造成

    本文主要介紹了淺談GO中的Channel以及死鎖的造成,文中根據(jù)實例編碼詳細介紹的十分詳盡,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • go語法入門any類型的使用場景示例詳解

    go語法入門any類型的使用場景示例詳解

    這篇文章主要為大家介紹了go語法入門any類型的使用場景示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • Go Time庫中時間和日期相關(guān)的操作方法整理

    Go Time庫中時間和日期相關(guān)的操作方法整理

    這篇文章主要為大家整理了Go語言中的time庫,包括時間、日期和時區(qū)等相關(guān)概念及使用方法,希望通過掌握這些知識,大家可以更好地處理時間、日期和時區(qū)相關(guān)的問題
    2023-08-08
  • Golang學習之反射機制的用法詳解

    Golang學習之反射機制的用法詳解

    反射的本質(zhì)就是在程序運行的時候,獲取對象的類型信息和內(nèi)存結(jié)語構(gòu),反射是把雙刃劍,功能強大但可讀性差。本文將詳細講講Golang中的反射機制,感興趣的可以了解一下
    2022-06-06
  • 一文帶你掌握GoLang中的指針

    一文帶你掌握GoLang中的指針

    針是?Go?編程語言的重要組成部分,它們提供了一種直接引用和操作內(nèi)存中數(shù)據(jù)的方法,在這篇文章中,我們將探討一些技巧和技巧,以掌握?GoLang?中的指針并編寫高效的代碼,需要的可以參考一下
    2023-05-05
  • GoLang中Module的基本使用方法

    GoLang中Module的基本使用方法

    Go module是從Go 1.11版本才引入的新功能,下面這篇文章主要給大家介紹了關(guān)于GoLang中Module的基本使用方法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-01-01

最新評論

南平市| 大关县| 麻阳| 石楼县| 永清县| 化隆| 新民市| 宣汉县| 遂川县| 射阳县| 基隆市| 东至县| 怀安县| 平度市| 泸水县| 诸暨市| 遂溪县| 满城县| 射阳县| 通榆县| 嘉祥县| 石泉县| 金平| 家居| 宁陵县| 尉犁县| 麟游县| 大荔县| 济阳县| 克什克腾旗| 定陶县| 汕头市| 建始县| 明光市| 东宁县| 博野县| 临桂县| 建阳市| 施秉县| 崇仁县| 香河县|