[1]
HTTP
の状態符号
303
は、
他の URL を GET
するべきことを示すリダイレクトです。
[309] 303
は、鯖が利用者エージェントに対して URL
を示して異なる資源にリダイレクトし、元の要求に対する間接的な応答を提供することを意図するものです >>308。
[313] 303
はどの要求メソッドにも適用可能です。
主としてPOST
の出力によって利用者エージェントを選択された資源にリダイレクトして、
POST
応答に対応する情報を元の要求とは独立に単独で識別したり、
ブックマークしたり、キャッシュしたりできるようにするのが主たる用途です。
>>308
[314] GET
要求に対する 303
応答は、起源鯖が対象資源について HTTP により転送できる表現を持っていないことを示します。
Location:
ヘッダーの値は対象資源の説明を含む資源を指しており、
その資源を取得すると、
受信者にとって有用な表現を得られるかもしれません
(ただし元の対象資源を表現することを意味しません)。
>>308
[9] ○○の場面では 302
よりも 303
が適切である、といった類の主張もたまにみられますが、宗教的なもので、
その方が特別に好ましい場面があるとは言いがたいと思われます。
[13] 実際の所いつ (他の状態符号ではなく) 303
を使うべきなのかは不明です。
[305] 起源鯖は、 POST
の処理の結果が既存の資源の表現と等価である時には、 その
URL を Location:
ヘッダーに指定した
303
応答を送信することができます >>306。
[312] 鯖はリダイレクト先の資源の URL
を Location:
ヘッダーに指定します >>308。
[315] HEAD
要求の場合を除き、
303
応答の表現は Location:
ヘッダーの URL と同じ URL へのハイパーリンクを含む短いハイパーテキストのメモを含めるべきです。
>>308
[311] 利用者エージェントは、 Location:
ヘッダーの URL を対象とした取得の要求を
(その URL も HTTP なら GET
や
POST
の要求で) 実行し、その結果を元の要求の結果として提示できます。
ただしその要求の結果もリダイレクトかもしれません。 >>308
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 cachableMUST NOT be cached, but the response to the second (redirected) requestMAYmight be cacheable.
要求に対する応答は異なる URI に見つかり、その資源を GET
method を使って取り出すべきです。この方法は、主として
POST
で活性化されたスクリプトの出力が利用者エージェントを選択された資源に再指向するために存在します。
新しい URI は元の要求資源の代替参照ではありません。
303
応答はキャッシュしてはなりませんが、
第2 (再指向先) 要求の応答はキャッシュ可能かもしれません。
If the new URI is a location, its URLThe 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
応答に対しても再動作します。
[3] WinIE は1で既に対応しています。とはいってもきっと 303
は知らなくて、 3
で Location:
欄があったからそれに飛んだだけだとは思います。
[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
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