web-dev-qa-db-ja.com

GETメソッドがHTTPでPOSTよりも高速なのはなぜですか?

私はWebプログラミングに慣れていないので、あるページから別のページにデータを送信するGETメソッドとPOSTメソッドについて知りたいと思っています。

GETメソッドはPOSTよりも高速であると言われていますが、理由はわかりません。GETに使用できるのは255文字だけなので、他の理由はありますか?教えてくれ。

43
Embedd_Khurja

それは速度についてではありません。 POSTの方が適しているケースがたくさんあります。たとえば、検索エンジンはGET URLにインデックスを付け、ブラウザはそれらをブックマークして履歴に表示することができます。その結果、アクションを実行した場合GETリクエストに基づいてDBを変更するように、一部のボットもURLをトラバースする可能性があるため、有害な場合があります。

もう1つのケースはセキュリティの問題です。 GETを使用して認証情報を投稿すると、ブラウザの履歴とサーバーのログファイルに一覧表示されます。

45
Mehrdad Afshari

Httpポストに関するもう1つのことは、httpヘッダーExpect: 100-Continue 使用されている。最初のブラウザーはhttpポストヘッダーを送信し、サーバーは「HTTP 100 Continue」で応答します。ブラウザはこれを受け取ると、実際の本文を送信します。

http://omaralzabir.com/atlas_2__http_post_is_slower_and_it_s_default_in_atlas/

これが筆者が求めていた答えだと思います。

41
Kyle Nunery

GETおよびPOSTにはいくつかの誤解があります。主な違いが1つあります。GETはべき等である必要がありますが、POSTはそうである必要はありません。これが意味することつまり、GETは副作用を引き起こしません。つまり、GETをWebアプリケーションに何回でも送信でき(Ctrl + RまたはF5を何度も押すと考えてください)、リクエストは「安全」になります。

POSTでこれを行うことはできません。aPOSTはサーバー上のデータを変更する可能性があります。たとえば、Webでアイテムを注文した場合、アイテムはPOSTサーバーで状態が変更されたため、追加したアイテムの数が1つ増えました。POSTを使用してこれを実行し、ブラウザーで更新をヒットすると、ブラウザーが警告を表示します、GETを使用して実行すると、ブラウザはリクエストを送信するだけです。

サーバー上でGET vs POSTは純粋な規則です。つまり、サーバー上でPOSTをコーディングすることを確認するのは開発者の責任ですnot通話を繰り返すこれを行うにはさまざまな方法がありますが、それは別の質問です。

GETまたはPOSTを使用して同じタスクを実行する場合、実際に質問に答えるには、パフォーマンスの違いはありません。

詳細については、RFC( http://www.w3.org/Protocols/rfc2616/rfc2616.html )を参照してください。

28
Kevin Jones

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を比較する際にパフォーマンスを考慮すべきではありません。

9
Robert

GETは「行くべき場所」と考え、POSTは「何かを行う」と考えます。たとえば、検索結果ページは「場所"そして、ユーザーは後でブックマークするか、履歴からそれを取得する必要があります。POSTを使用してフォームを送信すると、ユーザーはフォームを再度送信することによってのみページを再作成できます。オン一方、削除ボタンをクリックするなどのアクションを実行する場合、ユーザーがURLに戻るたびにアクションが繰り返されるため、GETを使用してこれを送信することは望ましくありません。

7
Tim Booker

2016年からちょうど数セント。

シンプルなメッセージシステムを作成しています。最初に、私はPOSTを使用して新しいアラートを受信しました。jQueryでは、次のようにしました:

$.post('/a/alerts', 'stamp=' + STAMP, function(result)
{
});

そしてPHP私は$ _POST ['stamp']を使用しました。localhostからでも、このようなすべてのリクエストに対して90-100 msを取得しました。単に変更しました:

$.get('/a/alerts?stamp=' + STAMP, function(result)
{
});

PHP $ _GET ['stamp']に切り替わります。変更は1分弱です。今ではすべてのリクエストに-40 msがかかります。

したがって、GETはPOSTの2倍の速度になる可能性があります。もちろん、いつもというわけではありませんが、少量のデータでは常に同じ結果が得られます。

6
Tom

[〜#〜] get [〜#〜]少し高速です値はheader[〜#〜] post [〜#〜]とは異なり、値はリクエストで送信されますbody、コンテンツタイプで指定されている形式。

通常、コンテンツタイプはapplication/x-www-form-urlencodedであるため、リクエストの本文ではクエリ文字列と同じ形式を使用します。

parameter = value&also = anotherフォームでファイルのアップロードを使用する場合は、代わりに、フォーマットが異なるmultipart/form-dataエンコーディングを使用します。より複雑です。

3
Waqleh

私は他の回答に同意しますが、POST要求がキャッシュされることはありませんが、GET要求をキャッシュできることは言及されていませんでした。一部のGET要求が高速に実行される主な理由はこれです。 -粗い場合、実際にリクエストが送信されないことがあります。したがって、実際には高速なGETリクエストではなく、ブラウザのキャッシュです)。

HTTPメソッド:GETとPOST: http://www.w3schools.com/tags/ref_httpmethods.asp

1
AXO

POSTはヘッダーをさらに大きくし、ヘッダーを大きくするだけですが、違いは実際には無視できるはずなので、なぜこれが問題になるのかはわかりません。

HTTPを話す適切な方法は、アクションに対してのみGETを使用し、データに対してPOSTを使用することです。必要はありませんが、大文字と小文字を区別したくない場合もあります。たとえば、Googleボットは、見つけたリンクをたどっているという理由だけで人間が処理することのみを目的としたデータを挿入、削除、または操作できます。

0
Hans