哲学的に、私は常に、状態を変更しない HTTP リクエストには GET を使用し、変更するリクエストには POST を使用することに慣れています。ただし、最近、これに関していくつかの問題に遭遇したため、例外が発生しました。クロスサイト攻撃のようなセキュリティ上の懸念など、間違った HTTP 動詞を使用することによる非哲学的なマイナス面があるかどうか、私は興味がありました。
例外 #1
アーカイブに動的にパッケージ化された、要求されたファイルのリストのダウンロードをトリガーしたいと考えていました。ただし、ファイルのリストが非常に大きくなり、URL でクエリ文字列パラメーターとしてエンコードされると、Internet Explorer の URL の長さの制限を超える可能性がありました。これを回避するために、POST でダウンロードをトリガーすることになりました。
例外 2
ログインしているかどうかに関係なく常に表示されるボタンがありますが、ログインしている場合にのみ状態を変更できます。ログインしていないときに押すと、ログインページに移動します次に行く予定の場所を示すクエリ文字列パラメーター。ログインすると、そこにリダイレクトされ、アクションが完了します。ただし、リダイレクトは GET のみを生成でき、POST は生成できません。したがって、この状況で GET が状態を変更できるようにしました。
これらの例外の悪用や欠点はありますか? これらは、リファラー ヘッダーをチェックしても防止できないクロスサイト リクエスト フォージェリ シナリオを許可しますか?