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

golang中判斷請求是http還是https獲取當(dāng)前訪問地址

 更新時間:2023年10月07日 16:19:33   作者:雪狼騎兵  
這篇文章主要為大家介紹了golang中判斷請求是http還是https獲取當(dāng)前訪問地址示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

在線客服系統(tǒng)的開發(fā)日志

今天給客服系統(tǒng)增加了一項配置,配置企業(yè)微信內(nèi)部群通知機(jī)器人 webhook,當(dāng)有新消息到來的時候,調(diào)用 webhook,推送給企業(yè)微信群。新消息的內(nèi)容里,支持 markdown,可以帶鏈接,就想把當(dāng)前網(wǎng)址的鏈接帶過去,方便直接點擊后去回復(fù)消息。下面是涉及的技術(shù)知識點總結(jié)。

未使用 nginx 等反向代理的情況下

那么可以直接使用下面的代碼來確認(rèn),http.Request 結(jié)構(gòu)體的 TLS 字段判斷請求是否使用了 HTTPS 協(xié)議。如果該字段不為 nil,則說明請求使用了 HTTPS 協(xié)議;否則,說明請求使用了 HTTP 協(xié)議

package main
import (
    "fmt"
    "net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
    if r.TLS != nil {
        fmt.Println("HTTPS request")
    } else {
        fmt.Println("HTTP request")
    }
}
func main() {
    http.HandleFunc("/", handler)
    http.ListenAndServe(":8080", nil)
}

經(jīng)過反向代理的情況下

上面的代碼失效,可以使用下面方法
如果使用了 nginx 反向代理,那么需要確保反代中傳入了下面的 headers 參數(shù) X-Forwarded-Proto

location / {
    proxy_pass http://your_upstream_server;
    proxy_set_header X-Forwarded-Proto $scheme;
}

可以判斷這個 header 來確認(rèn)是否 https

package main
import (
    "fmt"
    "net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
    proto := r.Header.Get("X-Forwarded-Proto")
    if proto == "https" {
        fmt.Println("HTTPS request")
    } else {
        fmt.Println("HTTP request")
    }
}
func main() {
    http.HandleFunc("/", handler)
    http.ListenAndServe(":8080", nil)
}

綜合一下,獲取當(dāng)前訪問地址的函數(shù)

//獲取當(dāng)前訪問的Host
func GetHost(r *http.Request) (Url string) {
    scheme := "http://"
    if r.TLS != nil || r.Header.Get("X-Forwarded-Proto") == "https" {
        scheme = "https://"
    }
    return strings.Join([]string{scheme, r.Host}, "")
}

另外,有客服系統(tǒng)需求的同學(xué),可以訪問下面地址研究測試
gofly.v1kf.com

以上就是golang中判斷請求是http還是https獲取當(dāng)前訪問地址的詳細(xì)內(nèi)容,更多關(guān)于golang判斷請求訪問地址的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • logrus日志自定義格式操作

    logrus日志自定義格式操作

    這篇文章主要介紹了logrus日志自定義格式操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • Go slog 日志打印最佳實踐案例

    Go slog 日志打印最佳實踐案例

    Go 1.21 引入了log/slog 包,為Go語言帶來了原生的結(jié)構(gòu)化日志解決方案,本文將深入探討如何使用slog實現(xiàn)高效、可靠的日志記錄,感興趣的朋友跟隨小編一起看看吧
    2025-10-10
  • Kafka安裝部署+go整合過程

    Kafka安裝部署+go整合過程

    go語言是一種快速、分布式、并發(fā)編程的語言,它天生適合于處理高并發(fā)場景下的消息傳遞和處理,在本文中,我們將介紹Kafka安裝部署+go整合過程,感興趣的朋友一起看看吧
    2024-08-08
  • GoLang五種字符串拼接方式小結(jié)

    GoLang五種字符串拼接方式小結(jié)

    本文主要介紹了GoLang五種字符串拼接方式詳解,包括+操作符、fmt.Sprintf、strings.Builder、bytes.Buffer和strings.Join,具有一定的參考價值,感興趣的可以了解一下
    2025-12-12
  • Golang實現(xiàn)事務(wù)型內(nèi)存數(shù)據(jù)庫的方法詳解

    Golang實現(xiàn)事務(wù)型內(nèi)存數(shù)據(jù)庫的方法詳解

    內(nèi)存數(shù)據(jù)庫經(jīng)我們經(jīng)常用到,例如Redis,那么如何從零實現(xiàn)一個內(nèi)存數(shù)據(jù)庫呢,本文旨在介紹如何使用Golang編寫一個KV內(nèi)存數(shù)據(jù)庫MossDB
    2023-03-03
  • go 實現(xiàn)簡易端口掃描的示例

    go 實現(xiàn)簡易端口掃描的示例

    該功能實現(xiàn)原理很簡單,就是發(fā)送socket連接(IP+端口),如果能連接成功,說明目標(biāo)主機(jī)開放了某端口。當(dāng)要大量掃描端口時,就需要寫并發(fā)編程了。
    2021-05-05
  • Go語言實現(xiàn)高并發(fā)百萬QPS的關(guān)鍵技術(shù)棧

    Go語言實現(xiàn)高并發(fā)百萬QPS的關(guān)鍵技術(shù)棧

    Go語言憑借其輕量級goroutine和高效的調(diào)度器,天然適合高并發(fā)場景,Go語言通過Goroutine調(diào)度優(yōu)化、I/O多路復(fù)用等技術(shù)實現(xiàn)高并發(fā),結(jié)合性能調(diào)優(yōu)與架構(gòu)設(shè)計,可支撐百萬QPS,延遲低于5ms,支持未來擴(kuò)展
    2025-05-05
  • golang1.23版本之前 Timer Reset方法無法正確使用

    golang1.23版本之前 Timer Reset方法無法正確使用

    在Go 1.23之前,使用`time.Reset`函數(shù)時需要先調(diào)用`Stop`并明確從timer的channel中抽取出東西,以避免潛在的問題,然而,這在實際代碼中難以實現(xiàn),因為設(shè)置定時器狀態(tài)和發(fā)送channel的操作并不是原子的,在某些情況下,這會導(dǎo)致timer在不應(yīng)該觸發(fā)時提前觸發(fā)
    2025-01-01
  • 使用Go實現(xiàn)TLS服務(wù)器和客戶端的示例

    使用Go實現(xiàn)TLS服務(wù)器和客戶端的示例

    本文主要介紹了Go實現(xiàn)TLS服務(wù)器和客戶端的示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • Go語言計算兩個經(jīng)度和緯度之間距離的方法

    Go語言計算兩個經(jīng)度和緯度之間距離的方法

    這篇文章主要介紹了Go語言計算兩個經(jīng)度和緯度之間距離的方法,涉及Go語言相關(guān)數(shù)學(xué)函數(shù)的使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02

最新評論

舒城县| 浠水县| 武胜县| 苍南县| 西乌| 宜春市| 聂荣县| 祁连县| 怀柔区| 津南区| 齐齐哈尔市| 台湾省| 泾川县| 东源县| 平远县| 罗平县| 太原市| 仪征市| 萨嘎县| 石家庄市| 门头沟区| 大冶市| 乌拉特前旗| 德兴市| 承德市| 新绛县| 旌德县| 岳普湖县| 汾西县| 竹山县| 大化| 论坛| 苏尼特左旗| 九龙坡区| 平利县| 津市市| 兴国县| 阳江市| 和龙市| 周口市| 虹口区|