首頁 >後端開發 >Golang >為什麼 My Go 開發伺服器中的 r.URL.Host 和 r.URL.Scheme 為空?

為什麼 My Go 開發伺服器中的 r.URL.Host 和 r.URL.Scheme 為空?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-15 18:56:10884瀏覽

Why are r.URL.Host and r.URL.Scheme Empty in My Go Development Server?

開發伺服器中的相對URL 存取

問題:

問題:

答案:

r.URL 中缺少 host 和 schema 訊息,是由於開發時訪問伺服器時使用了相對 URL 導致的。與絕對 URL 不同,相對 URL 不指定主機或方案。

相對要求:

GET http://localhost:8080/ HTTP/1.1
Host: localhost:8080

通常,Web 瀏覽器會發出絕對請求,例如:

GET / HTTP/1.1
Host: localhost:8080

但是,當直接存取本機開發伺服器時,瀏覽器可能會使用相對的request:

在這個相對請求中,只指定了路徑,省略了host和scheme。因此,當伺服器收到此類請求時,r.URL.Host 和 r.URL.Scheme 將為空。

存取主機資訊:

host := r.Host

擷取這種情況下的主機信息,可以使用http.Request的r.Ho st屬性struct.

絕對請求(可選):

為了確保您始終收到絕對請求,您可以使用HTTP 代理程式。使用代理程式時,代理程式會將絕對請求轉送至伺服器,r.URL.Host 和 r.URL.Scheme 將包含預期值。

IsAbs() 檢查:

isAbsoluteURL := r.URL.IsAbs()
您也可以使用r.URL 的IsAbs() 方法檢查請求中的URL 是絕對URL 還是相對URL結構:

以上是為什麼 My Go 開發伺服器中的 r.URL.Host 和 r.URL.Scheme 為空?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn