GET
またはPOST
メソッドを使用する場合の違いは何ですか?どちらが安全ですか?それらのそれぞれの(欠点)利点は何ですか?
( 同様の質問 )
セキュリティの問題ではありません。 HTTPプロトコルはGETタイプのリクエストを idempotent として定義しますが、POSTには副作用がある場合があります。平易な英語では、GETは変更せずに何かを表示するために使用され、POSTは何かを変更するために使用されることを意味します。たとえば、検索ページではGETを使用し、パスワードを変更するフォームではPOSTを使用する必要があります。
また、PHPは概念を少し混乱させることに注意してください。 POST要求は、クエリ文字列から要求本文を介して入力を取得します。 GETリクエストは、クエリ文字列から入力を取得するだけです。したがって、POSTリクエストはGETリクエストのスーパーセットです。 POSTリクエストで$_GET
を使用できます。また、$_POST
と$_GET
に同じ名前のパラメーターを持たせることも意味があります。
たとえば、記事を編集するためのフォームがあるとします。 article-idはクエリ文字列に含まれている可能性があります(したがって、$_GET['id']
を介して利用できます)が、article-idを変更するとします。その後、新しいIDがリクエスト本文($_POST['id']
)に存在する場合があります。おそらくそれは最良の例ではないかもしれませんが、この2つの違いを示していると思います。
ユーザーがフォームに情報を入力して[送信]をクリックすると、ブラウザーからサーバーに情報を送信する方法が2つあります。URLで送信する方法と、HTTP要求の本文で送信する方法です。
前の例で使用されたGETメソッドは、名前と値のペアをURLに追加します。残念ながら、URLの長さは制限されているため、このメソッドはいくつかのパラメーターしかない場合にのみ機能します。フォームで多数のパラメーターが使用されている場合、またはパラメーターに大量のデータが含まれている場合、URLは切り捨てられる可能性があります。また、URLに渡されたパラメーターは、パスワードを表示するのに最適な場所ではなく、ブラウザーのアドレスフィールドに表示されます。
GETメソッドの代替はPOSTメソッドです。このメソッドは、HTTPリクエストの本文内に名前と値のペアをパッケージ化します。これにより、URLが簡潔になり、フォーム出力にサイズ制限が課せられません。また、より安全です。
一番の答えは最初のものでした。
あなたが使用しています:
GETの使用には、2つの一般的な「セキュリティ」の意味があります。 URL文字列にデータが表示されるため、アドレスバー/ URLで肩越しに見ている人が、セッション乗っ取りに使用される可能性のあるセッションCookieなど、自分が見たくないものを表示できる可能性があります。 everyoneにはカメラ付き携帯電話があります。
GETのその他のセキュリティ上の意味は、リクエストURLの一部としてほとんどのWebサーバーのアクセスログに記録されるGET変数に関係しています。状況、規制環境、およびデータの一般的な機密性によっては、潜在的に懸念を引き起こす可能性があります。
一部のクライアント/ファイアウォール/ IDSシステムは、大量のデータを含むGETリクエストで眉をひそめる可能性があり、そのため信頼性の低い結果を提供する場合があります。
POSTは、Webサーバーへのファイルのアップロードに使用されるマルチパートバイナリ入力のサポートなどの高度な機能をサポートします。
POSTにはコンテンツ長ヘッダーが必要です。送信されるデータのサイズが事前にわかっている必要があるため、クライアントリクエストがシングルパスインクリメンタルモードでのみ形成されるのを防ぐため、アプリケーション固有のクライアント実装の複雑さが増します。おそらく、HTTPをRPC(リモートプロシージャコール)トランスポートとして使用することでHTTPを悪用することを選択した場合の小さな問題です。
他の人は、セマンティックの違いとこの質問の「いつ」の部分をカバーするのにすでに良い仕事をしました。
情報を取得するときにGETを使用しますfrom URLおよび情報を送信するときにPOST to URL。
大量のデータがある場合はPOSTを使用するか、機密情報を並べ替えます(機密情報には安全な接続も必要です)。
すべてのデータがブックマークに含まれているため、人々がページをブックマークできるようにする場合は、GETを使用します。
GETメソッドでREFRESHを押す人に注意してください。データはユーザーに警告せずに毎回送信されるためです(POSTはユーザーにデータの再送信について警告することがあります)。
この W3Cドキュメント は、HTTP GETおよびPOSTの使用を説明しています。
信頼できる情報源だと思います。
概要は次のとおりです(ドキュメントのセクション1.3):
- インタラクションが質問に似ている場合(つまり、クエリ、読み取り操作、検索などの安全な操作)にGETを使用します。
- 使用するPOSTif:
- インタラクションは注文に似ている、または
- インタラクションは、ユーザーが知覚する方法でリソースの状態を変更します(たとえば、サービスのサブスクリプション)、または
- ユーザーは、相互作用の結果に対して責任を負います。
GetメソッドとPostメソッドは、使用しているサーバーテクノロジーとは関係ありません。php、asp.net、またはRubyでも同じように機能します。 GETおよびPOSTはHTTPプロトコルの一部です。マークのとおり、POSTはより安全です。 POSTフォームもブラウザによってキャッシュされません。 POSTは、大量のデータの転送にも使用されます。
データを変更するときにPOSTを使用する理由:
また、クエリ文字列に機密情報を含めないでください(GETのオプションのみ)。アドレスバー、ブックマーク、およびサーバーログに表示されるためです。
POSTが「安全」であると人々が言う理由を説明できれば幸いです。機密データを送信する場合は、SSLを使用する必要があります。
GET
およびPOST
は、同様の目標を達成するHTTPメソッドですcan
GET
は基本的にデータを取得(取得)するためのものです。AGET
は本文を持ちません。そのため、Cookieを除き、情報を渡す唯一の場所はURLで、URLの長さは制限されますGET
は、送信されるデータがURLの一部であるため、POST
と比較して安全性が低くなります
パスワード、クレジットカードまたはその他の機密情報を送信するときにGET
を使用しないでください。データはURL内の全員に表示されます。 GET
は、ボタンをリロードまたはコールバックする場合は無害です。ブックマークが付けられ、パラメーターはブラウザーの履歴に残り、ASCII文字のみが許可されます。
POST
には、データの保存や更新、製品の注文、電子メールの送信など、あらゆることが含まれます。 POST
メソッドには本体があります。
POST
メソッドは、機密情報や機密情報をサーバーに渡すために保護されており、URLのクエリパラメーターには表示されず、ブラウザーの履歴には保存されません。データ長に制限はありません。ブラウザをリロードするとき、データが再送信されることをユーザーに警告する必要があります。 POST
メソッドはブックマークできません
URLからリソースを取得する場合は、GETメソッドを使用します。ブラウザの戻るボタンを押すと常に最後のページが表示され、ブックマークされる可能性があるため、POSTメソッドほど安全ではありません。
URLに何かを「送信」する場合は、POSTメソッドを使用します。たとえば、Googleアカウントを作成し、すべての詳細情報を入力する必要がある場合は、「送信」ボタンを押します(ここでPOSTメソッドが呼び出されます)。正常に送信したら、ブラウザーの戻るボタンを押します。 、入力済みフォームの最後のページではなく、エラーまたは新しい空白のフォームが表示されます。