Go에서 요청 URL의 스키마 찾기
Ruby/Rack에서 현재 요청 URL의 스키마를 검색하는 것은 다음을 사용하여 간단합니다. 계획#요청 방법. 그러나 Go에서는 http.Request.URL.Scheme이 빈 문자열을 생성합니다.
문제 이해
빈 문자열 뒤에 있는 이유는 Go가 두 가지 모두를 지원하기 때문입니다. 기본적으로 HTTP 및 HTTPS입니다. http.ListenAndServe()만 사용하면 HTTP만 제공하게 됩니다. 반대로, http.ListenAndServeTLS()만 사용하면 HTTPS로 제한됩니다.
해결 방법: TLS 연결 상태 사용
이 문제를 해결하려면 http의 TLS 속성을 활용하세요. 요구. 이 속성은 요청에 사용된 모든 TLS에 대한 정보를 공개하는 *tls.ConnectionState를 제공합니다. TLS 속성을 확인하면 클라이언트가 사용하는 구성표를 확인할 수 있습니다.
<code class="go">func handler(w http.ResponseWriter, r *http.Request) { if r.TLS == nil { fmt.Fprintf(w, "HTTP") } else { fmt.Fprintf(w, "HTTPS") } }</code>
업데이트된 주요 기능
또한 다음을 사용하여 HTTP 및 HTTPS 프로토콜을 모두 제공합니다. 두 가지 듣기 기능:
<code class="go">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 중국어 웹사이트의 기타 관련 기사를 참조하세요!