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

詳解如何在Golang中實現(xiàn)CORS(跨域)

 更新時間:2023年10月17日 08:49:33   作者:jefffff  
很多時候,需要允許Web應用程序在不同域之間(跨域)實現(xiàn)共享資源,本文將簡介跨域、CORS的概念,以及如何在Golang中如何實現(xiàn)CORS,文中有詳細的示例代碼,需要的朋友可以參考下

什么是跨域

如果兩個 URL 的協(xié)議、端口(如果有指定的話)和主機都相同的話,則這兩個 URL 是同源的。例如

URL結果原因
http://store.company.com/dir2/other.html同源只有路徑不同
http://store.company.com/dir/inner/another.html同源只有路徑不同
https://store.company.com/secure.html失敗協(xié)議不同
http://store.company.com:81/dir/etc.html失敗端口不同(http:// 默認端口是 80)
http://store.company.com:81/dir/etc.html失敗主機不同

什么是CORS

跨域資源共享(Cross-origin resource sharing,CORS),用于讓網頁的受限資源能夠被其他域名的頁面訪問的一種機制。通過該機制,頁面能夠自由地使用不同源的圖片、樣式、腳本、iframes以及視頻。一些跨域的請求(特別是Ajax)常常會被同源策略(Same-origin policy)所禁止??缭促Y源共享定義了一種方式,為的是瀏覽器和服務器之間能互相確認是否足夠安全以至于能使用跨源請求(cross-origin requests)。比起純粹的同源請求,這將更為自由和功能性的(functionality),但比純粹的跨源請求更為安全。---維基百科

實現(xiàn)原理

跨域資源共享標準描述了,新的HTTP頭部在瀏覽器有權限的時候,應該以如何的形式發(fā)送請求到遠程URLs。雖然服務器會有一些校驗和認證,但是瀏覽器有責任去支持這些頭部以及增加相關的限制。對于能夠修改數(shù)據(jù)的Ajax和HTTP請求方法(特別是 GET 以外的 HTTP 請求,或者搭配某些 MIME 類型的 POST 請求),瀏覽器必須首先使用 OPTIONS 方法發(fā)起一個預檢請求(preflight request),從而獲知服務端是否允許該跨源請求。服務器確認允許之后,才發(fā)起實際的 HTTP 請求。在預檢請求的返回中,服務器端也可以通知客戶端,是否需要攜帶身份憑證(包括 Cookies 和 HTTP 認證相關數(shù)據(jù))。

Go是如何實現(xiàn)

在Golang中,可以使用HTTP處理程序和中間件來實現(xiàn)CORS。接著我們以Gin為例

package main
import (
	"github.com/gin-gonic/gin"
	"net/http"
)
func main() {
	router := gin.Default()
	// CORS中間件
	cors := func(c *gin.Context) {
		// 允許特定的域進行跨域請求
		c.Writer.Header().Set("Access-Control-Allow-Origin", "http://mysite.vip")
		// 允許特定的請求方法
		c.Writer.Header().Set("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE")
		// 允許特定的請求頭
		c.Writer.Header().Set("Access-Control-Allow-Headers", "Content-Type, Authorization")
		// 允許攜帶身份憑證(如Cookie)
		c.Writer.Header().Set("Access-Control-Allow-Credentials", "true")
		// 繼續(xù)處理請求
		c.Next()
	}
	// 應用CORS中間件到所有路由
	router.Use(cors)
	// 定義一個路由和處理器函數(shù)
	router.GET("/hello-world", func(c *gin.Context) {
		c.String(http.StatusOK, "Hello, World!")
	})
	router.Run(":8080")
}

輸出

[GIN-debug] GET /hello-world --> main.main.func2 (4 handlers)
[GIN-debug] Listening and serving HTTP on :8080

在上例中,設置了Access-Control-Allow-Origin響應頭,指定允許跨域請求的域名。您可以根據(jù)需要設置為特定域名、通配符*(允許所有域名)或動態(tài)獲取請求頭中的Origin值。另外,還設置了允許的請求方法、請求頭以及是否允許攜帶身份憑證(如Cookie)。

