このサイトの記事内では「アフィリエイト広告」などの広告を掲載している場合があります。
消費者庁が問題としている「誇大な宣伝や表現」とならないよう配慮しコンテンツを制作しておりますのでご安心ください。
問題のある表現が見つかりましたらお問い合わせよりご一報いただけますと幸いです。

【リダイレクト】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リダイレクトを使用しています。

php

Posted by やろまい