ホームページ  >  記事  >  バックエンド開発  >  Go でリクエストが http か https かを判断する方法を分析した記事

Go でリクエストが http か https かを判断する方法を分析した記事

藏色散人
藏色散人転載
2023-03-02 17:11:023598ブラウズ

この記事は go に関する関連知識を提供します。主に golang でリクエストが http か https (現在のアクセス アドレスを取得するために使用) かを判断する方法について説明します。興味のある友人はぜひご覧ください。皆さんも協力していただければ幸いです。

golang でリクエストが http か https かを判断する - 現在のアクセス アドレスを取得するために使用されます

フリーランスの独立開発者、オンライン カスタマー サービス システムの開発ログ

本日、顧客サービス システムに構成が追加され、エンタープライズ WeChat 内部グループ通知ロボット Webhook が構成されました。新しいメッセージが到着すると、WeChat が呼び出され、エンタープライズ WeChat グループにプッシュされます。新しいメッセージのコンテンツはマークダウンをサポートしており、リンクを取得できます。現在の URL のリンクを取得したい場合は、直接クリックしてメッセージに返信できます。以下に、関連する技術的知識の要点をまとめます。

nginx などのリバース プロキシが使用されていない場合は、次のコードを直接使用して確認できます。リクエストが使用されるHTTPSプロトコル。このフィールドが nil でない場合は、リクエストが HTTPS プロトコルを使用することを意味し、それ以外の場合は、リクエストが HTTP プロトコルを使用することを意味します

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

リバース プロキシの場合

上記のコードは無効です。次の方法を使用できます。

nginx リバース プロキシを使用する場合は、次のヘッダー パラメーター X-Forwarded-Proto がリバース プロキシに渡されることを確認する必要があります

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

このヘッダーを判断することで 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)
}

要約すると、現在のアクセスアドレスを取得する関数

//获取当前访问的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}, "")}
[関連推奨事項:
Go ビデオ チュートリアル

]

以上がGo でリクエストが http か https かを判断する方法を分析した記事の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はlearnku.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。