[解決済み] URL フラグメントと 302 リダイレクト
質問
よく知られているように、URL フラグメント (URLの末尾の
#
の後の部分) がサーバーに送信されないことはよく知られています。
しかし、サーバーのリダイレクト(HTTP ステータス 302 と
Location:
ヘッダによる) サーバーリダイレクトが関与している場合、フラグメントはどのように機能するのでしょうか。
私の質問は実に2つあります。
-
もし元のURLがフラグメント(
/original.php#foo
) があり、リダイレクト先が/new.php
にリダイレクトされた場合、元のURLのフラグメント部分は単に失われるのでしょうか?それとも、新しい URL に適用されることもあるのでしょうか?
新しいURLはこれまで/new.php#foo
になるのでしょうか? -
元の URL に関係なく、サーバーが新しい URL にリダイレクトする際に、フラグメント (
/new.php#foo
を含む新しい URL にリダイレクトした場合、フラグメントは尊重されるのでしょうか? それとも、サーバーは本当にフラグメントにまったく干渉する必要がないのでしょうか?/new.php
??
どのように解決するのですか?
2014年6月27日更新 :
RFC 7231、ハイパーテキスト転送プロトコル (HTTP/1.1)。セマンティクスとコンテンツ は、PROPOSED STANDARD として公開されました。からは 変更履歴 :
<ブロッククオートLocation ヘッダフィールドの構文が変更され、すべての 相対参照やフラグメントを含むすべての URI 参照を許可するように変更されました。 また、フラグメントの使用が適切でない場合について、いくつかの明確化が行われました。 を明確にした。 (セクション 7.1.2)
からの重要なポイントは 7.1.2節 所在地 :
3xx(Redirection)レスポンスで提供されたLocationの値が、フラグメントコンポーネントを持たない場合 がフラグメントコンポーネントを持たない場合、ユーザーエージェントはその値がURIのフラグメントコンポーネントを継承しているかのように のフラグメントコンポーネントを継承しているかのように処理しなければならない。 のフラグメントコンポーネントを継承するものとしてリダイレ クトを処理しなければならない(すなわち、リダイレクションは元の参照のフラ グメントを継承する)。 は元の参照のフラグメントを継承する (もしあれば)。
例えば という URI 参照の GET リクエストが生成されたとします。 "http://www.example.org/~tim" に対して生成されたGETリクエストは、303 (See Other) レスポンスが返されるかもしれません。
Location: /People.html#tim
にリダイレクトすることを示唆しています。 "http://www.example.org/People.html#tim"。
同様に、URI参照で生成されたGETリクエストは "http://www.example.org/index.html#larry" に対して生成された GET リクエストは、ヘッダー フィールド: 301 (Moved Permanently)レスポンスが返されるかもしれません。
Location: http://www.example.net/index.html
にリダイレクトすることを提案します。 "http://www.example.net/index.html#larry" にリダイレクトすることを示唆し、元の にリダイレクトすることを示唆します。
これは明らかにあなたの質問に答えているはずです。
アップデート終了
の未解決(未指定)問題です。 現在の HTTP 仕様 の 2 つの問題で扱われています。 IETF httpbis ワーキンググループ :
#6 では
Location
ヘッダで使用することができます。#43はこう言っています。
いろいろなブラウザでテストしてみたところ
<ブロッククオート
- Firefox と Safari は、ロケーションヘッダでフラグメントを使用します。
- Opera は、ソース URI が存在する場合はそのフラグメントを使用し、そうでない場合はリダイレクト先のフラグメントを使用します。
- IE (8) は、ロケーション URI のフラグメントを無視し、存在する場合はソース URI のフラグメントを使用します。
提案です。
<ブロッククオート"注意:元のURIからのフラグメント識別子とリダイレクトを組み合わせる必要がある場合の動作は未定義です。現在のユーザーエージェントは、どのフラグメントが優先されるかで実際に異なります。
<ブロッククオート[...]
<ブロッククオート
どうやらIE8の
は
からフラグメント ID を使用するようです。
Location
(を使用します(私が見た動作はlocalhostに限られるかもしれません)。
このように、Safari/IE/Firefox/Chrome(今テストしました)では、元のURIが何であっても、Locationヘッダーのフラグメントが使用されるという一貫した動作があるようです。
したがって、私は私の提案を文書化するために変更します。 その を期待される動作として文書化することに変更します。
これは、あなたの質問に対する最もブラウザ互換性があり、将来性のある(この問題は最終的に標準化されるため)答えにつながります。
A: のフラグメントは破棄されます。
B:
のフラグメントは
Location
ヘッダは尊重されます。
関連
-
[解決済み] JavaScriptでURLの#hashを確認する方法は?
-
[解決済み] コマンドラインのcURLでリダイレクトを追いかける方法はありますか?
-
[解決済み] Nginx の no-www を www に、www を no-www に。
-
[解決済み] NGINXを使用して別のドメインにリダイレクトする方法は?
-
[解決済み] Valgrindの出力をファイルにリダイレクトする方法は?
-
[解決済み] Heroku/GoDaddy: ネイキッドドメインをwwwに送る [閉鎖].
-
[解決済み] Google OAuth 2.0 redirect_uri を複数のパラメータで指定する。
-
[解決済み] NginxでURLをリダイレクトする方法
-
[解決済み] cmd.exeで標準エラー出力をNULLにリダイレクトする方法
-
[解決済み] URL フラグメントと 302 リダイレクト
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Nginx の no-www を www に、www を no-www に。
-
[解決済み】Angular2で外部URLにリダイレクトする方法は?
-
[解決済み] NGINXを使用して別のドメインにリダイレクトする方法は?
-
[解決済み] Valgrindの出力をファイルにリダイレクトする方法は?
-
[解決済み] Heroku/GoDaddy: ネイキッドドメインをwwwに送る [閉鎖].
-
[解決済み] Google OAuth 2.0 redirect_uri を複数のパラメータで指定する。
-
[解決済み] NginxでURLをリダイレクトする方法
-
[解決済み] cmd.exeで標準エラー出力をNULLにリダイレクトする方法
-
[解決済み] URL フラグメントと 302 リダイレクト