31

過去にいくつかの ajax アプリケーションで GET リクエストを使用していましたが、現在は代わりに POST リクエストを使用し始めています。POST リクエストは、わずかに安全で、間違いなくより URL にやさしく/きれいに見えます。したがって、GETリクエストを使用する必要がある理由があるかどうか疑問に思っています。

4

7 に答える 7

26

私は通常、次のように質問を設定します。リクエスト後に重要な変更はありますか?(ロギングなどにも関わらず)。含まれている場合はPOSTリクエストであり、そうでない場合はGETリクエストである必要があります。

POSTリクエストを「少し」安全に呼んでいただければ幸いです。ユーザーによるページへのPOSTリクエストを偽造するのは簡単です。ただし、POSTリクエストにすることで、Webアクセラレータまたはリロードが誤ってアクションを再トリガーするのを防ぐことができます。

AJAXとして、もう1つの考慮事項があります。コールバックをサポートするJSONを返す場合は、他のWebサイトに表示されたくない機密データをそこに入れないように十分に注意してください。ウィキペディアには、これらの線に沿って脆弱性があり、ユーザーのアンチCSRFトークンがJSONAPIを介して明らかにされました。

于 2008-10-12T07:58:33.757 に答える
18

ただし、すべての良い点は、質問への回答として、特定のシナリオでは POST リクエストよりも GET リクエストの方が便利です。

  1. ブックマークすることができます
  2. それらはキャッシュできます
  3. 彼らはより速いです
  4. それらには既知の結果があるため (データを変更しないと仮定して)、複数回アクセスしても問題ありません。

後世のために、このコメントをブログ ノートで更新します。re: ポイント #3 ここで、Omar AL Zabir (参照されたブログ投稿の著者) のすべての功績によるものです。

「Atlas はデフォルトで、すべての AJAX 呼び出しに対して HTTP POST を作成します。Http POST は Http GET よりも高価です。ネットワーク経由でより多くのバイトを送信するため、貴重なネットワーク時間がかかり、ASP.NET がサーバー側で余分な処理を行うことにもなります。したがって、 , 可能な限り Http Get を使用する必要があります. ただし, Http Get ではオブジェクトをパラメータとして渡すことはできません. 渡すことができるのは数値, 文字列, 日付のみです. Http Get 呼び出しを行うと, Atlas はエンコードされた URL を構築し、その URL へのヒット. したがって、URL が 2048 文字を超えるようなコンテンツを渡してはなりません. 私の知る限り、それはすべての URL の最大長です.

http 投稿のもう 1 つの悪い点は、実際には 2 回の呼び出しです。最初のブラウザは http ポスト ヘッダーを送信し、サーバーは「HTTP 100 Continue」で応答します。ブラウザはこれを受け取ると、実際の本文を送信します。」

于 2009-11-22T01:43:00.113 に答える
16

副作用のないリクエストを実行する場合は、GETを使用する必要があります。たとえば、情報を取得するだけです。このリクエストは次のことができます。

  • 問題なく繰り返す-ブラウザがエラーを検出した場合、サイレントに再試行できます
  • 結果をブラウザにキャッシュしてもらいます
  • プロキシによってキャッシュされる

これらはすべて良いです。データ(特に公開データ)のみを取得するものは、実際にはGETである必要があります。サーバーは、必要に応じてキャッシュを許可するために、適切なLast-Modified:およびExpires:ヘッダーを送信する必要があります。

于 2008-10-12T07:57:52.997 に答える
8

これは、GETを使用する場所とPOSTを使用する場所を決定するのに役立つ場合があります。

URI、アドレス指定可能性、およびHTTPGETとPOSTの使用

于 2008-10-12T07:54:14.127 に答える
6

POSTリクエストはGETと同じくらい安全ではありません。主な違いは、POSTはサーバーアプリケーションの状態を変更するために使用されますが、GETはサーバーアプリケーションからのデータのみを要求することです。

クリーンで「RESTful」なURLを使用する場合、違いは重要です。URL自体がリソースを指定し、メソッドが異なればサーバー側でさまざまなアクションがトリガーされます。

于 2008-10-12T07:58:52.090 に答える
4

おそらく最も重要なのは、GETがURL履歴でブックマーク可能/表示可能であり、Googleで検索できることです。

POSTは、イベントをブックマーク可能にしたり、URLとして入力したりしたくない場合に重要です。そうしないと、たとえば、ユーザー(またはGoogleがURLをクロールする)が誤ってシステムからユーザーを削除するなどの処理を行う可能性があります。

于 2008-10-12T07:57:30.390 に答える