269

GETまたはPOSTメソッドを使用する場合の違いは何ですか? どちらがより安全ですか? それぞれの(欠点)利点は何ですか?

同様の質問

4

14 に答える 14

283

それはセキュリティの問題ではありません。HTTPプロトコルでは、GETタイプのリクエストはべき等であると定義されていますが POSTには副作用がある可能性があります。平易な英語では、GETは何かを変更せずに表示するために使用され、POSTは何かを変更するために使用されることを意味します。たとえば、検索ページではGETを使用する必要がありますが、パスワードを変更するフォームではPOSTを使用する必要があります。

また、PHPは概念を少し混乱させることに注意してください。POSTリクエストは、クエリ文字列からリクエスト本文を介して入力を取得します。GETリクエストは、クエリ文字列から入力を取得するだけです。したがって、POSTリクエストはGETリクエストのスーパーセットです。POSTリクエストで使用できます。$_GETまた、同じ名前のパラメータを含めることも意味があり、それは異なる意味を持ち$_POSTます$_GET

たとえば、記事を編集するためのフォームがあるとします。article-idはクエリ文字列に含まれている可能性があります(したがって、から利用できます$_GET['id'])が、article-idを変更するとします。その場合、新しいIDがリクエスト本文($_POST['id'])に存在する可能性があります。OK、おそらくそれは最良の例ではありませんが、それが2つの違いを示していることを願っています。

于 2009-02-02T21:23:11.613 に答える
85

ユーザーがフォームに情報を入力して [送信] をクリックすると、ブラウザからサーバーに情報を送信する方法が 2 つあります。URL を使用する方法と、HTTP 要求の本文を使用する方法です。

前の例で使用された GET メソッドは、名前と値のペアを URL に追加します。残念ながら、URL の長さには制限があるため、この方法はパラメーターが少ない場合にのみ機能します。フォームで多数のパラメーターが使用されている場合、またはパラメーターに大量のデータが含まれている場合、URL が切り詰められる可能性があります。また、URL で渡されたパラメーターはブラウザーのアドレス フィールドに表示されますが、パスワードを表示するのに最適な場所ではありません。

GET メソッドの代替は POST メソッドです。このメソッドは、名前と値のペアを HTTP 要求の本文内にパッケージ化します。これにより、よりクリーンな URL が作成され、フォーム出力にサイズ制限が課されなくなります。また、より安全です。

于 2009-02-02T21:17:59.987 に答える
38

最良の答えは最初のものでした。

あなたが使用している:

  • データを取得したい場合は GET (GET DATA)
  • データを送信したい場合はPOST (POST DATA)。
于 2011-04-04T06:10:51.743 に答える
27

を使用することには、2つの一般的な「セキュリティ」の影響がありますGET。データはURL文字列に表示されるため、アドレスバー/ URLを肩越しに見ている人が、セッションの乗っ取りに使用される可能性のあるセッションCookieなど、知られてはならないものを表示できる可能性があります。誰もがカメラ付き携帯電話を持っていることを覚えておいてください。

のその他のセキュリティへの影響は、要求元URLの一部としてほとんどのWebサーバーアクセスログに記録される変数にGET関係しています。GET状況、規制環境、およびデータの一般的な機密性によっては、これが懸念を引き起こす可能性があります。

GET一部のクライアント/ファイアウォール/IDSシステムは、過剰な量のデータを含む要求に眉をひそめる可能性があるため、信頼性の低い結果を提供する可能性があります。

POSTWebサーバーへのファイルアップロードに使用されるマルチパートバイナリ入力のサポートなどの高度な機能をサポートします。

POST送信されるデータのサイズを事前に知っておく必要があるため、アプリケーション固有のクライアント実装の複雑さが増す可能性のあるcontent-lengthヘッダーが必要です。これにより、クライアント要求が排他的なシングルパスインクリメンタルモードで形成されなくなります。HTTPおそらく、 RPC(Remote Procedure Call)トランスポートとして使用して悪用することを選択した人にとっては小さな問題です。

他の人は、この質問の意味の違いと「いつ」の部分をカバーするのにすでに良い仕事をしています。

于 2009-02-02T22:19:44.103 に答える
20

大量のデータや機密情報がある場合は、POSTを使用する必要があります(本当に機密情報には安全な接続も必要です)。

すべてのデータがブックマークに含まれているため、他のユーザーがページをブックマークできるようにする場合は、GETを使用します。

