2009-06-24 6 views
1

私は、Ajaxを使用してページをリロードせずにいくつかの値を更新するWebページを作成しました。私はPOSTリクエストを送信するためにXMLHttpRequestオブジェクトを使用しています。応答が到着したときに呼び出されるコールバック関数を割り当てています。XMLHttpRequestレスポンスは、適切なブラウザコールバックにどのようにルーティングされますか?

しかし、ブラウザによっては、この特定のコールバック関数にいくつかのip:portからのデータが送信されることがわかっていますか?私は、最悪の場合のシナリオで、FirefoxとIEが同じサーバーからほぼ同じ時間にいくつかのPOSTリクエストを作成し、応答が前のリクエストに到着する前に後続のPOSTリクエストを作成しても、データはどのように入ってくるのでしょうか右のコールバック関数にルーティングされますか?

答えて

0

各HTTP要求は、別々のTCP接続で行われます。ブラウザは、その接続でデータが返ってくるのを待ってから、コールバック関数を呼び出します。

より低いレベルでは、OS上のTCP実装は、それぞれのソケットに異なる「送信元ポート」を使用して各ソケット(つまり接続)に属するパケットを追跡します。ソケットをオープンするためのルックアップテーブルマッピング元ポートがあります。

ブラウザが任意の1つのサーバに対して行う同時接続数は制限されています(通常は2になります)。これは、データを送信して受信するためにページをリロードする古い時代には賢明でしたが、このようなAJAXの啓発の時代には本当に迷惑です。この問題の興味深い議論については、the pageを参照してください。

0

各リクエストにはそれぞれ独自の接続があります。あなたが単一の接続を持っている場合はもちろん、単一の応答を持つことを意味し、この応答はあなたのコールバックにあります。

0

一般的な考え方は、ブラウザが新しい接続を完全に開き、サーバーに要求して応答を待つことです。これはJavaScript APIを介してブラウザによって管理される1つの接続にすべてあります。ブラウザが何かを押し下げたときに接続が切断され、再度取り上げられるため、要求を出したブラウザは要求が完了したときに何をすべきかを知っています。

実際に非同期で行われることは、これらの接続がバックグラウンドで別々に行われることで、応答を待つ間に複数の要求が出て戻ってくることです。これは、後で何かを返すサーバであると思われる素晴らしいAJAXエフェクトを提供します。

関連する問題