303

状態符号 303 (HTTP)

[1] HTTP状態符号 303 は、 他の URLGET するべきことを示すリダイレクトです。

仕様書

意味

[309] 303 は、利用者エージェントに対して URL を示して異なる資源リダイレクトし、元の要求に対する間接的な応答を提供することを意図するものです >>308

[310] ただしリダイレクト先の URL が元の実効要求URL と等価とみなせるわけではありません >>308

[313] 303 はどの要求メソッドにも適用可能です。 主としてPOST の出力によって利用者エージェントを選択された資源リダイレクトして、 POST 応答に対応する情報を元の要求とは独立に単独で識別したり、 ブックマークしたり、キャッシュしたりできるようにするのが主たる用途です。 >>308

[314] GET 要求に対する 303 応答は、起源鯖対象資源について HTTP により転送 (transfer) できる表現を持っていないことを示します。 Location: ヘッダーの値は対象資源の説明を含む資源を指しており、 その資源取得 (retrieve) すると、 受信者にとって有用な表現を得られるかもしれません (ただし元の対象資源を表現することを意味しません)。 >>308

[9] ○○の場面では 302 よりも 303 が適切である、といった類の主張もたまにみられますが、宗教的なもので、 その方が特別に好ましい場面があるとは言いがたいと思われます。

[13] 実際の所いつ (他の状態符号ではなく) 303 を使うべきなのかは不明です。

HTTPリダイレクトの項も参照。

文脈

[305] 起源鯖は、 POST の処理の結果が既存の資源表現と等価である時には、 その URLLocation: ヘッダーに指定した 303 応答を送信することができます >>306

構文

[312] リダイレクト先の資源URLLocation: ヘッダーに指定します >>308

[316] なぜか事実の文でしかなく、 MUST にはなっていません。 (IETF では一般的な品質です。)

[315] HEAD 要求の場合を除き、 303 応答表現Location: ヘッダーURL と同じ URL へのハイパーリンクを含む短いハイパーテキストのメモを含めるべき (ought to) です。 >>308

処理モデル

[311] 利用者エージェントは、 Location: ヘッダーURL を対象とした取得 (retrieval) 要求を (その URLHTTP なら GETPOST要求で) 実行し、その結果を元の要求の結果として提示できます。 ただしその要求の結果もリダイレクトかもしれません。 >>308

つまり、利用者エージェント303 応答でも自動的にリダイレクトを処理して構いません。

[11] 要求メソッドGET に変更しなければなりません >>10

歴史

[307] RFC 2068・2616 (HTTP/1.1) 10.3.4 303 See Other

The response to the request can be found under a different URI and SHOULD be retrieved using a GET method on that resource. This method exists primarily to allow the output of a POST-activated script to redirect the user agent to a selected resource. The new URI is not a substitute reference for the originally requested resource. The 303 response is not cachable MUST NOT be cached, but the response to the second (redirected) request MAY might be cacheable.

要求に対する応答は異なる URI に見つかり、その資源を GET method を使って取り出すべきです。この方法は、主として POST で活性化されたスクリプトの出力が利用者エージェントを選択された資源に再指向 (リダイレクト) するために存在します。 新しい URI は元の要求資源の代替参照ではありません。 303 応答はキャッシュしてはなりませんが、 第2 (再指向先) 要求の応答はキャッシュ可能かもしれません。

If the new URI is a location, its URL The different URI SHOULD be given by the Location field in the response. Unless the request method was HEAD, the entity of the response SHOULD contain a short hypertext note with a hyperlink to the new URI(s).

異なる URI は応答の Location 欄で与えるべきです。 要求 method が HEAD でない限り、 応答の実体は新しい URI (群) へのハイパーリンクの入った短いハイパーテキスト覚書を含むべきです

Note: Many pre-HTTP/1.1 user agents do not understand the 303 status. When interoperability with such clients is a concern, the 302 status code may be used instead, since most user agents react to a 302 response as described here for 303.

注意 : 多くの HTTP/1.1 以前の利用者エージェントは 303 状態を理解しません。そのようなクライアントとの相互運用性を気にするのであれば、 代わりに 302 状態符号を使っても構いません。 ほとんどの利用者エージェントはここで 303 について説明したように 302 応答に対しても再動作します。

初期の実装

[2] NC 4.01 は未対応。

[3] WinIE は1で既に対応しています。とはいってもきっと 303 は知らなくて、 3Location: 欄があったからそれに飛んだだけだとは思います。

[7] Mozilla (Gecko) はもちろん対応しているのですが、最近の版ではリダイレクト先に POST 内容を再送してしまう不具合があります。 (1.3 以前は大丈夫で、 1.4b 以降は駄目です。その途中のどこで enbug したのかは調べてません。 1.5 ではまだ直ってません。)

[8] >>7 うーんと、 2616 には GET するべきとは書かれているけど、 POST してはならないわけではないから・・・とはいえ、 POST 後の処理のために用意されたとはっきり書かれているし、 >>7 の挙動は不具合というより他ない。 2616 で追加された 302 の補足説明からも UA が取るべき行動でないことは明らか。

[304] URLs in Data Primer ( ( 版)) http://www.w3.org/TR/2013/WD-urls-in-data-20130604/#http-responses

[317] Status codes in HTTP ( ( 版)) http://www.w3.org/Protocols/HTTP/HTRESP.html#z10

[12] Allow user agents to transmit RST_STREAM upon seeing a redirect · whatwg/fetch@af0dc92 ( 版) https://github.com/whatwg/fetch/commit/af0dc923f7636751996a9762309904511725a1a7

[14] Cool URIs for the Semantic Web () https://www.w3.org/TR/cooluris/#r303gendocument

The second solution is to use a special HTTP status code, 303 See Other, to give an indication that the requested resource is not a regular Web document.

[15] Stream-based requests (Request with ReadableStream) (yutakahirano著, ) https://github.com/whatwg/fetch/commit/0c470b5860fe690b1136b0242951f682405103cc

[16] More eargerly send RST_STREAM on redirects (annevk著, ) https://github.com/whatwg/fetch/commit/fd286755e9664d570260c16f7c1933f424d2f39a

[17] Preserve HEAD method on 303 redirect (annevk著, ) https://github.com/whatwg/fetch/commit/6f29b764cc57aaf2f431e15a3f0fec029926e9e0

[18] 303 redirects should preserve HEAD · Issue #753 · whatwg/fetch () https://github.com/whatwg/fetch/issues/753

[19] Preserve HEAD method on 303 redirect by annevk · Pull Request #796 · whatwg/fetch () https://github.com/whatwg/fetch/pull/796