Firefox иногда не может загрузить/отобразить ранее закэшированные изображения (аватары)

Мы расследуем то, что, по-видимому, является ошибкой Firefox, связанной с кэшированием аватаров на диске и их последующим извлечением при следующем запросе.

Сообщено в Firefox по адресу:

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

Это, соответственно:

<img loading="lazy" alt="" width="24" height="24" src="https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/mancera1979/48/732001_2.png" class="avatar" title="mancera1979 - Frequent Poster">
<img loading="lazy" alt="" width="24" height="24" src="https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/jca34f/48/340148_2.png" class="avatar" title="JCA34F - Frequent Poster">

а эти URL-адреса перенаправляют, соответственно, на:

https://europe1.discourse-cdn.com/arduino/optimized/4X/3/3/7/337a5e4169461364c9805cfad882c9eb0332bdf3_2_48x48.png
https://europe1.discourse-cdn.com/arduino/optimized/4X/4/b/8/4b8c803f304aa7e7c487184224ec9f970c96e8c4_2_48x48.jpeg

При проверке DOM с помощью инструментов разработчика Firefox сообщает: «Не удалось загрузить изображение».

Это никогда не происходит при первоначальных запросах — это всегда случается только при последующих запросах, когда изображение должно загружаться из кэша:

Перезагрузка страницы иногда заставляет Firefox корректно загрузить изображение, например:

после перезагрузки:


Мы знаем следующее:

… проблема не специфична для самого приложения Discourse. Мы воспроизвели её на статической HTML-странице, содержащей только ссылки на аватары:

… отключение HTTP/3 в Firefox не решает проблему

… очистка кэша браузера приводит к корректной загрузке изображений при следующем обращении

… пользователи сообщали об этой проблеме как на настольных компьютерах, так и на мобильных устройствах

Мы предполагаем, что:

… проблема связана с загрузкой изображения после перенаправления

В некоторых наших хостинг-средах установлен «охотник за перенаправлениями» (redirect chaser), который заставляет запрос к исходному URL возвращать само изображение вместо перенаправления на него. Я не думаю, что кто-либо сталкивался с этой проблемой в таких средах.

У нас нет:

последовательного и чёткого воспроизведения проблемы от начала до конца

Я сам сталкивался с этим в Firefox. Не знаю, имеет ли это какое-то отношение к делу, но мой сайт использует bunny.net в качестве CDN.

Интересно. Хорошо, если у вас есть дополнительные детали или шаги для воспроизведения, не стесняйтесь публиковать их здесь.


:face_with_raised_eyebrow:
:microscope:

Что ж, это ЧРЕЗВЫЧАЙНО уместно :laughing:

Для меня это выглядит как наша следующая точка приложения усилий, @david — настройка сайта, которая отключает это, чтобы проверить, есть ли какой-либо эффект.

Поскольку у @supermathie есть нечёткий репродуцируемый пример на статической странице, может быть, попробуем создать её версию без атрибута loading="lazy"? Это гораздо проще, чем модифицировать Discourse для этого.

Мог бы ты попробовать это, @supermathie?

Я бы не использовал никакой другой CDN! :rabbit2:

Я периодически перезагружал их, и только что воспроизвёл проблему: загрузил страницу с ленивой подгрузкой (сработало), а затем страницу без ленивой подгрузки (не сработало):

К сожалению, Firefox, похоже, полностью перезагружал ресурсы при обновлении (параметр «Отключить кэш» не установлен) с открытыми инструментами разработчика, но… это странно:

Кажется, пользователь изменил/обновил свой аватар, и мы перенаправили на новый? Не уверен, что вызывает это, @david.

Скажу наугад: это дополнительное перенаправление на мгновение вызвало ошибку Firefox. Это согласуется с различием в поведении из-за трассировщика перенаправлений.

Может, мне удастся это воспроизвести?

Я изменил свой аватар, посмотрим, сломается ли что-то, когда я перезагружу страницу через час.

РЕДАКТИРОВАНИЕ: эх, на этот раз не сломалось.

Но мои манипуляции на этой странице, похоже, плохо влияют на другие страницы… НИ ОДИН из этих аватаров сейчас не работает, и я думаю, что это потому, что сетевой запрос «завис».

Сегодня: я перезагрузил страницу с lazy, и она загрузилась корректно:

Затем я загрузил страницу без lazy, и:

:person_shrugging:

Так что, я полагаю, это означает, что lazy= вряд ли является причиной проблемы? По крайней мере, один пункт исключён :sweat_smile: