0

我们正在使用在 GWT 中制作的应用程序,服务器为 tomcat。该项目运行正常,但是存在重新启动服务器的情况。此时,下面代码的ajax调用返回空白文本,状态码为304

RequestBuilder requestBuilder = new RequestBuilder(RequestBuilder.POST, URL.encode(serverUrl)); //-- serverUrl is the url to which this call is posted to.
requestBuilder.setHeader("Content-Type", "application/x-www-form-urlencoded");
requestBuilder.setHeader("Expires","0");
requestBuilder.sendRequest(
    postData, 
    new RequestCallback()
    {

        public void onError(Request request, Throwable exception)
        {
            //Do nothing
        }

        public void onResponseReceived(Request request, Response response)
        {
            //sometimes when the server is restarted, I get response.getStatusCode() = 304 and the response.getText() as blank
        }
    }
);

通常我们会在这个响应文本中从服务器取回一些数据。当响应本身为空白时,我们现在如何获取数据?

4

1 回答 1

1

HTTP 304 意味着服务器希望客户端使用页面的缓存副本。HTTP 规范表明响应正文应该是空的,如果是 304 响应(请参阅 RFC 2616 第 10.3.5 节)。您收到 304 错误是因为服务器出现问题还是因为它真的希望客户端缓存响应?也许尝试在你的 headers 中设置Cache-Control: no-cache

如果 304 状态与服务器故障有关,并且您无法让它们停止,您有几个选择:

  1. 实际上在您的应用程序中缓存响应,以便当您收到 304 时,您可以使用缓存的响应
  2. 捕获 304 响应并重试 RPC(可能递归地指定 aretryTimesLeft作为函数的参数)
  3. 表示304实际上是故障,调用一些错误处理函数来处理数据缺失

您选择哪个显然取决于您的应用程序的需求。

于 2010-04-18T06:33:32.773 回答