200 вместо 304 в ответе

Простая проблема:

onResponseReceive getStatusCode возвращает 200 вместо 304. Fiddler сообщает мне, что код ответа - 304.

Что мне делать: я постоянно опрашиваю сервер на наличие новых данных (каждые 10 секунд). Если данные не изменились, они отвечают с 304, иначе с 200 и целыми данными. В методе onResponseReceived код состояния всегда равен 200, а данные всегда присутствуют.

Любые подсказки, как получить 304. Я читал кое-что о If-Modified-Since, что вызвало бы повторную отправку данных (с кодом 200), но я на самом деле хочу 304. Я также не хочу, чтобы данные были сопоставлены стороны, чтобы увидеть, если это изменилось.

Код GWT:

RequestBuilder requestBuilder = new RequestBuilder(RequestBuilder.GET,
                dataUrl);

        requestBuilder.setHeader("_____", "none");
        requestBuilder.setHeader("_______", "_________");
        requestBuilder.setCallback(new RequestCallback() {

            @Override
            public void onResponseReceived(Request request, Response response) {
                PrintResponse.printResponse(response, "EntryPoints");
            if (response.getStatusCode() == 200) {.....}  

            }

            @Override
            public void onError(Request request, Throwable exception) {

            }
        });

        try {
            requestBuilder.send();
        } catch (RequestException e) {
            e.printStackTrace();
        }

Отклик:

HTTP/1.1 304
Content-Type: application/json
Cache-Control: max-age=0
Content-Length: 0
Date: Thu, 19 Apr 2012 10:49:10 GMT
Server: ________
Connection: Keep-Alive
Keep-Alive: timeout=60

С наилучшими пожеланиями, Стефан

1 ответ

На самом деле это ошибка в Chrome , а не в GWT. Вы получаете HTTP 304, как говорит Fiddler, но Chrome по какой-то причине отображает его как HTTP 200. Я видел это годами .

Чтобы убедиться в этом, попробуйте открыть вкладку «Сеть» в Chrome Dev Tools, определить сетевой запрос и щелкнуть правой кнопкой мыши «Копировать как curl (bash)». Затем вставьте команду в терминал, добавьте -v(для информации заголовка) и запустите его. Затем вы увидите, что получили HTTP 304. Теперь вы сделали именно то, что сделал Chrome, включая все заголовки запросов.

Другие вопросы по тегам