- ベストアンサー
XMLHttpRequestを繰り返すと・・・
クライアントからサーバーの生存チェックをするためにXMLHttpRequestを使用してファイルを取得してみましたが、1回目は正常にファイルを取得できましたが、2度目以降はLANケーブルを抜いたにもかかわらず、正常に取得できてしまいます。たぶん、IEのキャッシュにたまった内容を取得するのだと思います。これでは、生存チェックの意味がありません。サーバーが生きているか死んでいるかを定期的にチェックしたいのですが、どうすれば良いでしょうか?ブラウザはIE6を使用しています。サーバーは2台あり、2台の生存チェックが必要です。クライアントコールバックも考えてみましたが、サーバー1台ならできるのですが、2台になるとURLをどの様に指定するのかがわかりませんでした。よろしくお願いします。
- みんなの回答 (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); ・ ・ ・ ということで、同じアドレスは二度と利用しないようにするということです。 このようにすれば、キャッシュに残っているわけはありませんから。 サーバー側はクエリストリングを無視してかまわないですし。 欲を言えばクエリストリングには日時を入れたほうが安全ポイです。 サーバ側の状況がわかるともう少し具体的に説明できるのですが。。。
その他の回答 (2)
- bot
- ベストアンサー率0% (0/2)
> サーバーの生存チェックをするために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+%E3%82%AD%E3%83%A3%E3%83%83%E3%82%B7%E3%83%A5 ■参考情報 - Studying HTTP >> HTTPについて理解するのにとても役立ちます。 http://www.studyinghttp.net/ - ieHTTPHeaders >> HTTPのリクエスト、レスポンスヘッダを表示するIE用ツール http://www.blunck.se/iehttpheaders/iehttpheaders.html - IXMLHTTPRequest Members http://msdn.microsoft.com/library/en-us/xmlsdk/html/7924f6be-c035-411f-acd2-79de7a711b38.asp - XMLHttpRequest Object IE7 http://msdn.microsoft.com/workshop/author/dhtml/reference/objects/obj_xmlhttprequest.asp
- snow765
- ベストアンサー率26% (8/30)
キャッシュが働かないように毎回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回目以降は通信を行わないで、キャッシュのデータが返ってきてしまいます。
補足
ありがとうございました。できました。ほんと助かりました。 XMLHttpRequest関連の関数を使用するのが始めてでしたので、さっぱりわかりませんでした。「サーバ側の状況がわかるともう少し具体的に説明できるのですが」ということですが、どういったことを説明すればよろしいでしょうか?もっと理解を深めたいと思いますので、この関連の関数を説明している、ホームページなどご教授くだされば幸いです。 ほんとにありがとうございました。