この記事は 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 サイトの他の関連記事を参照してください。