2011-10-18 9 views
1

ウェブサイトの一見ランダムなクライアントから、非常に興味深い動作があります。私が見ていることは、サーバーへのランダムなPOST要求がバックエンドに不正な要求をもたらすということです。なぜリクエストが悪いのかを追跡しましたが、なぜこれが発生するのかまだ分かりません。POST-bodyを送信する前にアイドル状態になっているブラウザ

  1. クライアントはHTTPでWebサーバーに接続します。
  2. クライアントは通常のPOST要求(本文ではない)のヘッダーを送信します。
  3. 5秒が経過します。キャッシュサーバーは要求を完了するのに時間がかかりすぎたため、要求をバックエンドに渡します。
  4. キャッシュサーバーは、要求が悪いことを示すエラーメッセージとともにクライアントに応答します。
  5. クライアントは応答を受信して​​から数秒後にPOST本体を送信します。

私は、キャッシュサーバーが待ち時間を長くするように再構成できることを認めても問題ありません。私の問題は、送信されたヘッダーとPOST本体を送信する間にクライアントが数秒間待機する理由は何ですか?私はこの行動が意味を成す場合は何も知らない。

これはかなり普通のMagento eCommerceウェブサイトで、Haproxy - > Varnish - > Nginx - > php5-fpmの設定です。 Varnishは、アイドリングが5秒経過したときにNginxにリクエストを送信するコンポーネントです。

  • 私はtcpdump/wiresharkを使って、サーバがクライアントからPOSTボディをHaproxyの前に受信しないことを確認しました。
  • 私は、これは

は、誰もが任意の巧妙なアイデアを持っています(AJAXコールバックに、通常のログインフォームをされている)ユーザー・エージェント間で発生し、要求の種類を越えていることが確認されていますか?

注:これがStack OverflowまたはServerfaultの質問であるかどうかはわかりませんでしたが、これは開発者の知識が必要なHTTPの質問と考えられます。

答えて

2

サーバーがバグです。フロントエンドからバックエンドに部分的な要求を送信すべきではありません。 POST本体を送信する前に、クライアントがサーバーのHTTP/100 Continue応答を待っている可能性があります。クライアントがPOSTデータを生成している可能性もありますが、何らかの理由で時間がかかります。

+0

これはバグではなく、設定されたしきい値です。また、クライアントは「Expect:100-continue」を送信しませんでした。私はまた、これが通常のログインフォーム(POSTデータを即時に提供する必要がある)で発生することを確認しました。 – Kvisle

+0

私の現在の最良の仮説は、クライアントがackを待っていて、それがファイアウォールによって食べられているということです。 – Kvisle

関連する問題