亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Golang多個域名的跨域資源共享的實現(xiàn)

 更新時間:2025年02月17日 09:47:01   作者:gskyi  
本文主要介紹了Golang多個域名的跨域資源共享的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

在 Golang 中,處理多個域名的跨域資源共享 (CORS) 可以通過動態(tài)檢查 Origin 并設(shè)置響應(yīng)頭來實現(xiàn)。以下是基于 Golang 的實現(xiàn)示例。

1. 動態(tài)判斷域名并設(shè)置 CORS

根據(jù)請求的 Origin,判斷是否允許,并動態(tài)設(shè)置 Access-Control-Allow-Origin。

示例代碼

package main

import (
	"net/http"
)

func main() {
	allowedOrigins := []string{
		"https://example1.com",
		"https://example2.com",
		"https://example3.com",
	}

	http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
		origin := r.Header.Get("Origin")
		for _, o := range allowedOrigins {
			if origin == o {
				w.Header().Set("Access-Control-Allow-Origin", origin)
				w.Header().Set("Access-Control-Allow-Credentials", "true")
				w.Header().Set("Access-Control-Allow-Methods", "GET, POST, OPTIONS")
				w.Header().Set("Access-Control-Allow-Headers", "Content-Type, Authorization")
				break
			}
		}

		// Handle preflight request
		if r.Method == http.MethodOptions {
			w.WriteHeader(http.StatusNoContent)
			return
		}

		// Example response for other requests
		w.Write([]byte("CORS configured!"))
	})

	http.ListenAndServe(":8080", nil)
}

2. 使用第三方庫 (Gin 框架)

如果使用 Gin,可以通過中間件實現(xiàn)動態(tài)域名的 CORS。

示例代碼

package main

import (
	"github.com/gin-gonic/gin"
)

func main() {
	allowedOrigins := []string{
		"https://example1.com",
		"https://example2.com",
		"https://example3.com",
	}

	r := gin.Default()

	// 自定義中間件處理 CORS
	r.Use(func(c *gin.Context) {
		origin := c.Request.Header.Get("Origin")
		for _, o := range allowedOrigins {
			if origin == o {
				c.Writer.Header().Set("Access-Control-Allow-Origin", origin)
				c.Writer.Header().Set("Access-Control-Allow-Credentials", "true")
				c.Writer.Header().Set("Access-Control-Allow-Methods", "GET, POST, OPTIONS")
				c.Writer.Header().Set("Access-Control-Allow-Headers", "Content-Type, Authorization")
				break
			}
		}

		// 如果是 OPTIONS 請求,提前返回
		if c.Request.Method == "OPTIONS" {
			c.AbortWithStatus(204)
			return
		}

		c.Next()
	})

	r.GET("/", func(c *gin.Context) {
		c.JSON(200, gin.H{"message": "CORS configured!"})
	})

	r.Run(":8080")
}

3. Nginx 配合 Golang 實現(xiàn)多個域名 CORS

如果使用 Nginx 作為反向代理,CORS 的域名過濾可以在 Nginx 層處理。具體配置如下:

示例 Nginx 配置

server {
    listen 80;
    server_name yourdomain.com;

    location / {
        set $cors "";
        if ($http_origin ~* "(https://example1\.com|https://example2\.com|https://example3\.com)") {
            set $cors $http_origin;
        }
        add_header Access-Control-Allow-Origin $cors;
        add_header Access-Control-Allow-Credentials true;
        add_header Access-Control-Allow-Methods "GET, POST, OPTIONS";
        add_header Access-Control-Allow-Headers "Content-Type, Authorization";

        # Pass the request to your Golang app
        proxy_pass http://127.0.0.1:8080;
    }
}

