Http
“HTTP 請求消息中的 URL”在哪裡?
HTTP:權威指南說
未虛擬託管且不允許資源因請求的主機而異的源伺服器可能會忽略 Host 標頭欄位值。但是任何基於主機區分資源的源伺服器都必須使用以下規則來確定 HTTP/1.1 請求中請求的資源:
- 如果HTTP 請求消息中的 URL是絕對的(即,包含方案和主機組件),則忽略 Host 標頭中的值以支持 URL。
- 如果HTTP 請求消息中的 URL沒有主機,並且請求包含 Host 頭,則從 Host 頭中獲取主機/埠的值。
- 如果通過步驟 1 或 2 無法確定有效主機,則向客戶端返回 400 Bad Response 響應。
“HTTP 請求消息中的 URL”在哪裡?
它是請求行中的那個嗎(在 HTTP 請求的第一行,在方法之後
GET
)?謝謝。
該 URL 不需要出現在 HTTP 請求中的任何位置(向代理髮出時除外;見下文)。
您書中引用的第 2 點有錯誤。URL 不會出現在原始形式的請求行中,這是 HTTP 請求目標的最常見形式。通常只有 URL 的特定組件出現在請求中,即出現在 Host 標頭中的主機(和埠,如果適用),以及出現在請求行中的路徑和查詢字元串。請求中沒有出現的一件事是方案(http 或 https),如果 Web 應用程序確實需要了解方案,它偶爾會適合開發人員。
請求行的替代形式可能包含完整的 URL 作為請求目標,並且伺服器必須能夠處理這種格式,稱為絕對形式。除非使用者代理故意與 HTTP 代理交談,否則通常不會看到這種形式。在這種情況下,代理需要知道方案,以便它可以嘗試傳遞請求,完整的 URL 形式是相關標準 (RFC 7230) 中定義的方式。