В консоли FireBug ответ сервера 304 а в xhr.status всегда 200

Vano

Новичок
Пытаюсь разобраться с кэшированием ответов сервера, да и в общем с HTTP запросами. Для практики пишу чат. Раз в секунду забираю - xhr.open("GET", "/chat.xml", true); . Заметил что Firefox с каждими пару запросов, снижает частоту реального запроса к серверу, тоесть сперва каждый запрос летит на сервер, потом каждый второй берет из кэша, потом три запроса из кэша и т.д.
Вот, решил я пропускать ненужные действия, если ответ 304 - if(xhr.status == 304) return; . Но оно не стало работать. xhr.status всегда возвращает 200, хотя в консоли пишет 304 Not Modified .

Вопрос: почему так получаеться?
и еще: Браузер, когда переходиш на ссылку(как обычный пользователь), использует такой же запрос, как и запрос предоставленный в XMLHttpRequest?
 

флоппик

promotor fidei
Команда форума
Партнер клуба
304 - это ответ _сервера_ Not Modified на запрос. Браузер, который взял страницу из собственного _локального_ кэша без запроса к серверу будет генерировать код 200.
 

Vano

Новичок
спасибо, я это понял.
console.log( xhr.status ); И вот когда получаю ответ, смотрю в консоль, а там -
GET 'url'/chat.xml 304 Not Modified 2ms
200

или

GET 'url'/chat.xml 200 Ok 2ms
200
 

флоппик

promotor fidei
Команда форума
Партнер клуба
http://www.w3.org/TR/XMLHttpRequest/

For 304 Not Modified responses that are a result of a user agent generated conditional request the user agent must act as if the server gave a 200 OK response with the appropriate content. The user agent must allow author request headers to override automatic cache validation (e.g. If-None-Match or If-Modified-Since), in which case 304 Not Modified responses must be passed through
 
  • Like
Реакции: Vano

Vano

Новичок
Понял, спасибо. Получаеться, если браузер запрашивает страницу, а ему сервер говорит "304", то XMLHttpRequest должен вести себя как 200 (соответсвенно xhr.status будет равен 200). Придумано для того, чтобы меньше проверок писать( наверное ). А если вы, все же, хотите получать в status 304, то xhr объект должен быть с заголовком If-Modified-Since, что даст понять браузеру, что вы ЯВНО расчитуете на возможный ответ 304. Всмысле, если вам не важно - главное страничку взять, то не парьтесь - будет вам всегда 200.
 
Сверху