[520] [DFN[[CODE(HTTP)@en[[[3[VAR[xx]]]]]]]] は、[[リダイレクト]]を表す[[状態符号]]群です。

[FIG(short list)[
- [CODE(HTTP)[[[301]]]]
- [CODE(HTTP)[[[302]]]]
- [CODE(HTTP)[[[303]]]]
- [CODE(HTTP)[[[304]]]]
- [CODE(HTTP)[[[307]]]]
- [CODE(HTTP)[[[308]]]]
]FIG]

;; [[リダイレクト]]の項も参照してください。

* 仕様書

[REFS[
- [518] '''[CITE@en[RFC 7231 - Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content]] ([TIME[2014-08-07 05:54:02 +09:00]] 版) <https://tools.ietf.org/html/rfc7231#section-6.4>'''
- [507] [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>
- [2] [CITE@en[RFC 4918 - HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV)]] ([TIME[2014-09-21 17:04:59 +09:00]] 版) <http://tools.ietf.org/html/rfc4918#section-12>
]REFS]

* 意味

[521] [CODE(HTTP)[[[3xx]]]] は、[[要求]]を満足するために[[利用者エージェント]]の更なる動作が必要なことを示します
[SRC[>>518]]。

[522] [[HTTP]] の仕様書上の「[[リダイレクト]]」は、 [CODE(HTTP)[[[302]]]] などのような通常の[[リダイレクト]]の他に、
[CODE(HTTP)[[[300]]]] のような複数の選択肢の提示や、
[CODE(HTTP)[[[304]]]] のような「[[キャッシュ]]への[[リダイレクト]]」
も含まれている [SRC[>>518]] ようです。

* 構文

[6] [[リダイレクト]]を表す場合には、 [CODE(HTTP)@en[[[Location:]]]]
[[ヘッダー]]を使います。

;; [CODE(HTTP)@en[[[Location:]]]] を参照。

[7] [CODE(HTTP)[[[207]]]] [[応答]]の内部で [CODE(HTTP)[[[3xx]]]]
を使う時は、 [CODE(HTTP)@en[[[Location:]]]] [[ヘッダー]]のかわりに
[CODE(XMLe)@en[[[location]]]] [[要素]]を使います。

* 文脈

[517] [[起源鯖]]は、 [CODE(HTTP)@en[[[PUT]]]] [[要求]]に対して[[対象資源]]の状態を変更せず、
他の[[資源]]に適用したい場合は、
適切な [CODE(HTTP)[[[3xx]]]] [[応答]]を送信し[['''なければなりません''']]。
その場合[[利用者エージェント]]は[[リダイレクト]]に従うか選ぶことができます。 [SRC[>>507]]

[3] [[WebDAV]] [[鯖]]も [CODE(HTTP)[[[3xx]]]] [[応答]]を使うことがあります [SRC[>>2]]。

[5] [[WebDAV]] [[鯖]]が[[要求]]の処理で新しい[[資源]]を作成した時は、
[CODE(HTTP)[[[3xx]]]] [[応答]]を使っては[['''なりません''']] [SRC[>>2]]。

* 処理

[523] [CODE(HTTP)@en[[[Location:]]]] があれば、
未対応の[[状態符号]]であっても、自動的に[[リダイレクト]]して構いません [SRC[>>518]]。

* 歴史

[FIG(quote)[
[FIGCAPTION[
[519] RFC 1945 (HTTP/1.0) 9.3; RFC 2068・2616 (HTTP/1.1) 10.3 Redirection 3xx
]FIGCAPTION]

> This class of status code indicates that further action needs to be
taken by the user agent in order to fulfill the request. 
The action required [DEL[[INS[{1945}]] may]] [INS[[INS[{2068,2616}]] MAY]] be carried out by the user agent without interaction
with the user if and only if the method used in 
the [DEL[[INS[{1945}]] subsequent]] [INS[[INS[{2068,2616}]] second]]
request is GET or HEAD. [DEL[A user agent [DEL[[INS[{1945}]] should never]] [INS[[INS[{2068}]] SHOULD NOT]] [INS[{1945,2068}]] automatically redirect a request more than 5 times, since such redirections usually indicate an infinite loop.]] [INS[[INS[{2616}]] A client SHOULD detect infinite redirection loops, since such loops generate network traffic for each redirection.]]

この級の状態符号は、要求を満たすために利用者エージェントが更なる動作を必要としていることを示します。
必要とされている動作は、次の要求に使用する method が [CODE(HTTP)[[[GET]]]]
又は [CODE(HTTP)[[[HEAD]]]] であるなら、この場合に限って、
利用者との対話なしに実行しても'''構いません'''。 [DEL[利用者エージェントは、5回より多くの redirect を自動的にする'''べできはありません'''。そのような redirect は通常無限循環を示しています。]] [INS[クライアントは、無限 redirect 循環を判別できる'''べきです'''。そのような循環は各 redirect ごとにネットワークの混雑をもたらします。]]

[INS[

> [INS[{2616}]] Note: previous versions of this specification recommended a
maximum of five redirections. Content developers should be aware
that there might be clients that implement such a fixed limitation.

注意 : この仕様書の以前の版は、最大4回の redirect を推奨していました。
内容開発者は、この固定限界を実装しているクライアントがあるかもしれないことに注意するべきです。
]INS]
]FIG]

* 実装

[4] [[WebDAV]] [[クライアント]]の中には、 [CODE(HTTP)[[[3xx]]]] [[応答]]を想定していないものもあります [SRC[>>2]]。

* 関連

[1] [[警告符号]]の [CODE(HTTP)[[[3xx]]]] とは関係ありません。