dポイントプレゼントキャンペーン実施中!

クライアントからサーバーの生存チェックをするためにXMLHttpRequestを使用してファイルを取得してみましたが、1回目は正常にファイルを取得できましたが、2度目以降はLANケーブルを抜いたにもかかわらず、正常に取得できてしまいます。たぶん、IEのキャッシュにたまった内容を取得するのだと思います。これでは、生存チェックの意味がありません。サーバーが生きているか死んでいるかを定期的にチェックしたいのですが、どうすれば良いでしょうか?ブラウザはIE6を使用しています。サーバーは2台あり、2台の生存チェックが必要です。クライアントコールバックも考えてみましたが、サーバー1台ならできるのですが、2台になるとURLをどの様に指定するのかがわかりませんでした。よろしくお願いします。

A 回答 (3件)

毎回URLを変えればというのは、



1回目
xmlhttp.open("GET","URL1?date=1",true);
2回目
xmlhttp.open("GET","URL1?date=2",true);
3回目
xmlhttp.open("GET","URL1?date=3",true);



ということで、同じアドレスは二度と利用しないようにするということです。
このようにすれば、キャッシュに残っているわけはありませんから。
サーバー側はクエリストリングを無視してかまわないですし。
欲を言えばクエリストリングには日時を入れたほうが安全ポイです。

サーバ側の状況がわかるともう少し具体的に説明できるのですが。。。

この回答への補足

ありがとうございました。できました。ほんと助かりました。
XMLHttpRequest関連の関数を使用するのが始めてでしたので、さっぱりわかりませんでした。「サーバ側の状況がわかるともう少し具体的に説明できるのですが」ということですが、どういったことを説明すればよろしいでしょうか?もっと理解を深めたいと思いますので、この関連の関数を説明している、ホームページなどご教授くだされば幸いです。
ほんとにありがとうございました。

補足日時:2006/12/01 11:03
    • good
    • 0

> サーバーの生存チェックをするためにXMLHttpRequestを使用してファイルを取得



 Webサービス(デーモン)が動いているか確認するのに、通常はファイルを取得する
必要はありません。
 GETリクエストではなく、HEADリクエストで次のようにします。

 oXMLHttp.open("HEAD", sURL, false or true);

ファイルを取得(ダウンロード)しないので、高速であり、サーバー、クライアント
にとっても負荷が少ないのが利点です。また、ブラウザのキャッシュを気にする必要
はありません。

 HEADリクエストについては次のページを参照してください。
 http://www.studyinghttp.net/method#HEAD


 また、サーバーの生存確認ではなく、ファイルの中身を取得する必要があるケースに
おいて、ブラウザのキャッシュを無視し、毎回ファイルを取得するには次のようにします。

 oXMLHttp.open("GET", sURL, false or true);
 oXMLHttp.setRequestHeader("If-Modified-Since", "Sat, 29 Oct 1994 19:43:31 GMT");

 XMLHttpRequest キャッシュ - Google 検索
 http://www.google.co.jp/search?q=XMLHttpRequest+ …


■参考情報

- Studying HTTP >> HTTPについて理解するのにとても役立ちます。
 http://www.studyinghttp.net/
- ieHTTPHeaders >> HTTPのリクエスト、レスポンスヘッダを表示するIE用ツール
 http://www.blunck.se/iehttpheaders/iehttpheaders …

- IXMLHTTPRequest Members
 http://msdn.microsoft.com/library/en-us/xmlsdk/h …
- XMLHttpRequest Object IE7
 http://msdn.microsoft.com/workshop/author/dhtml/ …
    • good
    • 0

キャッシュが働かないように毎回URL変えればいいのでは?



test.cgi?date=20061129115412

のように。。。だめかな?

この回答への補足

xmlhttp.open("GET","URL1",true);
xmlhttp.send(null);
を実行してから、ちょっと時間を置いて
xmlhttp.open("GET","URL2",true);
xmlhttp.send(null);
を実行しています。このようにURL1,URL2を交互に実行してもキャッシュされているデータが返ってきます。URL1もURL2も最初の1回だけは通信を行っていますが、2回目以降は通信を行わないで、キャッシュのデータが返ってきてしまいます。

補足日時:2006/11/30 19:39
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!