web-dev-qa-db-ja.com

パスセクションに//が含まれるURLは有効ですか?

URLに関する質問があります。

RFC 3986 を読みましたが、まだ1つのURLについて質問があります。

URIに機関コンポーネントが含まれる場合、パスコンポーネント
空にするか、スラッシュ( "/")文字で始める必要があります。 URIに権限コンポーネントが含まれていない場合、パスを開始できません
2つのスラッシュ文字( "//")。さらに、URI参照
(セクション4.1)は相対パス参照の場合があります。その場合、
最初のパスセグメントにコロン( ":")文字を含めることはできません。 ABNF
[。 URIサブストリングを説明するために、一般的な用語「パスコンポーネント」を使用します
これらのルールのいずれかとパーサーによって照合されます。

そんなこと知ってる //server.com:80/path/infoは有効です(スキーマ相対URLです)

http://server.com:80/path//infoは有効です。

しかし、次のものが有効かどうかはわかりません。

http://server.com:80//path/info

私の質問の背後にある問題は、Cookieがhttp://server.com:80//path/info、URIによって作成された場合http://server.com:80/path/infoに制限あり/path

36

複数のスラッシュを含むURL、それは何かを壊しますか?RLにダブルスラッシュを使用することの欠点はありますか?ダブルスラッシュの意味in URLs? and RFC 3986-Uniform Resource Identifier(URI):Generic Syntax .

コンセンサス:ブラウザはリクエストをそのまま実行し、リクエストを変更しません。 /文字はパス区切り文字ですが、パスセグメントは次のように定義されます:

path-abempty  = *( "/" segment )
segment       = *pchar

http://example.com/の直後のスラッシュは、無限に別のスラッシュが直接続くことを意味します。サーバーはそれを無視するかもしれませんが、あなたが理解したように、ブラウザは無視しません。

表現:

URIに権限コンポーネントが含まれていない場合、パスを2つのスラッシュ文字(「//」)で始めることはできません。

protocol-relative URLs を許可しますが、その場合、権限(例ではserver.com:80)が存在しない可能性があることを具体的に示します。

だから、はい、それは有効です、いいえ、それを使用しないでください。

37
CodeCaster