Непрерывный отказ при загрузке изображений - ERR_CONTENT_LENGTH_MISMATCH

Проблема

Мой сайт не может загружать случайные изображения в произвольные моменты времени. Непрерывный отказ загрузки изображения со следующей ошибкой в ​​консоли:

"GET example.com/image.jpg net:: ERR_CONTENT_LENGTH_MISMATCH"

Изображение либо не загружается вообще, и дает значок сломанного изображения с помощью тега alt, либо он загружается на полпути, а остальная часть повреждена (например, цвета, которые были начертаны или половина изображения будет выделена серым цветом).

Настройка

Сервер Litespeed, сайт PHP/mySQL, с HTML, CSS, Javascript и JQuery.

Важные примечания

  • Проблема возникает во всех основных веб-браузерах - с перерывами и с различными изображениями.
  • Я заставляю кодировку UTF-8 и HTTPS на всех страницах через htaccess.
  • Поставщик хостинга утверждает, что все разрешения установлены правильно.
  • В моем журнале доступа, когда изображение не загружается, оно дает ответ "200 OK" для изображения и перечисляет байты, переданные как "0" (ноль).
  • Почти всегда изображения, которые не загружаются, но, возможно, в 5% случаев это будет файл CSS или файл Javascript.
  • Проблема возникла сразу же после перемещения серверов с Apache на Litespeed и была постоянной в течение нескольких недель.
  • Включено Gzip и кеширование.

Ответ 1

Эта ошибка представляет собой определенное несоответствие между данными, которые рекламируются в заголовках HTTP, и данными, передаваемыми по кабелю.

Это может произойти из следующего:

  • Сервер. Если на сервере имеется ошибка с некоторыми модулями, которые изменяют содержимое, но не обновляют длину содержимого в заголовке или просто не работают должным образом.
  • Прокси. Любой прокси-сервер между вами и вашим сервером может изменять запрос и не обновлять заголовок длины содержимого.

Это может произойти и при настройке неправильного типа содержимого.

Насколько я знаю, я не вижу этих проблем в IIS/apache/tomcat, но в основном с помощью специального письменного кода. (Написание изображения непосредственно в потоке ответов)

Это может быть даже вызвано блокировщиком рекламы.

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

Ответ 2

Предложить доступ к изображению в виде дискретного URL-адреса с использованием cURL, например php testCurlimg > image.log 2 > & 1, чтобы точно увидеть, что возвращается сервером. Затем вы можете перейти на уровень, чтобы протестировать веб-страницу php testCurlpg > page.log 2 > & 1, чтобы увидеть контекст для смешанных данных

Ответ 3

Я только что столкнулся с той же ERR_CONTENT_LENGTH_MISMATCH ошибкой ERR_CONTENT_LENGTH_MISMATCH. Я оптимизировал изображение, и это исправило это. Я провел оптимизацию изображений с помощью ImageOptim, но я предполагаю, что любой инструмент оптимизации изображений будет работать.

Ответ 4

Была ли сегодня эта проблема при получении изображений из Apache 2.4 при использовании прокси-сервера, который я написал в php, чтобы предоставить JWT-шлюз авторизации для доступа к бэкенду couchdb. Прокси-сервер использует php fsockopen, и буфер fread() был установлен относительно низким (30 байт), потому что я видел, как это значение использовалось в работе других людей, и я никогда не думал об его изменении. Во всех моих неудачных изображениях JPG (JFIF) я обнаружил расхождение в оригинале по сравнению с обслуживаемым изображением, представлял собой серию crlf, которая соответствовала размеру буфера фреда. Увеличена длина байта для буфера, и проблема больше не существует.

Короче говоря, если ваш потоковый буфер потокового изображения полностью заполнен возвратами каретки и переводами строки, данные усекаются. Возможно, это также относится к сообщению Коллина Кроулла о том, почему оптимизация изображений решила эту проблему.