注意事項

  • OPTIONS 請求處理:

    • OPTIONS 請求是瀏覽器發(fā)送的預(yù)檢請求,用于檢查是否允許跨域。
    • 必須對 OPTIONS 請求快速響應(yīng),返回 204 狀態(tài)碼。
  • 安全性:

    • 確保只允許可信的 Origin。
    • 防止 CORS 頭注入漏洞,嚴(yán)格驗證請求頭。
  • Access-Control-Allow-Credentials 限制:

    • 如果設(shè)置 Access-Control-Allow-Credentials: true,Access-Control-Allow-Origin 不能是 *,必須指定具體的域名。

 到此這篇關(guān)于Golang多個域名的跨域資源共享的實現(xiàn)的文章就介紹到這了,更多相關(guān)Golang 跨域資源共享內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • golang elasticsearch Client的使用詳解

    golang elasticsearch Client的使用詳解

    這篇文章主要介紹了golang elasticsearch Client的使用詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • Go語言LeetCode題解1046最后一塊石頭的重量

    Go語言LeetCode題解1046最后一塊石頭的重量

    這篇文章主要為大家介紹了Go語言LeetCode題解1046最后一塊石頭的重量,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • 一文帶你理解Golang中的Time結(jié)構(gòu)

    一文帶你理解Golang中的Time結(jié)構(gòu)

    根據(jù)golang的time包的文檔可以知道,golang的time結(jié)構(gòu)中存儲了兩種時鐘,一種是Wall?Clocks,一種是Monotonic?Clocks,下面我們就來簡單了解一下這兩種結(jié)構(gòu)吧
    2023-09-09
  • 基于Go+OpenCV實現(xiàn)人臉識別功能的詳細(xì)示例

    基于Go+OpenCV實現(xiàn)人臉識別功能的詳細(xì)示例

    OpenCV是一個強(qiáng)大的計算機(jī)視覺庫,提供了豐富的圖像處理和計算機(jī)視覺算法,本文將向你介紹在Mac上安裝OpenCV的步驟,并演示如何使用Go的OpenCV綁定庫進(jìn)行人臉識別,需要的朋友可以參考下
    2023-07-07
  • 淺析golang開發(fā)Error的使用詳解

    淺析golang開發(fā)Error的使用詳解

    Error是Go語言開發(fā)中最基礎(chǔ)也是最重要的部分,很多朋友不明白goland error的一些基本使用方法,今天通過本文給大家詳細(xì)介紹下,需要的朋友參考下吧
    2021-07-07
  • Go語言實現(xiàn)熱更新具體步驟

    Go語言實現(xiàn)熱更新具體步驟

    這篇文章主要為大家介紹了Go語言實現(xiàn)熱更新具體步驟詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • 對Go語言中的context包源碼分析

    對Go語言中的context包源碼分析

    這篇文章主要對Go語言中的context包源碼進(jìn)行分析,context包析是1.15,context包定義了一個Context類型過這個Context接口類型,?就可以跨api邊界/跨進(jìn)程傳遞一些值,下面我們就來對context包源碼進(jìn)行分析,需要的小伙伴可以參考一下
    2022-02-02
  • Golang分布式注冊中心實現(xiàn)流程講解

    Golang分布式注冊中心實現(xiàn)流程講解

    這篇文章主要介紹了Golang分布式注冊中心實現(xiàn)流程,注冊中心可以用于服務(wù)發(fā)現(xiàn),服務(wù)注冊,配置管理等方面,在分布式系統(tǒng)中,服務(wù)的發(fā)現(xiàn)和注冊是非常重要的組成部分,需要的朋友可以參考下
    2023-05-05
  • Golang如何調(diào)用windows下的dll動態(tài)庫中的函數(shù)

    Golang如何調(diào)用windows下的dll動態(tài)庫中的函數(shù)

    這篇文章主要介紹了Golang如何調(diào)用windows下的dll動態(tài)庫中的函數(shù)方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • Go語言基礎(chǔ)函數(shù)基本用法及示例詳解

    Go語言基礎(chǔ)函數(shù)基本用法及示例詳解

    這篇文章主要為大家介紹了Go語言基礎(chǔ)函數(shù)基本用法及示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2021-11-11

最新評論