2016-07-29 7 views
0

У меня есть API для управления кешем. Сервер установит заголовок ответа «последний-измененный», а следующий запрос от браузера будет иметь заголовок If-modified-Since.ajax 304 не изменен не может получить ответ

Однако, когда я использую ajax для запроса API, он не будет автоматически устанавливать заголовок If-modified-Since. И я установил If-modified-Since в заголовке запроса ajax, код состояния сервера 304. Но тело ответа пусто.

Нужно ли ajax вручную выполнять поведение браузера по управлению кешем?

Есть ли лучшее решение?

Я нашел аналогичный вопрос here.

ответ

0

Наконец, разрешенное после Учусь this.

Настройка заголовка запроса на

'Cache-Control': 'max-age=0' 

Если ответ предоставить Last-Modified заголовок, следующий запрос будет автоматически установлен If-Modified-Since и значение равно.

Когда возникает ответ 304, содержимое ответа находится в кеше браузера.

0

Тело ответа должно быть пустым для ответа 304, так оно и должно работать. The protocol состояния:

304 ответ НЕ ДОЛЖЕН содержать тела сообщения, и, таким образом, всегда завершается первой пустой строкой после полей заголовка.

Итак, если вы отправляете запрос с If-modified-since, и это условие не выполняется, вы не получите тело ответа (фактические данные). Вы в основном заявляете, что у вас есть контент, и вы хотите его, только если он обновлен.

Постарайтесь не использовать заголовок If-Modified-Since и вместо того, чтобы использовать Cache-control заголовок:

$.ajax({ 
... 
headers: { 
    'Cache-Control': 'max-age=1000' 
} 
... 
}); 
+0

Я должен использовать заголовок If-Modified-Since для проверки данных, которые были изменены или нет. И, кстати, где отличается Cache-Control от запроса и ответа? – Jim