>  기사  >  백엔드 개발  >  Go에서 현재 요청 URL의 구성표를 결정하는 방법은 무엇입니까?

Go에서 현재 요청 URL의 구성표를 결정하는 방법은 무엇입니까?

DDD
DDD원래의
2024-11-03 17:35:03798검색

How to Determine the Scheme of the Current Request URL in Go?

Go에서 현재 요청 URL의 스키마 결정

Ruby/Rack에서는 Scheme#request를 사용하여 현재 요청 URL의 스키마를 검색할 수 있습니다. 그러나 Go에서는 http.Request.URL.Scheme이 빈 문자열을 반환합니다. 체계를 올바르게 얻으려면 다음 접근 방식을 고려해야 합니다.

HTTP 및 HTTPS 프로토콜을 제공하려면 동일한 핸들러로 http.ListenAndServe() 및 http.ListenAndServeTLS()를 동시에 사용해야 합니다. http.ListenAndServe()만 사용하면 HTTP 프로토콜만 수신하게 됩니다.

TLS를 통한 HTTP인 HTTPS는 http.Request 객체에 TLS 속성을 제공합니다. 이 속성은 요청에 사용된 TLS에 대한 정보가 포함된 *tls.ConnectionState 객체를 반환합니다.

클라이언트가 사용하는 체계를 확인하려면 요청의 TLS 속성을 검사하세요.

  • r.TLS가 nil이 아닌 경우 체계는 HTTPS였습니다.
  • r.TLS가 nil인 경우 체계는 HTTP였습니다.

다음은 이 접근 방식을 보여주는 업데이트된 코드 예제입니다. :

<code class="go">package main

import (
    "fmt"
    "log"
    "net/http"
    "net/http/httputil"
)

func handler(w http.ResponseWriter, r *http.Request) {
    // ...
    if r.TLS == nil {
        // the scheme was HTTP
    } else {
        // the scheme was HTTPS
    }
}

func main() {
    http.HandleFunc("/", handler)
    go func() {
        log.Fatal(http.ListenAndServeTLS(":8443", "localhost.crt", "localhost.key", nil))
    }()
    log.Fatal(http.ListenAndServe(":8080", nil))
}</code>

위 내용은 Go에서 현재 요청 URL의 구성표를 결정하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.