我试图将我的客户端重定向到 https url。我试过这个:
func index(w http.ResponseWriter, r *http.Request) {
if r.URL.Scheme != "https" {
http.Redirect(w, r, "https://"+r.URL.Host+r.URL.Path, 301)
return
}
//....
}
但它给了我这样的回应:
$ curl -i http://localhost
HTTP/1.1 301 Moved Permanently
Content-Type: text/html; charset=utf-8
Location: https:///
Date: Sat, 24 Nov 2018 20:02:33 GMT
Content-Length: 44
<a href="https:///">Moved Permanently</a>.
神秘的是Location: https:///这一行。我又看了一遍 go doc,发现:
// URL specifies either the URI being requested (for server
// requests) or the URL to access (for client requests).
//
// For server requests the URL is parsed from the URI
// supplied on the Request-Line as stored in RequestURI. **For
// most requests, fields other than Path and RawQuery will be
// empty. (See RFC 7230, Section 5.3)**
//
// For client requests, the URL's Host specifies the server to
// connect to, while the Request's Host field optionally
// specifies the Host header value to send in the HTTP
// request.
URL *url.URL
然后我明白了为什么它返回和空字符串r.URL.Host。
我也试过r.Header.Get("Host")然后r.Header.Get("Origin")。它还给了我一个空字符串。
还有其他获取主机名的方法吗?
慕的地8271018
繁星淼淼
相关分类