解析HTTP 304 - 在通过GWT进行的AJAX调用中未修改

时间:2010-03-19 08:31:27

标签: ajax web-applications gwt http-status-codes

我们正在使用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
        }
    }
);

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

1 个答案:

答案 0 :(得分:1)

HTTP 304表示服务器希望客户端使用页面的缓存副本。 HTTP规范表明响应体应该为304响应的情况下为空(参见see RFC 2616 section 10.3.5)。您是否收到304错误,因为服务器搞乱了,或者因为它确实希望客户端缓存响应?也许试试setting Cache-Control: no-cache in your headers

如果304状态与服务器搞乱有关,并且您无法让它们停止,那么您有两个选择:

  1. 实际缓存应用中的响应,以便在获得304时可以使用缓存的响应
  2. 捕获304响应并重试RPC(可能是递归的,指定retryTimesLeft作为函数的参数)
  3. 指出304实际上是失败并调用一些错误处理函数来处理缺少数据
  4. 您选择的内容显然取决于您的应用的需求。