Разрешить HTTP 304 - не изменяется в вызове AJAX, выполненном через GWT - PullRequest
0 голосов
/ 19 марта 2010

Мы используем приложение, созданное в 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 Ответ

1 голос
/ 18 апреля 2010

HTTP 304 означает, что сервер ожидает, что клиент будет использовать кэшированную копию страницы. Спецификация HTTP указывает, что тело ответа должно быть пустым в случае ответа 304 (см. , см. RFC 2616, раздел 10.3.5 ). Вы получаете ошибку 304, потому что сервер портит или потому что он действительно ожидает, что ответ будет кэширован клиентом? Возможно, попробуйте , установив Cache-Control: no-cache в заголовках .

Если 304 статуса связаны с ошибкой сервера, и вы не можете остановить их, у вас есть пара вариантов:

  1. На самом деле кэшируйте ответы в вашем приложении, чтобы при получении 304 вы могли использовать кэшированный ответ
  2. Захватите 304 ответа и повторите RPC (возможно, рекурсивно, указав retryTimesLeft в качестве параметра функции)
  3. Укажите, что 304 на самом деле являются сбоями, и вызовите некоторую функцию обработки ошибок, чтобы справиться с нехваткой данных

То, что вы выбираете, очевидно, зависит от потребностей вашего приложения.

...