2

我正在用java编写一个网络应用程序。在我的 html 文件中,我有一个小 javascript,它每五秒钟向服务器发送一个空请求以保留会话 (HeartBeat)。

我正在使用XMLHttpRequest对象将请求发送到Tomcat服务器。

问题在于IE9,对于第一个请求,我会获得状态200,之后,对于每个请求,我都会得到304答复。在 Firefox 和 Chrome 中它运行良好。

如何在 IE 中继续从我的 Javascript 发送空请求而不收到 304。

我的代码是:

<script>
var HeartBeatTimer; 
function StartHeartBeat(){
   // pulse every 30 seconds
    if (HeartBeatTimer == null)
      HeartBeatTimer = setInterval("HeartBeat()", 1000 * 5);
}

function HeartBeat(){
            var HTTP_Response = new XMLHttpRequest();
    HTTP_Response.open("GET", myurl , true);
    HTTP_Response.send(null);    
}

my servlet that get the request:

protected void doGet(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {

}

这个脚本的目的是让我的会话保持活跃

4

3 回答 3

1

将随机部分添加到 url 或发送POST请求

myurl = myurl + "?_=" + (+new Date());

或者

HTTP_Response.open("POST", myurl, true);

对于POST-version,您还需要调整 servlet 代码。

并且不要使用字符串作为setIntervalor的第一个参数setTimeout。只需传递函数本身。

setInterval(HeartBeat, 1000 * 5);
于 2012-11-19T14:42:51.630 回答
1

使用以下内容:

HTTP_Response.open("GET", myurl + "&rand=" + Date.now(), true)
于 2012-11-19T14:42:54.367 回答
1

您可以通过发送以下 HTTP 标头来禁止缓存:

response.setHeader("Pragma", "no-cache");
response.setDateHeader("Expires", 1L);
response.setHeader("Cache-Control", "no-cache");
response.addHeader("Cache-Control", "no-store");
于 2012-11-19T15:07:11.763 回答