43
http://example.com/something/somewhere//somehow/script.js

ダブルスラッシュはサーバー側で何かを壊しますか?URLを解析するスクリプトがあり、複数のスラッシュを1つのスラッシュに置き換えた場合、何かが壊れるか(またはパスが変更されるか)疑問に思っていました。特にサーバー側では、CodeIgniterやJoomlaなどの一部のフレームワークはセグメント化されたURLスキームとルーティングを使用します。それが何かを壊すかどうか知りたいだけです。

4

8 に答える 8

46

HTTP RFC 2396 defines path separator to be single slash.

ただし、ある種の URL 書き換えを使用していない限り (この場合、書き換え規則はスラッシュの数によって影響を受ける可能性があります)、uri はディスク上のパスにマップされますが、(ほとんどの?) 最新のオペレーティング システム (Linux/ Unix、Windows)、行内の複数のパス区切り文字には特別な意味がないため、/path/to/foo と /path//to////foo は最終的に同じファイルにマップされます。

影響を受ける可能性のある追加の事柄は、キャッシングです。ブラウザーとサーバーの両方が (キャッシュ設定に従って) 個々のページをキャッシュするため、わずかに異なる URI を介して同じファイルを複数回要求すると、キャッシュに影響する可能性があります (サーバーとクライアントの実装によって異なります)。

于 2012-04-15T10:37:42.240 に答える
13

URL をファイル システム パスにマップする必要はありません。そのため、ファイル システム パスの // が / と同等であっても、すべての URL で同じであることを保証することはできません。

于 2012-04-15T10:34:44.827 に答える
2

「RFC3986: Uniform Resource Identifier (URI): Generic Syntax」 ( ABNF構文で典型的に指定されている) の関連するpath-absolute 非端末の宣言を検討してください。

path-absolute = "/" [ segment-nz *( "/" segment ) ]

次にsegment、同じドキュメントのさらに数行下の宣言を検討してください。

segment       = *pchar

ABNF を読み取ることができる場合、アスタリスク ( *) は、次の要素pcharを複数回繰り返して を構成できることを示します (ゼロ回segmentを含む) 。これを学習し、上記の宣言を読み直すと、潜在的に空のimples は、2 番目が無期限に繰り返される可能性があるため、 (それ自体がルールの指定に使用される) の一部として(少なくとも 1 つの任意の長さ) のような有効な組み合わせを許可することがわかります。 URI を記述します)。path-absolutesegment"/"///////path-absolute

すべての URL は URI であるため、引用された RFC に従って、URL は複数の連続したスラッシュを許可されていると結論付けることができます。

しかし、誰もが仕様に従って URI パーサーを実装したり実装したりするわけではないため、準拠していない URI/URL パーサーや、これらのパーサーの上に積み重なるあらゆる種類のソフトウェアがあり、そのようなコーナー ケースによって大規模なシステムが機能しなくなることは間違いありません。

于 2016-07-27T21:54:55.597 に答える
1

考慮すべきことの 1 つは、検索エンジンでのページのインデックス作成に影響する可能性があることです。このホームページによると、

同じパスが 3 回繰り返される URL は、Google でインデックスに登録されません。

彼らが使用する例は次のとおりです。

example.com/path/path/path/

を使用した場合にこれが当てはまるかどうかは確認していませんがexample.com///、SEO の最適化が私の Web サイトにとって重要であるかどうかを確認したいと思います。

彼らは、「これは、Google が URL トラップにヒットしたと考えているためです」と述べています。他の誰かが確実に答えを知っている場合は、この答えにコメントを追加してください。それ以外の場合は、このケースを考慮に入れることが適切だと思いました。

于 2016-11-02T02:13:41.753 に答える
0

たとえば、アプリ内のリソースへのリンクを作成するときに驚くかもしれません。

<script src="mysite.com/resources/jquery//../angular/script.js"></script>

解決されません mysite.com/resources/angular/script.js が、 mysite.com/resources/jquery/angular/script.js おそらく望んでいないものに解決されます

二重スラッシュは悪です。避けるようにしてください。

于 2017-03-08T13:07:26.900 に答える
-2

あなたの質問は「それは何かを壊しますか」です。URL 仕様に関しては、余分なスラッシュが許可されています。RFC を読まないでください。ブラウザーが黙って URL を変更するかどうかを確認するための簡単な実験を次に示します。

echo '<?= $_SERVER['REQUEST_URI'];' > tmp.php                                   
php -S localhost:4000 tmp.php

macOS 10.14 (18A391) を Safari 12.0 (14606.1.36.1.9) と Chrome 69.0.3497.100 でテストしたところ、次の結果が得られました。

/こんにちは世界

これは、余分なスラッシュを使用するWeb アプリケーションから見えることを示しています。

二重スラッシュを使用すると、特定の使用例が壊れます。これには、シングルスラッシュ URL を想定している URL リダイレクト/ルーティング、または URI を直接分析している他の CGI アプリケーションが含まれます。

ただし、例のような静的コンテンツを提供する通常のケースでは、これでも正しいコンテンツが取得されます。ただし、クライアントは、異なるスラッシュでアクセスされた同じコンテンツに対してキャッシュ ミスを取得します。

于 2017-03-06T01:08:44.223 に答える