確定開發伺服器中的 URL 主機和方案:為什麼它們是空白?
從相對路徑存取 HTTP 伺服器時,如下所示在開發環境中很常見,某些 URL 屬性可能會顯示為空白。具體來說,request.URL.Host 和 request.URL.Scheme 可能會傳回空值。
為什麼會發生這種情況?
相對 HTTP 請求,通常由瀏覽器在以下情況下發出本機存取伺服器,缺乏明確的主機和方案資訊。這與 HTTP 代理程式使用的絕對 URL 形成對比,後者在請求中包含這些詳細資訊。對於相對請求,http.Request.URL 物件中僅提供原始 URL。
存取 HTTP 主機
要擷取 HTTP 主機,您可以存取 http.Request 結構的 Host 屬性。這提供了請求的 Host 標頭中指定的主機名稱和連接埠。
區分相對 URL 和絕對 URL
您可以透過呼叫來確定請求是使用相對 URL 還是絕對 URL http.Request.URL 上的 IsAbs() 方法。如果 IsAbs() 傳回 false,則 URL 是相對的,不包含主機或方案資訊。
使用 Netcat 的範例
要示範差異,您可以使用 netcat使用相對路徑傳送 HTTP 要求。
cat my-http-request-file | nc localhost 8080
my-http-request-file 應包含以下內容內容,格式為HTTP 請求:
GET / HTTP/1.1 Host: localhost:8080
此請求將在處理程序中傳回空白的r.URL. Host 和r.URL.Scheme 值。
以上是為什麼相對 HTTP 請求中 request.URL.Host 和 request.URL.Scheme 為空?的詳細內容。更多資訊請關注PHP中文網其他相關文章!