2016-07-01 2 views
1

Я озадачен тем фактом, что я запрашиваю видеофайл из нашего ведра S3 с максимальным возрастом до 1 года. Я иногда получаю 304, но гораздо чаще за ними следуют несколько 200 ответов. Я пытаюсь сделать это правильно в IE11.IE кэширование поведения: ответ 304, а затем 200 на одном ресурсе?

enter image description here

Вот запрос и ответ 304:

enter image description here

enter image description here

Я также взял снимки этих запросов (в другой момент) с Чарльзом прокси:

enter image description here

enter image description here

А вот запрос и ответ на 200:

enter image description here

enter image description here

А вот запрос и ответ, как видно из Чарльз прокси:

enter image description here

enter image description here

Запросы вызваны элементом DOM, который сначала быть добавлены (что, как представляется, 304), а затем воспроизведение периодически снова начал с самого начала в JavaScript (те, кажется, 200-х).

Итак, вопрос в том, что я, возможно, пропустил в настройках или что-то, что предотвращает кеширование таких ресурсов?

Спасибо.

P.S.

  1. Просто чтобы быть ясно: «Всегда обновлять с сервера» выключен
  2. Я также вижу, что 200 ответов не как Google, «200 (из кэша)», так как общий объем загрузки продолжает увеличиваться с каждым видео нагрузки.
+0

Интересный вопрос здесь. Прежде всего, давайте решим, где именно проблема. От взгляда на заголовок браузер отправляет все правильные заголовки, и проблема находится на самом сервере. Сервер здесь видит новый файл в случае 200 OK, поэтому изменение размера файла и обслуживание нового файла с использованием 200 OK - это ожидаемое поведение. но здесь странно, почему сервер отправляет новый файл с тем же старым etag !!!. Я думаю, что веб-интерфейс, который вы используете, скрывает некоторые заголовки, я бы предложил повторить тест при запуске Charles proxy или wirehark, чтобы увидеть, есть ли какая-либо разница. – Hani

+0

@ Хани спасибо, что посмотрели на это со мной. Я добавил новые снимки заголовков, сделанные с помощью прокси-сервера Charles, но я не вижу никакой разницы. Единственное, что я вижу с ответом 304, заключается в том, что запрос выполняется с заголовком «If-Modified-Since» и «If-None-Match». Я предполагаю, что они позволяют серверу возвращать 304, но тогда возникает вопрос, почему IE не отправляет эти заголовки при воспроизведении видео. Кстати, сервер Amazon S3. Какие-нибудь дальнейшие идеи? –

+0

моментальный снимок прокси-сервера charles, когда мы получаем 200 OK, не имеет заголовков «If-Modified-Since» и «If-None-Match». это означает, что клиент здесь не хочет получать кешированную версию и получать 200 OK в этом случае - это нормально. Но что заставляет меня задаться вопросом, почему в вашем первом снимке без charles прокси те те заголовки, где присутствуют по запросу, который получил 200OK. теперь, если мы сможем подтвердить, что мы получаем только 200 OK для первого запроса и любой последующий запрос без измененного заголовка, мы можем по крайней мере заключить, что проблема здесь на стороне клиента, и в этом случае нам понадобится ваш js-код, который перезагрузит ресурс. – Hani

ответ

0

Я, наконец, нашел причину этого странного поведения кэширования. Для одного это происходило только в Internet Explorer (только я тестировал только версию 11). Прежде чем я объясню, немного фона ...

Наше основное приложение работает на основном домене, назовем его www.foo.com. Запросы Ajax выполняются для разных экземпляров приложений на ajax.foo.com. У нас есть реселлеры нашей службы, которые управляют основным доменом под своим собственным доменным именем, например. www.bar.com. Они по-прежнему используют обычный домен Ajax ajax.foo.com (не уверен, что это связано, но я думал, что это стоит упомянуть).

Я обнаружил, что при запуске приложения из основного домена www.foo.bar все видео, поступающие из S3, кэшируются правильно.Но как только мы запускаем основное приложение из домена реселлера, кеширования больше не происходит. Смотрите скриншоты ниже.

Я все еще совершенно озадачен зависимостью кэширования активов S3 от имени основного домена. Мы не нашли для этого никакой основной причины. Поэтому мы решили использовать обходной путь, который работает для нас: реселлер запускает приложение, просто открывая веб-страницу, содержащую iframe, которая запускает фактическое приложение в обычном основном домене www.foo.com, на котором работает кеширование. Это решает нашу проблему, хотя у меня остался плохой вкус, который мы не нашли и не решили фактическую причину.

поведение Кэширования на домене реселлера

Примечание всех дополнительные запросы с ответом 200 и дополнительным загруженным объемом.

enter image description here

поведение Кэширование на основной домен

Обратите внимание на отсутствие каких-либо дополнительных запросов ресурсов с течением времени

enter image description here

+0

в настройках вашего браузера IE вы можете настроить источники доступа к данным в доменах для включения и посмотреть, не влияет ли это на кеширование? – Hani

+0

Я включил эту настройку в положение «включено», но она по-прежнему демонстрирует то же поведение, что, похоже, не кэширует эти файлы с S3. :(Спасибо за это предложение. Хотелось бы все же найти первопричину ... –