4

私は常に、HEADリクエストの代わりにリクエストを実行するGET方が(リソースのサイズに関係なく)高速であるため、特定のソリューションで利点があると考えていました。

ただし、HEADPythonで(5 MB以上の動的に生成されたリソースに対して)リクエストを行うと、GETリクエストを行うのと同じ時間がかかることに気付きました(期待していた「2秒未満」ではなく、ほぼ27秒)。

いくつかのurllib2ソリューションを使用して、HEADここで見つかったリクエストを作成し、さらに使用しましたpycurl(設定headersnobodyto True)。両方とも同じ時間がかかりました。

概念的に何かが欠けていますか?Pythonを使用して、「クイック」HEADリクエストを実行することは可能ですか?

4

3 に答える 3

7

リクエスタやネットワークではなく、サーバーが多くの時間を費やしています。動的リソースの場合、サーバーはそれを構築するまで、すべてのヘッダー情報 (特に Content-Length) を認識していない可能性があります。したがって、HEAD を実行する場合でも GET を実行する場合でも、全体をビルドする必要があります。

于 2011-10-19T18:43:01.593 に答える
1

応答時間は、リクエストではなく、サーバーによって支配されます。HEAD リクエストはより少ないデータ (ヘッダーのみ) を返すため、概念的には高速であるはずですが、実際には多くの静的リソースがキャッシュされるため、測定可能な違いはほとんどありません (追加のパケットが送信される時間のみ)。

于 2011-10-19T18:43:37.850 に答える
1

おそらく、その要求時間の大部分は、実際には、サーバー上で 5 MB 以上の応答を生成するプロセスであり、応答を転送する時間ではありません。

多くの場合、Web アプリケーションは HEAD リクエストに応答するときにスクリプト全体を実行しますが、本文全体をリクエスタに送り返すことはありません。

そのリクエストを処理しているコードにアクセスできる場合は、そこに条件を追加して、メソッドに応じてリクエストを異なる方法で処理できるようにすることができます。これにより、劇的に高速化される可能性があります。

于 2011-10-19T18:43:50.057 に答える