[2] 
[[HTTPリダイレクト]]は、[[HTTP応答]]が新しい [[URL]] を指定してそちらにアクセスし直すよう求めるものですが、
これは何段にも重ねることができます。無限に繰り返されるものが[DFN[無限リダイレクト]]、
うち特に[[循環]]によるものを[DFN[リダイレクトループ]]ということがあります。

* 仕様書


[REFS[

-
[1] [CITE@en[Fetch Standard]], [TIME[2024-04-02T09:06:59.000Z]], [TIME[2024-04-29T06:15:17.632Z]] <https://fetch.spec.whatwg.org/#concept-http-redirect-fetch>

]REFS]

* リダイレクトへのリダイレクト

[535] [[鯖]]は、[[リダイレクト]]先として[[リダイレクト]]を返す [[URL]]
を指定しても構いません。

[536] [[利用者エージェント]]は[[リダイレクト]]により[[要求]]を改めて送信した結果が[[リダイレクト]]の場合も、
更にその[[リダイレクト]]に従うことが期待されています。

* リダイレクトの循環

[523] 
[[HTTP]]
の仕様によると、
[[クライアント]]は、[[リダイレクト]]の循環を検出して対処する[SHOULD[べきです]]
[SRC[>>518]]。

;; [524] なぜ [MUST[MUST]] でなく [SHOULD[SHOULD]] なのか謎です。
無限[[リダイレクト]]で[[無限ループ]]するような[[クライアント]]はどう考えてもバグっており、
有害でしかありません。

[8] 
[[HTTP]] は[[リダイレクト]]の詳細な処理を規定していませんので、
「循環を検出」「対処」が具体的に何をどうすることなのかは定かではありません。

[9] 
[[Webブラウザー]]は [CITE[Fetch Standard]] に従うことになっており、
[[HTTPリダイレクト]]の処理方法が厳密に規定されています。
[[Webブラウザー]]以外の [[HTTPクライアント]]も、
[CITE[Fetch Standard]] の当該規定を
[WEAK[([[Webブラウザー]]にのみ適用可能な部分を読み飛ばすなど適当な読み替えの上で)]]
準用することで、[[Web互換性]]を確保できます。

[10] 
[CITE[Fetch Standard]] によれば、 [[Webブラウザー]]は[[入れ子]]の深さ20までの[[リダイレクト]]に対応することが[MUST[求められて]]います
(>>7)。

* 要求の[F[リダイレクト数]]

[3] 
[[要求]]には [DFN[[F[redirect count]]]] ([DFN[[F[リダイレクト数]]]])
があります。
[SRC[>>1]]

[4] 
[F[リダイレクト数]]の初期値は [N[0]] です。
[SRC[>>1]]

[5] 
[[HTTP-redirect fetch]] は、[[要求]]の[F[リダイレクト数]]を [N[1]] 増加させます。
[SRC[>>1]]

[6] 
[[HTTP-redirect fetch]] は、(増加させる前に) [[要求]]の[F[リダイレクト数]]が
[N[20]] だと、[[ネットワークエラー]]を返します。
[SRC[>>1]]

[7] 
つまり20個以上の深さの[[要求]]はできません。最初の[[要求]]を[N[1]]と数えます。
つまり認められる[[リダイレクト]]の回数は[N[19]]です。



* 歴史

[525] [[RFC 2068]] は[[リダイレクト]]を最大5回までとしており、注意が必要 [SRC[>>518]] と
[[RFC 7231]] は書いていました。


- [518] [CITE@en[[[RFC 7231]] - Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content]] ([TIME[2014-06-07 01:55:45 +09:00]] 版) <https://tools.ietf.org/html/rfc7231#section-4.3.4>