測試

這里通過命令行curl來驗證,如果返回結果中出現(xiàn) CORS 相關的 header( ccess-Control-Allow-Origin: * < Access-Control-Allow-Methods: * < Access-Control-Allow-Headers: * < Access-Control-Expose-Headers: * < Access-Control-Max-Age: 5 ),則跨域成功。結果如下:

#curl -i -k http://127.0.0.1:8080/hello-world
HTTP/1.1 200 OK
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Content-Type, Authorization
Access-Control-Allow-Methods: GET, POST, PUT, DELETE
Access-Control-Allow-Origin: http://mysite.vip
Content-Type: text/plain; charset=utf-8
Date: Sat, 14 Oct 2023 13:42:35 GMT
Content-Length: 13
Hello, World!

Success

以上就是詳解如何在Golang中實現(xiàn)CORS(跨域)的詳細內容,更多關于Golang實現(xiàn)CORS的資料請關注腳本之家其它相關文章!

相關文章

  • golang解析json數(shù)據(jù)的4種方法總結

    golang解析json數(shù)據(jù)的4種方法總結

    在日常工作中每一名開發(fā)者,不管是前端還是后端,都經常使用 JSON,下面這篇文章主要給大家介紹了關于golang解析json數(shù)據(jù)的4種方法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-06-06
  • Golang連接PostgreSQL基本操作的實現(xiàn)

    Golang連接PostgreSQL基本操作的實現(xiàn)

    PostgreSQL是常見的免費的大型關系型數(shù)據(jù)庫,本文主要介紹了Golang連接PostgreSQL基本操作的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2024-02-02
  • 解決golang讀取http的body時遇到的坑

    解決golang讀取http的body時遇到的坑

    這篇文章主要介紹了解決golang讀取http的body時遇到的坑,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • golang值接收者和指針接收者的區(qū)別介紹

    golang值接收者和指針接收者的區(qū)別介紹

    這篇文章主要介紹了golang值接收者和指針接收者的區(qū)別,它和函數(shù)的區(qū)別在于方法有一個接收者,給一個函數(shù)添加一個接收者,那么它就變成了方法,接收者可以是值接收者,也可以是指針接收者,本文通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-08-08
  • 詳解使用Go添加Nginx代理的方法示例

    詳解使用Go添加Nginx代理的方法示例

    這篇文章主要介紹了詳解使用Go添加Nginx代理的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-11-11
  • 詳解如何在Golang中監(jiān)聽多個channel

    詳解如何在Golang中監(jiān)聽多個channel

    這篇文章主要為大家詳細介紹了如何在Golang中實現(xiàn)監(jiān)聽多個channel,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-03-03
  • 提升Golang應用性能:深入理解Context的應用

    提升Golang應用性能:深入理解Context的應用

    本文將深入探討如何通過深入理解和正確應用Go語言中的Context來提升應用性能。需要的朋友可以參考下
    2023-09-09
  • 在Go中使用JSON(附demo)

    在Go中使用JSON(附demo)

    Go開發(fā)人員經常需要處理JSON內容,本文主要介紹了在Go中使用JSON,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Golang為什么占用那么多的虛擬內存原理解析

    Golang為什么占用那么多的虛擬內存原理解析

    這篇文章主要介紹了Golang為什么占用那么多的虛擬內存原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • GoLang中的sync包Once使用執(zhí)行示例

    GoLang中的sync包Once使用執(zhí)行示例

    這篇文章主要介紹了GoLang中的sync包Once使用執(zhí)行示例,沒有學習Once前,大家可能想到 聲明一個標識,表示是否初始化過,然后初始化這個標識加鎖,更新這個標識,Once包主要用于在并發(fā)執(zhí)行代碼的時候,某部分代碼只會被執(zhí)行一次
    2023-03-03

最新評論