3

現在、Web サーバーでパフォーマンスをテストしており、実稼働サーバーとテスト サーバーの間で非常に異なる結果が得られています。

私たちが行っているテストは次のとおりです。

  • サイトで利用可能な RSS フィード XML をダウンロードします。
  • URL が正しいかどうかを確認するために、XML フィードに存在するすべてのリンクの HEAD 要求を行います。

驚くべきことに、テスト サーバーでの平均応答時間は約 15 ミリ秒ですが、同じ測定値が本番サーバーで 900 ミリ秒を示しています。両方のサーバーが同じように構成されている (と思われる) ため、これらの結果には非常に困惑しています。

  1. .CFM ページの HEAD リクエストは、実際には ColdFusion サーバーではなく、IIS のみに関与すると考えてよろしいですか?
  2. 最初のポイントが正しければ、IIS レベルのどこで確認できますか?

皆さんから受け取った提案をフォローアップして、CFLog が実行されるかどうかを確認するために、ログ エントリをテスト cfm ページに追加しようとしました。

驚くべきことに、同じファイルに対する同じ HEAD 要求によって、prod にログ エントリが生成されます。そしてテスト中ではありません。明らかに、構成はテストと本番で異なるはずですが、どのレベルであるかはわかりません。

4

2 に答える 2

1

あなたの最初の仮定は間違っています。リクエストへのレスポンスHEADはコーディングする必要があり、自動的に処理されません。HEADリクエストは、リクエストと同じヘッダー情報で応答する必要がありますGET。これは通常、リクエストと同じコードを実行GETし、レスポンスのメッセージ本文を省略することを意味します。

HTTP 仕様のセクション 9.4から:

HEAD メソッドは、サーバーが応答でメッセージ本文を返してはならないことを除いて、GET と同じです。HEAD リクエストに応答して HTTP ヘッダーに含まれるメタ情報は、GET リクエストに応答して送信される情報と同一である必要があります。このメソッドは、エンティティ本体自体を転送せずに、リクエストによって暗示されたエンティティに関するメタ情報を取得するために使用できます。この方法は、ハイパーテキスト リンクの有効性、アクセシビリティ、および最近の変更をテストするためによく使用されます。

HEAD リクエストへのレスポンスは、レスポンスに含まれる情報を使用して、そのリソースから以前にキャッシュされたエンティティを更新できるという意味で、キャッシュ可能である場合があります。新しいフィールド値が、キャッシュされたエンティティが現在のエンティティと異なることを示している場合 (Content-Length、Content-MD5、ETag、または Last-Modified の変更によって示されるように)、キャッシュはキャッシュ エントリを古いものとして扱わなければなりません。

HEAD応答、有効なETagsなどの大部分を実際に実装する動的サイト、CMS、またはフレームワークを目にすることは非常にまれだと思います。そのため、通常、 aGETと aから同じ応答が得られます。リクエストHEADから削除されHEADます。

時間差で発生しているのは、サーバー間のコンテンツの違いによるものだと思います。つまり、テスト サーバーには最小限のコンテンツしかない場合があるため、フル コンテンツの運用サーバーよりも高速に実行されます。

于 2013-02-18T11:46:36.560 に答える
0

この質問に対する答えはわかりませんでしたが、いくつかのコードをまとめてテストし、いくつかの結果を得ました。警告: 私は内部 Tomcat Web サーバーのみを使用しており、CF10 を使用しています (CF8 を使用していることに注意してください)。あなたの特定の状況に照らして、これらの警告が私の調査結果を無効にするとは思いません。

<!--- headMe.cfm --->
<cflog text="hit" file="headMe">


<!--- doHead.cfm --->
<cfhttp method="head" url="http://localhost/headMe.cfm" result="httpResponse" />
<cfdump var="#variables#">

そこで、headMe.cfm の HTTP HEAD を実行する doHead.cfm を参照します。headMe.cfm が実際に実行された場合、headMe.log にログ エントリが記録されます。そうでない場合: ログ エントリはありません。

httpResponse変数はすべて正当であり、HEAD リクエストに期待されるとおりでした。ログ エントリを取得しました。

したがって、HEAD リクエストを受信すると、残念ながらすべての CFML が実際に実行されるというのが私の結論です。そうあるべきではないと思います。HTTP 仕様には、「動的」リクエストを完全に実行する必要がある、または実行しないことを示唆するものは何もありませんが、そうでない場合はいいと思います。

とにかく、HTH。

于 2013-02-18T04:28:38.777 に答える