web-dev-qa-db-ja.com

ブラウザでホームページURLをクリックすると、末尾のスラッシュが自動的に追加されますか?

これは、ホームページへのリンクにカーソルを合わせると(例:http://www.example.com)、ブラウザのステータスバーに表示されるように)末尾のスラッシュが常に追加されることに気づいたからです。スラッシュで終わるかどうかを示すhref属性ですが、ホームページにアクセスするたびに、表示されるURLの末尾にスラッシュは付きません。

URLバーのURLにスラッシュを入力してみました。また、Firebugを有効にすると、サイトは常に200 OKステータスを返します。これについて議論している記事 here は、最後にスラッシュがあると301のリダイレクトが回避されると述べています。しかし、 this ページでもリダイレクトは見られません。

これは、スラッシュを追加しているブラウザ機能ですか?

17

はい、すべてのメインストリームブラウザは、裸のドメインURL(つまり、ホームページ)をリクエストするときに、HTTPリクエストに「スラッシュを追加」します。これは、HTTPリクエストを有効にするために実際に必要です。http://example.com/の場合:

GET / HTTP/1.1
Host: example.com

最初の行の/(スラッシュ)に注意してください-これは要求されているURLです。ここにnothingを指定することは無効です。 RFC 2616 から:

絶対パスを空にすることはできません。元のURIに何も存在しない場合、「/」(サーバールート)として指定する必要があります。

ブラウザがサーバーに対して行うHTTPリクエストを確認する必要があります。 「ブラウザのステータスバー」に表示されるURL、またはアドレスバーのURLが異なる場合があります-よりユーザーフレンドリー。 Google Chromeはnotステータスバーに末尾のスラッシュを追加しますが、リクエストにはスラッシュが含まれています。

ブラウザが修正 HTTPリクエストを行う前であるため、http://example.com(スラッシュなし)を指定した場合、301リダイレクトは発生しません。

これは、パス/ディレクトリがある場合にURLの最後に追加されるスラッシュとは異なることに注意してください。例えば。 http://example.com/directory/。リンク先の記事は両方を同じように扱っているようで、完全に正しいIMOではないようです。 http://example.com/directory(スラッシュなし)を要求した場合、ブラウザはスラッシュを追加せず、はい、ほとんどのサーバーはhttp://example.com/directory/(スラッシュ)に301リダイレクトしますが、これはサーバーに依存します。単に壊れる可能性があります!たとえば、Apacheでは、これはDirectorySlashに設定されているonディレクティブに依存しています。

28
MrWhite