Непрерывный отказ при загрузке изображений - 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, которая соответствовала размеру буфера фреда. Увеличена длина байта для буфера, и проблема больше не существует.
Короче говоря, если ваш потоковый буфер потокового изображения полностью заполнен возвратами каретки и переводами строки, данные усекаются. Возможно, это также относится к сообщению Коллина Кроулла о том, почему оптимизация изображений решила эту проблему.