Я работаю в настоящее время на REST API. Я хотел проверить, работает ли HTTP-кеш, но, к сожалению, я вообще не работаю. Независимо от того, что я делаю, он всегда возвращает HTTP-код 200, в то время как он должен возвращать 304 из того, что я знаю.Заголовок ETag не возвращается 304
Вот мой PHP код:
public function getList()
{
$this->addHeaders(array(
'Cache-Control' => 'public, must-revalidate, max-age=120',
'eTag' => 'xyz123',
));
$array = array(
'foo' => 'bar',
'nested' => array(
'lorem' => 'ipsum',
'dolor' => 'sit amet'
)
);
$this->addHeader('Content-Length', strlen(json_encode($array, true)));
return new JsonModel($array);
}
ответ/Запрос
ETag не меняется, поэтому запросы, кроме первого должны обслуживаться из кэша. Я ошибаюсь?
Я следовал эти 2 статьи:
- https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching
- https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/http-caching?hl=en
Я также проверил с слабым валидатор - Last-Modified, но у меня такая же проблема. Браузер отправляет правильный заголовок в Запрос, но я все еще получаю 200 в ответ
Как вы настроили обработку eTag? Существует [ответ, который описывает минимальную настройку] (http://stackoverflow.com/a/13197481/199048). –
Если я не ошибаюсь, не несет ответственности за реализацию вашего сервера, чтобы проверить, отличается ли представленный etag от текущего на вашем сервере? В этом случае ваш код должен будет ответить «304». – rmoestl
Я вижу, что вы используете Apache 2.4. Возможно, вы столкнулись с проблемой, описанной здесь: http://stackoverflow.com/questions/896974/apache-is-not-sending-304-response-if-mod-deflate-and-addoutputfilterbytype-is – tcurvelo