web-dev-qa-db-ja.com

すべてのリクエストにPOSTメソッドを使用できないのはなぜですか?

GETリクエストはキャッシュされ、POSTを使用する必要があるため、GETリクエストでは機密情報を送信しないでください。

  • すべての要求に対してPOSTメソッドを使用できず、GET要求を無視できないのはなぜですか?

  • GETメソッドを無視してPOSTのみを使用し始めた場合、どのような困難/障壁に直面しますか?

1
jey

HTTPには異なるverbsがあり、セマンティクスが異なります。

  • GET:サーバー側は何も変更せず、同じパラメーターを持つ複数のGETは同じ応答を取得する必要があります-通常、アカウント値を取得します
  • POST:サーバー側で変更を行うことができます。POSTに同じパラメーターを指定すると、結果や応答が異なる可能性があります-通常、金額をアカウントに追加します
  • PUT:サーバー側で変更を行うことができます。同じパラメーターを持つ複数のPUTは同じ結果と応答につながるはずです-通常はアカウント値を設定します

DELETEとHEADも存在しますが、ここではそれらを使用する必要はないと思います。

POSTはべき等ではないため、同じブラウザを2回送信すると警告が表示されますPOST要求が望ましくない[ 〜#〜] get [〜#〜]ユースケース。

とにかく、 HTTPリクエストのヘッダー 応答をキャッシュするかどうかを制御するため、GETリクエストへの応答を保持しないようにキャッシュに要求することができます。

最後に、(プロキシをキャッシュするという意味で)キャッシュはセキュリティに関連していません。リクエストやレスポンスを誰かに盗聴させたくない場合は、キャッシュについて心配する必要はありませんが、HTTPSを使用して、すべてが正しく暗号化されるようにします。

ブラウザのキャッシュは別の質問です。それは、最後のURLを履歴キャッシュに保存できるからです。したがって、機密情報は送信しないでくださいRL内。ただし、ブラウザーを閉じるときに履歴を常に消去し、サイトの閲覧が終了したらブラウザーを閉じる場合を除きます。ただし、URLでの送信とGETリクエストでの送信は別の質問です。 HTTP基本認証では、GETリクエストのHTTPヘッダーで認証情報を渡すことができるため、安全です。また、ログインフォーム認証は非べき等の要求です(認証後と認証前の状態は同じではありません)。shall POST HTTPセマンティクスごとの要求)。

TL/DR:問題はGET vs POSTリクエストではありません。機密性のルールは次のとおりです。

  • 常にHTTPSを使用する
  • 機密データをURLで渡さないでください。
6
Serge Ballesta

主な問題は、POSTリクエストによって送信されたページをリロードしようとすると、通常、ブラウザが何かを2回行う可能性があるという警告をポップアップします。これはあなたが望むことではありません。 GETリクエストを使用するほとんどのページ。

1
Mike Scott