3. クライアントの構成
クライアントは、URIテンプレート [TEMPLATE] を介してHTTP上のIPプロキシを使用するように構成される。URIテンプレートには、"target" と "ipproto" の2つの変数を含めることができる(MAY)。セクション4.6 を参照。テンプレートを定義する際には、変数のオプション性を考慮して、変数が自己識別可能であるか、構文で除外可能であるようにする必要がある。
例を以下に示す:
https://example.org/.well-known/masque/ip/{target}/{ipproto}/
https://proxy.example.org:4443/masque/ip?t={target}&i={ipproto}
https://proxy.example.org:4443/masque/ip{?target,ipproto}
https://masque.example.org/?user=bob
図1: URIテンプレートの例
URIテンプレートには以下の要件が適用される:
-
URIテンプレートは、レベル3以下のテンプレートでなければならない(MUST)。
-
URIテンプレートは絶対形式でなければならず(MUST)、空でないスキーム、オーソリティ、およびパスコンポーネントを含まなければならない(MUST)。
-
URIテンプレートのパスコンポーネントはスラッシュ "/" で始まらなければならない(MUST)。
-
すべてのテンプレート変数は、URIのパスまたはクエリコンポーネント内になければならない(MUST)。
-
URIテンプレートには、"target" と "ipproto" の2つの変数を含めることができ(MAY)、他の変数を含めることもできる(MAY)。"target" または "ipproto" 変数が含まれる場合、それらの値は空であってはならない(MUST NOT)。クライアントは代わりに "*" を使用して、ワイルドカードまたは優先順位なしの値を示すことができる。セクション4.6 を参照。
-
URIテンプレートには、非ASCII Unicode文字を含めてはならず(MUST NOT)、0x21-0x7Eの範囲のASCII文字のみを含まなければならない(MUST)(パーセントエンコーディングは許可されることに注意。[URI] のセクション2.1を参照)。
-
URIテンプレートは、予約済み拡張("+" 演算子)、フラグメント拡張("#" 演算子)、ドットプレフィックス付きラベル拡張、スラッシュプレフィックス付きパスセグメント拡張、またはセミコロンプレフィックス付きパススタイルパラメータ拡張を使用してはならない(MUST NOT)。
クライアントは上記の要件を検証すべきである(SHOULD)。ただし、クライアントはこの特定の検証を欠く汎用URIテンプレート実装を使用してもよい(MAY)。クライアントがURIテンプレートによって上記の要件のいずれかが満たされていないことを検出した場合、クライアントはその構成を拒否し、IPプロキシに送信せずに要求を中止しなければならない(MUST)。
UDPプロキシと同様に、IPプロキシの一部のクライアント構成では、ユーザーがプロキシホストとプロキシポートのみを構成できるようにする。そのような制限を持つクライアントは、デフォルトテンプレートを使用してIPプロキシ機能へのアクセスを試みてもよい(MAY)。デフォルトテンプレートは次のように定義される:"https://$PROXY_HOST:$PROXY_PORT/.well-known/masque/ip/{target}/{ipproto}/"。ここで、$PROXY_HOSTと$PROXY_PORTは、それぞれIPプロキシの構成されたホストとポートである。IPプロキシの展開は、そのようなクライアントと相互運用する必要がある場合、この場所でサービスを提供すべきである(SHOULD)。