Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
6
Help us understand the problem. What is going on with this article?
@naka_kyon

HTTPのリダイレクト時のHTTPステータスコードまとめ

More than 1 year has passed since last update.

前書き

HTTPリクエストのリダイレクトの挙動とhttpのステータスコードの意味、振る舞いについて、個人的に気になったところなどを調べてまとめています。

要約

コード 情報 意味 UAによるメソッドの変更 RFC
301 Moved Permanently 恒久的に移動した 変更される場合がある 1945, 2068, 2616
302 Found 発見した 変更される場合がある 1945, 2068, 2616
303 See Other 他を参照せよ GETに変換されることを期待 2616,7231
307 Temporary Redirect 一時的リダイレクト 変更してはならない 2616,7231
308 Permanent Redirect 恒久的リダイレクト 変更してはならない 7238,7538

3xx.png
出典: https://postd.cc/choosing-an-http-status-code/

301 Moved Permanently

リクエストされたリソースが Location ヘッダーで示された URL に完全に移動したことを示す。ブラウザーはこのページにリダイレクトし、検索エンジンはリソースへのリンクを更新する。

リダイレクトが行われるとき、仕様書ではメソッド (と本文) を変更しないよう要求していたが、歴史的な理由により、ユーザーエージェントはリクエストを変更する場合がある。

すべてのユーザーエージェントが従っている訳ではないので、301のコードは GET または HEAD メソッドのみに使用し、POSTメソッドでは代わりに 308 Permanent Redirect (明確にメソッドの変更が禁止)を使用することが推奨

302 Found

リクエストされたリソースが一時的に Location で示された URL へ移動したことを示す。ブラウザーはこのページにリダイレクトしますが、検索エンジンはリソースへのリンクを更新しない。

リダイレクトが行われるとき、仕様書ではメソッド (と本文) を変更しないよう要求していたが、歴史的な理由により、ユーザーエージェントはリクエストを変更する場合がある。

すべてのユーザーエージェントが従っている訳ではないので、302のコードは GET または HEAD メソッドのみに使用し、POSTメソッドでは代わりに 307 Temporary Redirect (明確にメソッドの変更が禁止)を使用することが推奨。

303 See Other

オリジンサーバーがHTTP経由でサーバーによって転送できるターゲットリソースの表現を持っていないことを示す。

このステータスコードはロケーションヘッダーとともに使用する必要があり、サーバーがPOSTまたはその他のべき等でない要求に303 See Other応答とロケーションヘッダーの値で応答する場合、クライアントはGETメソッドを使用してロケーションヘッダーに記載されているリソースを取得することが期待される。

用途としては、PUT メソッドへのレスポンスで、アップロードされたリソースではないところで「XYZ のアップロードに成功しました」のような確認メッセージを表示したい場合や、アップロード進捗ページのような別なページであることを示す場合に便利。

307 Temporary Redirect

リクエストされたリソースが一時的に Location で示された URL へ移動したことを示す。元のリクエストのメソッドと本文は、リダイレクトされたリクエストを行う際に再利用されることを期待する。

307 と 302 の違いは、 307 はリダイレクトされたリクエストが行われるときに、メソッドと本文が変更されないことが保証されること。 これをもう少し噛み砕くと、302 では、一部の古いクライアントは不正にメソッドを GET に変更するものがあるが、307 では、変更してはならない。

ただし、Google chromeなどでは 307 が Internal Redirect としてHSTSのリダイレクト時に使われている。

308 Permanent Redirect

クエストされたリソースが Location ヘッダーで示された URL へ完全に移動したことを示す。ブラウザーはこのページにリダイレクトし、検索エンジンはリソースへのリンクを更新する。

308 と 301 の違いは、 308 はリダイレクトされたリクエストが行われるときに、メソッドと本文が変更されないことが保証されること。 これをもう少し噛み砕くと、301 では、一部の古いクライアントは不正にメソッドを GET に変更するものがあるが、308 では、変更してはならない。

ただし、ウェブアプリケーションによっては、 308 Permanent Redirect を標準外かつ他の目的に使用していることがある。例えば、 Google Drive はアップロードが不完全に停止したことを表すために、308 Resume Incomplete レスポンスを使用している。

参考

https://tools.ietf.org/html/rfc1945
https://tools.ietf.org/html/rfc2068
https://tools.ietf.org/html/rfc2616
https://tools.ietf.org/html/rfc7231
https://tools.ietf.org/html/rfc7238
https://tools.ietf.org/html/rfc7538
https://postd.cc/choosing-an-http-status-code/
https://www.techscore.com/blog/2016/01/23/http-redirection-status-code/
https://developer.mozilla.org/ja/docs/Web/HTTP/Status/301
https://developer.mozilla.org/ja/docs/Web/HTTP/Status/302
https://developer.mozilla.org/ja/docs/Web/HTTP/Status/303
https://developer.mozilla.org/ja/docs/Web/HTTP/Status/307
https://developer.mozilla.org/ja/docs/Web/HTTP/Status/308

6
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
naka_kyon
基本的には覚書です。ご了承ください。
dmmcom
総合エンタテイメントサイト「DMM.com」を運営。会員数は2,900万人を突破。動画配信、FX、英会話、ゲーム、太陽光発電、3Dプリンタなど40以上のサービスを展開。沖縄での水族館事業参入、ベルギーでのサッカークラブ経営など、様々な事業を手掛ける。また2018年より若手起業家の支援を強化、「DMM VENTURES」による出資や、M&Aなどを積極的に展開している。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
6
Help us understand the problem. What is going on with this article?