GETメソッドがHTTPのPOSTよりも高速なのはなぜですか?
質問
Webプログラミングは初めてで、あるページから別のページにデータを送信するGETおよびPOSTメソッドについて知りたいだけです。
GETメソッドはPOSTよりも高速であると言われていますが、その理由はわかりません。 私が見つけられた理由の1つは、GETが255文字しか受け取れないことです? 他に理由はありますか?誰かが私に説明してください。
解決
速度はそれほど重要ではありません。 POSTの方が適切な場合がたくさんあります。たとえば、検索エンジンはGET URLのインデックスを作成し、ブラウザはそれらをブックマークして履歴に表示することができます。そのため、GETリクエストに基づいてDBを変更するなどのアクションを実行すると、一部のボットもURLを通過する可能性があるため、有害な場合があります。
他のケースはセキュリティの問題である可能性があります。 GETを使用して資格情報を投稿すると、ブラウザーの履歴とサーバーログファイルにリストされます。
他のヒント
http投稿に関するもう1つのことは、httpヘッダー Expect:100-Continue
が使用されている場合、2回の呼び出しが可能であることです。最初のブラウザーは、HTTP投稿ヘッダーとサーバー応答を“ HTTP 100 Continue”で送信します。ブラウザはこれを受信すると、実際の本文を送信します。
http://omaralzabir.com/atlas_2__http_post_is_slower_and_it_s_default_in_atlas/
これは著者が探していた答えだと思います。
HTTPのGETおよびPOSTにはいくつかの誤解があります。 1つの主な違いがあります。POSTがそうである必要はないが、GETはべき等でなければなりません。これは、GETが副作用を引き起こさないことを意味します。つまり、Webアプリケーションに何度でもGETを送信でき(Ctrl + RまたはF5を何度も押すと考えられます)、リクエストは「安全」です
POSTではできません。POSTはサーバー上のデータを変更する場合があります。たとえば、Webでアイテムを注文した場合、サーバーの状態が変更されるため、POSTでアイテムを追加する必要があります。追加したアイテムの数は1つ増えました。ブラウザでブラウザは警告を表示します。GETで実行すると、ブラウザは単にリクエストを送信します。
サーバーではGET対POSTは純粋な慣習です。つまり、サーバーでPOSTをコーディングして呼び出しを繰り返ししないことを確認するのは開発者の責任です。これにはさまざまな方法がありますが、それは別の質問です。
同じタスクを実行するためにGETまたはPOSTを使用する場合、実際に質問に答えても、パフォーマンスの違いはありません。
RFCを読むことができます( http://www.w3.org/Protocols/詳細については、rfc2616 / rfc2616.html )をご覧ください。
httpプロトコルを見ると、POSTまたはGETも同様に簡単かつ高速に解析できるはずです。私は、パフォーマンスの違いはないと主張します。
生のHTTPヘッダーを見てください
http GET
GET /index.html?userid=joe&password=guessme HTTP/1.1
Host: www.mysite.com
User-Agent: Mozilla/4.0
http POST
POST /login.jsp HTTP/1.1
Host: www.mysite.com
User-Agent: Mozilla/4.0
Content-Length: 27
Content-Type: application/x-www-form-urlencoded
userid=joe&password=guessme
私の観点からは、GETとPOSTを比較する際にパフォーマンスを考慮するべきではありません。
GETは「行く場所」と考え、POSTは「何かをする」と考えるべきです。たとえば、検索結果ページは「場所」なので、GETを使用して検索フォームを送信する必要があります。ユーザーは後でブックマークしたり、履歴から取得したりします。 POSTを使用してフォームを送信すると、ユーザーはフォームを再度送信することによってのみページを再作成できます。一方、削除ボタンをクリックするなどのアクションを実行する場合、ユーザーがURLに戻るたびにアクションが繰り返されるため、GETでこれを送信したくないでしょう。
2016年から数セント。
単純なメッセージシステムを作成しています。最初に、POSTを使用して新しいアラートを受信しました。 jQueryには:
がありました$.post('/a/alerts', 'stamp=' + STAMP, function(result)
{
});
そして、PHPでは$ _POST ['stamp']を使用しました。ローカルホストからでも、このようなリクエストごとに 90-100 ms を受け取りました。 単に変更しました:
$.get('/a/alerts?stamp=' + STAMP, function(result)
{
});
そしてPHPでは$ _GET ['stamp']に切り替えました。そのため、変更は1分弱です。現在、すべてのリクエストには 30〜40ミリ秒かかります。
したがって、 GETはPOSTの2倍の速度で処理できます。もちろん、常にではありませんが、少量のデータに対しては常に同じ結果が得られます。
GET はわずかに高速ですリクエスト body で、コンテンツタイプが指定する形式で。
通常、コンテンツタイプはapplication / x-www-form-urlencodedであるため、リクエスト本文はクエリ文字列と同じ形式を使用します:
parameter = value& also = another フォームでファイルアップロードを使用する場合は、代わりにmultipart / form-dataエンコードを使用します。これは異なる形式です。もっと複雑です。
他の回答にも同意しますが、POSTリクエストがキャッシュされることなくGETリクエストがキャッシュされることは言及されていません。これがいくつかのGET要求がより速く実行される主な理由だと思います。 (大まかに言うと、実際にはリクエストが送信されないことがあります。したがって、実際にはGETリクエストではなく、ブラウザのキャッシュです。)
HTTPメソッド:GETとPOST: http://www.w3schools.com/tags/ ref_httpmethods.asp
POSTはヘッダーをより大きくするだけで、ヘッダーをより大きくしますが、違いは実際には無視できるほど小さいはずなので、なぜこれが問題になるのかわかりません。
HTTPを話す適切な方法は、アクションにのみGETを使用し、データにPOSTを使用することです。する必要はありませんが、たとえば、Googleのボットが、検出したリンクをたどっているだけで人間が処理することを意図したデータを挿入、削除、または操作できる場合もありたくありません。