Почему мой CDN кеширует определенный документ, а браузеры - нет? - PullRequest
0 голосов
/ 29 сентября 2018

У меня есть URL с тестовым PDF, это мое происхождение: https://powered -by.qbank.se / miso / MISO_Testing_Document279626.pdf

У меня есть этот источникнастроить в Azure CDN с помощью поставщика Microsoft.URL-адрес: https://misocdn -fail.azureedge.net / MISO_Testing_Document279626.pdf

Когда я обновляю PDF на исходном сайте, все протестированные мной браузеры возвращаютНОВЫЙ документ с обновлением F5, даже не Ctrl-F5.Но CDN продолжает кешировать PDF в основном неопределенно (2 дня в соответствии с документами или до тех пор, пока я не произвожу чистку)

Мой вопрос: почему мой CDN не может обнаружить изменение в источнике, а браузер?

Я понимаю, что CDN кешируется, но я не понимаю, что делает браузер, чтобы выяснить, является ли этот контент новым?

1 Ответ

0 голосов
/ 01 октября 2018

Чтобы лучше понять это явление, следует начать с изучения заголовков ответов, полученных из URL-адреса прямого доступа.Один из способов сделать это - использовать curl -I <YOUR_URL> в своем терминале.

Вы увидите что-то вроде:

HTTP/1.1 200 OK
Date: Mon, 01 Oct 2018 09:03:57 GMT
Server: Apache
Last-Modified: Fri, 28 Sep 2018 19:11:57 GMT
ETag: "11ff1-576f33ab4c2a0"
Accept-Ranges: bytes
Content-Length: 73713
Cache-Control: max-age=86400
Expires: Tue, 02 Oct 2018 09:03:57 GMT
Content-Type: application/pdf

Из этих заголовков браузер используетCache-Control, ETag и Last-Modified для определения свежести запрошенного контента.Cache-Control: max-age=<seconds> - это максимальное количество времени (относительно времени запроса), когда ресурс будет считаться свежим.

Теперь, согласно Mozilla Developer Network - MDN– Свежесть описывается следующим образом:

Как только ресурс сохранен в кеше, он теоретически может обслуживаться кешем вечно.Кэши имеют ограниченное хранилище, поэтому элементы периодически удаляются из хранилища.Этот процесс называется вытеснение кеша .С другой стороны, некоторые ресурсы могут измениться на сервере, поэтому кэш должен быть обновлен.Поскольку HTTP является протоколом клиент-сервер, серверы не могут связываться с кешами и клиентами при изменении ресурса;они должны сообщить время истечения для ресурса .До истечения этого срока ресурс равен fresh ;после истечения срока действия ресурс устарел.Алгоритмы выселения часто отдают предпочтение свежим ресурсам, а не устаревшим.Обратите внимание, что устаревший ресурс не выселяется и не игнорируется;когда кэш получает запрос на устаревший ресурс, он отправляет этот запрос с If-None-Match , чтобы проверить, действительно ли он еще свеж.Если это так, сервер возвращает заголовок 304 (не изменен) без отправки тела запрошенного ресурса, сохраняя некоторую пропускную способность.

Таким образом, для проверки кэшированного ресурса, *Заголовок 1035 * будет выдан браузером, если заголовок ETag был частью ответа для ресурса.

Это механизм, который заставляет ваш браузер загружать новую версию вашегоPDF при прямом доступе.Также обратите внимание, что эти заголовки также присутствуют в запросе от URL CDN, но пограничные серверы CDN по-прежнему хранят ваш старый файл.

Когда дело доходит до кэша CDN, ETag иLast-Modified заголовки не соблюдаются.Только заголовок Cache-Control в ответе HTTP от исходного сервера определяет период времени жизни (TTL) ресурса.В вашем случае это 86400 секунд.Теоретически, новая версия вашего pdf будет обслуживаться через 1 день после первого запроса по ссылке CDN.До этого момента старый pdf будет размещаться на пограничных серверах CDN.Подробнее об управлении истечением Azure CDN можно прочитать в документации по Azure CDN.

...