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, включая все заголовки запросов.