9. Constructing an Effective Request URI (有効リクエストURIの構築)
本セクションでは、HSTSホストが受信したHTTPリクエストの有効リクエストURIをどのように構築しなければならないかを指定する。
HTTPリクエストは通常、ターゲットリソースのabsoluteURIを伝達しない; 代わりに、URIはRequest-URI、Hostヘッダーフィールド、および接続コンテキストから推測される必要がある ([RFC2616], セクション3.2.1、5.1.2、および5.2)。このプロセスの結果は"有効リクエストURI (effective request URI, ERU)"と呼ばれる。"ターゲットリソース (target resource)"は、有効リクエストURIによって識別されるリソースである。
9.1. ERU Fundamental Definitions (ERU基本定義)
HTTPリクエストメッセージの最初の行Request-Lineは、[RFC2616] セクション5.1の以下のABNFで指定される:
Request-Line = Method SP Request-URI SP HTTP-Version CRLF
Request-Line内のRequest-URIは、[RFC2616] セクション5.1.2の以下のABNFで指定される:
Request-URI = "*" | absoluteURI | abs_path | authority
Hostリクエストヘッダーフィールドは、[RFC2616] セクション14.23の以下のABNFで指定される:
Host = "Host" ":" host [ ":" port ]
9.2. Determining the Effective Request URI (有効リクエストURIの決定)
Request-URIがabsoluteURIである場合、有効リクエストURIはRequest-URIである。
Request-URIがabs_path形式またはアスタリスク形式を使用し、Hostヘッダーフィールドが存在する場合、有効リクエストURIは次の内容を連結することによって構築される:
-
スキーム名: リクエストが非セキュアなTCP接続を介して受信された場合は"http"、TLS/SSLで保護されたTCP接続を介して受信された場合は"https"、および
-
オクテットシーケンス"://"、および
-
Hostヘッダーフィールドからのホストとポート (存在する場合)、および
-
Request-Lineから取得されたRequest-URI (Request-URIがアスタリスク"*"だけである場合を除く)。
Request-URIがabs_path形式またはアスタリスク形式を使用し、Hostヘッダーフィールドが存在しない場合、有効リクエストURIは未定義である。
それ以外の場合、Request-URIがauthority形式を使用する場合、有効リクエストURIは未定義である。
有効リクエストURIは、[RFC2616] セクション3.2.3で説明されているルールを使用して比較されるが、空のパスコンポーネントは"/"の絶対パスと同等として扱われてはならない (MUST NOT)。
9.2.1. Effective Request URI Examples (有効リクエストURIの例)
例1: メッセージの有効リクエストURI
GET /pub/WWW/TheProject.html HTTP/1.1
Host: www.example.org:8080
(非セキュアなTCP接続を介して受信) は"http"、プラス"://"、プラスauthorityコンポーネント "www.example.org:8080" 、プラスrequest-target "/pub/WWW/TheProject.html"である。したがって、それはhttp://www.example.org:8080/pub/WWW/TheProject.htmlである。
例2: メッセージの有効リクエストURI
OPTIONS * HTTP/1.1
Host: www.example.org
(SSL/TLSで保護されたTCP接続を介して受信) は"https"、プラス"://"、プラスauthorityコンポーネント "www.example.org" である。したがって、それはhttps://www.example.orgである。