title: How to check if a request was made over HTTP or HTTPS
body: <p>I am trying to redirect the API call to HTTPS if an api call is made to HTTP, But I get an nil in r.URL.Scheme and r.TLS  for both HTTP and HTTPS calls</p>
  
  <pre><code>func main() {
      r := mux.NewRouter()
      r.HandleFunc("/info", infoHandler).Methods("GET")   
      portString := fmt.Sprintf(":%s", getPorts())
  
      if cfenv.IsRunningOnCF() == true {
          r.Use(redirectTLS)
      }
  
      if err := http.ListenAndServe(portString, r); err != nil {
          panic(err)
      }
  
  }
  
  func redirectTLS(next http.Handler) http.Handler {
      return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
  
          //if r.URL.Scheme != "https" {
          if r.TLS == nil {
              log.Info("Redirecting to HTTPS")
              //targetUrl := url.URL{Scheme: "https", Host: r.Host, Path: r.URL.Path, RawQuery: r.URL.RawQuery}
              http.Redirect(w, r, "https://"+r.Host+r.RequestURI, http.StatusMovedPermanently)
              //http.Redirect(w, r, targetUrl, http.StatusMovedPermanently)
              return
          }
  
          log.Info("Not Redirecting to HTTPS")
          next.ServeHTTP(w, r)
          return
      })
  }
  </code></pre>