Отправка заголовка If-None-Match при использовании ETag - Python

Узнай цену своей работы

Формулировка задачи:

Изучаю браузерное кеширование, и кувыркаюсь неимоверно. Из учебника код на PHP:
Пытаюсь повторить его на Python. Для начала упростим его. Наша задача просто насадить ETag, и чтобы при повторном обращении к этой странице, на сервер летел заголовок If-None-Match. Ниже вьюха на Django. В комментарии у нас - точка останова обозначена.
Урлы сделал вот такие: urlpatterns = [ url(r'^home', home), url(r'^home/', home) ] На всякий случай - чтобы переадресации какой не было со слешами. Откроем Chrome и очистим кеш полностью (с самого начала). chrome://cache/ Все чисто - ни одной записи. Откроем инструменты разработчика. Запустим отладочный сервер Django. Идем на localhost:8000/home Задушились на точке останова. И поехали дальше. В кеше появилось http://localhost:8000/home Request:
Response:
Снова в Chrome ставим курсор на адресную строку браузера, нажимаем Enter. Задушились на точке останова. Идем дальше. Request:
Response:
Теперь попробуем перейти на сторонний сайт. Скажем, lenta.ru. И вернемся кнопкой на наш сайт. Request:
Response:
На точке останова не было остановки. Т.е. Chrome не отправлял запрос на сервер - взял из кеша. И показывает мне provisional. Теперь проделаем то же самое в Firefox. Чистка кеша. Request:
Response:
Опять ставим курсор в адресную строку, Enter. Задушились на точке останова. Резьюм. Request:
Response:
Ага - появился If-None-Match. Перейдем на lenta.ru. Кнопкой обратно. На точке останова не остановался, т.е. на сервер не стучался. С запросом и ответом вообще какой-то ужас - до сих пор к lenta.ru как бы адресуется. Request:
Response:
Ладно, бог с ним, с этим конкретным запросом. А теперь посмотрим, как же у нас работает код на PHP. Для этого я его запустил с помощью веб-сервера Apache. То же самое - чистим кеш хрома. Подчеркиваю, мы в Chrome. Пишем в адресной строке: localhost Закономерно ждем свои секунды, которые занимает sleep. Видим, что в кеше появился http://localhost/ Request:
Response:
Встаем опять в адресную строку. Нажимаем Enter. Request:
Response:
Я вообще ничего не понимаю. Вроде, тот же самый Etag. Был бы признателен за помощь по двум вопросам: 1. Почему Chrome ни разу не послал на сервер If-None-Match в случае с питонячьей реализацией? 2. Почему код на PHP все же при том же самом Etag посылает на сервер If-None-Match?

Решение задачи: «Отправка заголовка If-None-Match при использовании ETag»

textual
Листинг программы
extra_headers.append(("ETag",etag(filepath)))
extra_headers.append(("Last-Modified",last_modified))
extra_headers.append(("Cache-Control", "max-age=%s, must-revalidate" % MAX_AGE)) # MAX_AGE=0

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.75 из 5
Похожие ответы