私が持っている質問は、おそらくブラウザー関連の質問だと思いますが、Web アプリケーションの構築に挑戦するときに答えを見つけたいと思う非常に基本的な質問です。
私のクライアント側のコードでは、$.ajax
呼び出しを行っています。この投稿への返信には時間がかかる場合があります。私が見ているのは、一定の時間が経過した後、リクエストが再度送信されていることです。
私は$.ajax
それをもう一度送信する私の呼び出しだと思っていましたが、サーバーで POST 要求を何度見ても、beforeSend
コールバックが呼び出されたのは 1 回しか表示されません。私のコードが複数回送信していないと確信しているので、ブラウザが再試行していると思いますか?
Wireshark を実行したときにサーバーがリクエストを複数回受け取っていることはわかっており、投稿リクエストを複数回確認できます。だから私の仮定は、これはHTTPと関係があるのでしょうか? つまり、応答が一定時間内に受信されない場合、要求は再送信されますか?
以下は私の呼び出しのサンプルです。
$.ajax({
async: false,
type: 'POST',
url: '<%= url_for('importDevice') %>',
data: { device: val },
retryLimit: 0,
//callback
success: function(data) {
alert('calling import');
if ( data == 'nomaster')
{
// Display a warning toast, with a title
toastr.warning('You must set the Master Key first!', 'Warning');
$.ismasterset = false;
//reset the form contents after added
} else
{
$("div#content").html(data);
}
},
beforeSend: function(){
alert('in before send');
}
});
これはすべての関連コードです。「retryLimit」は使用されていません。コードから削除していないだけで、挿入する前に問題がありました。
クライアントとサーバーからの出力で編集。
OK、「Firefox 用のライブ HTTP ヘッダー」をインストールしました。
「ジェネレーター」タブに、単一の呼び出しが表示されます
'#request# POST http://testhost/importdevice'
「ヘッダー」セクションに が表示されませんPOST
が、応答がないためでしょうか?
私のWebサーバーでは、約22秒離れた2つの呼び出しが表示されます。
[Sun Jan 13 03:08:45 2013] [debug] POST /importdevice (Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20100101 Firefox/17.0).
[Sun Jan 13 03:09:07 2013] [debug] POST /importdevice (Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20100101 Firefox/17.0).
これらの同じ呼び出しもwiresharkで見ることができます...
これが、TCP ハンドシェイクと再送信と同様の方法で、応答が返されない場合に要求を再送信しようとするのが通常の動作であるかどうかを尋ねていた理由ですSYN
。
新しいアップデート
私のAjax呼び出しとは何の関係もないようです。単純な HREF でボタンを作成するとします。
すなわち
<a href="/importdevice?device=serverA" class="btn btn-success">TestDirect</a>
次に、「Live HTTP headers」出力で... 1 つのインスタンスのみを取得します。
#request# GET http://172.16.118.15/importdevice?device=serverA
しかし、サーバーログでもう一度取得します。
[Sun Jan 13 03:20:25 2013] [debug] GET /importdevice (Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20100101 Firefox/17.0).
[Sun Jan 13 03:20:48 2013] [debug] GET /importdevice (Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20100101 Firefox/17.0).
そして、サーバー上のwiresharkでも2回表示されます...そして、予想どおり、サーバーコードも2回呼び出されます...これは本当に混乱します。