2013-07-08 8 views
1

Я работаю над новым API. При включенном ETags Chrome всегда условно дает ресурс с длительным сроком службы кеша, то есть Chrome больше не использует кешированную версию без предварительного подтверждения ETag.Клиент с ETag всегда выполняет условный GET

Это как ETags предполагается работать с GET?

Если это так, и если учесть, что я не нуждаюсь в них для проверки проверки обновлений, я удалю ETags и уменьшу дополнительную работу, выполняемую моим сервером.

Редактировать

я ожидал бы Chrome использовать кэшированные пункт в зависимости от максимального возраста до тех пор, пока не истечет, а затем использовать условный GET, чтобы обновить кэшированные-элемент.

Поскольку я пишу это, мне теперь пришло в голову, что он не сможет «обновить свой кеш-элемент», поскольку 304 не содержит максимального возраста для продления срока действия.

Таким образом, я думаю, что с включенным ETags клиент всегда будет условно GET, если нет веской причины использовать кешированную версию, например, сеть.

Таким образом, кажется, что ETags вредит производительности сервера, если не требуется управление параллелизмом.

Редактировать

Я думаю, что я уже угадал ответ (выше), но вот вопрос в двух словах:

Когда ETags включена, и Max-Age далеко в будущем, должны ли пользовательские агенты всегда использовать условный GET вместо использования ранее кэшированного, нового ответа?

+0

Вы могли бы привести пример? –

+0

Хмм, я не уверен, что смогу. Это скорее поток, который случается, чем проблема, которая может быть проиллюстрирована в коде. –

ответ

0

С включенным ETags, Chrome всегда условно ПОЛУЧИТ ресурс с длительным сроком службы кэша, [...] Является ли это тем, что ETags должны работать с GET?

Ответ в RFC:

10.3.5 304 Not Modified

Если клиент выполнил условный запрос GET, и доступ разрешен, но документ не был изменен, то сервер должен ответьте на этот код состояния.

Итак, да.

Если это не тот ответ, который вы ожидаете, вы можете включить в свой вопрос какой-то фактический трафик, который показывает порядок пар запроса-ответа, который вы ожидаете и который вы действительно получите.

учитывая, что я не нуждаюсь в них для обновления гонки проверки

Если вы не собираетесь использовать условные запросы (If-Match и подобные), вы можете действительно пропустить расчет ETag и обработка.

+0

«Если клиент выполнил условное ПОЛУЧЕНИЕ» - меня удивляет то, что клиент (Chrome) всегда условно GET, а не просто, когда ему нужно обновить устаревшую копию кэша. –

+0

См. Например [this] (http://stackoverflow.com/questions/824152/what-takes-precedence-the-etag-or-last-modified-http-header) вопрос, хотя мне все еще не ясно, что вы хотите спросить. Является ли он по строкам _ «Если HTTP-клиент отправляет запрос GET для кэшированной системы с будущим заголовком Expires, если ETag также был возвращен для объекта« _? »? – CodeCaster

+0

Это не то же самое, что касается ETag vs. Last-Modified not Expires. –

1

Как загрузить страницу в браузере может быть уместным здесь:

  • Если нажать Ctrl и перезагрузите страницу с помощью кнопки обновления, что приведет к безусловной перезагрузке ваших ресурсов с 200s вернулся.
  • Если вы просто перезагрузитесь с помощью кнопки обновления (или эквивалентного ключа, такого как F5), будут отправлены условные запросы и 304s будут возвращены для статических ресурсов.
  • Если вы нажмете enter в поле адреса, добавьте страницу в закладки и загрузите туда или посетите страницу из гиперссылки, максимальный возраст кеша должен работать должным образом.
+0

Интересные наблюдения. Благодарю. –

Смежные вопросы