データはユーザーに警告せずに毎回再送信されるため、GETメソッドでREFRESHを押す人に注意してください(POSTはデータの再送信についてユーザーに警告する場合があります)。

于 2009-02-02T21:23:28.913 に答える
18

URLから情報を取得する場合は GET を使用し、URL に情報送信する場合は POSTを使用します。

于 2009-02-02T21:23:11.597 に答える
17

このW3C ドキュメントでは、HTTP GET および POST の使用について説明しています。

信頼できるソースだと思います。

概要は次のとおりです (ドキュメントのセクション 1.3)。

  • 対話が質問に似ている場合 (つまり、クエリ、読み取り操作、ルックアップなどの安全な操作である場合) は、GETを使用します。
  • 次の場合は POSTを使用します。
    • インタラクションは注文に似ている、または
    • 相互作用は、ユーザーが認識する方法でリソースの状態を変更します (たとえば、サービスへのサブスクリプション)、または
    • ユーザーは、対話の結果に対して責任を負う必要があります。
于 2014-04-02T15:51:22.037 に答える
10

データに変更を加えるときにPOSTを使用する理由:

  • Google Web AcceleratorのようなWebアクセラレータは、ページ上のすべての(GET)リンクをクリックして、それらをキャッシュします。リンクが物事に変更を加える場合、これは非常に悪いことです。
  • ブラウザはGETリクエストをキャッシュするため、ユーザーがリンクをクリックしても、変更を実行するためのリクエストをサーバーに送信しない場合があります。
  • サイト/アプリケーションをCSRFから保護するには、POSTを使用する必要があります。アプリを完全に保護するには、サーバー上で一意の識別子を生成し、それをリクエストで送信する必要があります。

また、機密情報はアドレスバー、ブックマーク、サーバーログに表示されるため、クエリ文字列(GETのオプションのみ)には含めないでください。

うまくいけば、これがPOSTが「安全」であると人々が言う理由を説明します。機密データを送信する場合は、SSLを使用する必要があります。

于 2009-02-03T18:47:17.510 に答える
9

GET同様の目標を達成できるPOSTHTTPメソッドです

GETは基本的にデータを取得 (取得) するためのものです。AGETには本文が必要ないため、Cookie を除いて、情報を渡す唯一の場所は URL であり、URL の長さは制限されています。送信GETPOSTれるデータはURL

GETパスワード、クレジット カード、またはその他の機密情報を送信する場合 は絶対に使用しないでください!, データは URL 内の全員に表示されます. データをキャッシュすることができます. GETボタンをリロードまたはコールバックしても害はありません。ブックマークが付けられ、パラメータはブラウザの履歴に残り、ASCII 文字のみが許可されます。

POSTデータの保存や更新、製品の注文、電子メールの送信など、あらゆることが含まれる場合があります。POSTメソッドには本体があります。

POSTメソッドは機密情報をサーバーに渡すために保護されており、URL のクエリ パラメータには表示されず、パラメータはブラウザの履歴に保存されません。データ長に制限はありません。ブラウザをリロードすると、データが再送信されようとしていることをユーザーに警告する必要があります。POSTメソッドはブックマークできません

于 2014-06-26T12:07:51.480 に答える
1

URL からリソースを取得する場合は、GET メソッドを使用します。ブラウザの戻るボタンを押すと常に最後のページが表示され、ブックマークされる可能性があるため、POST メソッドほど安全ではありません。

URL に何かを「送信」する場合は、POST メソッドを使用します。たとえば、Google アカウントを作成したい場合、すべての詳細情報を入力する必要がある場合があります。送信が成功したら、[送信] ボタン (ここで POST メソッドが呼び出されます) を押して、ブラウザの [戻る] ボタンを押してみます。 、入力されたフォームの最後のページではなく、エラーまたは新しい空白のフォームが表示されます。

于 2016-03-06T18:33:07.913 に答える
-10

GETメソッド:

  • 256 文字の日付を送信するためだけに使用されます

  • この方法を使用すると、ブラウザで情報を見ることができます

  • フォームで使用されるデフォルトの方法です

  • それほど安全ではありません。


POSTメソッド:

  • 無制限のデータを送信するために使用されます。

  • この方法では、ブラウザ上で情報を見ることができません

  • POSTメソッドを明示的に言及できます

  • GETメソッドよりも安全です

  • より高度な機能を提供します

于 2012-09-30T05:45:26.053 に答える