【リダイレクト】post/getデータを保持したいなら307リダイレクト
とある動作を実現するために、リダイレクトについて調べたので各リダイレクト番号の差を整理したいと思います。
post/getされたデータはリダイレクトしたらどうなるのかに焦点を当てた内容です。
post/getデータはリダイレクトしたらどうなるのか
getされたデータ | postされたデータ | 主な使用例 | |
---|---|---|---|
301 | 変更されない | getに変更されるかも | ウェブサイトの再編 |
302 | 変更されない | getに変更されるかも | ウェブページは不測の理由により、一時的に利用できない状態です。 |
303 | 変更されない | getに変更される | ページの再読み込みによって操作が再度実施されることを防ぐために、 PUT や POST の後のリダイレクトで使用します。 |
307 | 変更されない | 変更されない | ウェブページは不測の理由により、一時的に使用できない状態です。 |
参考サイト:HTTP のリダイレクト – HTTP | MDN
リダイレクト番号は上記の4種類があります。(308については省略)
上の表を見てもらうと分かるのですが、getされたデータはどの番号でリダイレクトしてもgetのままリダイレクトされてます。
対してpostされたデータは301~303ではgetに変更される可能性があります。
そのため、postされたデータをpostのままリダイレクトしたい場合には307リダイレクトをする必要があります。
なぜ307リダイレクトを使ったのか
post送信されたデータをpostのままリダイレクトしたいケースは正直、あまりないと思います。
私がこのリダイレクトをしたかったのは、サーブレットと連携してログイン認証をさせたかったためです。
上の図のように、オレンジ色のサーブレットの個所でログイン判定を行います。
本当はサーブレットでセッションを作成しようと思っていたのですが、WebページとサーブレットではURLが異なるので同一セッションとなりません。
そのため、PHPでリダイレクトページを作ってセッションを作成しています。
このリダイレクトの時にpostされたログイン情報をpostのままサーブレットへ受け渡ししたかったため、307リダイレクトを使用しています。