间歇性加载图片失败 - ERR_CONTENT_LENGTH_MISMATCH

13

问题

我的网站在随机的时间无法加载随机的图片。出现以下错误信息时,图像会间歇性地无法加载:

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

图像要么根本不加载并显示损坏的图像图标和alt标签,要么加载了一半,剩下的部分是损坏的(例如颜色全部混乱或者一半的图像会变灰色)。

设置

Litespeed服务器、PHP/mySQL网站,带有HTML、CSS、JavaScript和JQuery。

重要说明

  • 问题在所有主要的Web浏览器上发生-间歇性地以及使用各种图片。
  • 我正在通过htaccess强制对所有页面进行UTF-8编码和HTTPS。
  • 托管提供商表示所有权限都已正确设置。
  • 在我的访问日志中,当一个图像无法加载时,它会为该图像提供“200 OK”响应,并将传输的字节数列出为“0”(零)。
  • 几乎总是图片无法加载,但约5%的情况下可能是CSS文件或JavaScript文件。
  • 问题发生在从Apache切换到Litespeed服务器后立即出现,并已持续了几个星期。
  • 启用Gzip和缓存。

我自己也在想,有没有快速检查的方法?抱歉,我不是很擅长网站管理... - user3100907
你可以使用在线工具,例如checkgzipcompression.com(谷歌搜索的第一个结果)。 - alesc
单个图像未启用GZIP压缩。完整页面已启用GZIP压缩。我认为这是正常行为。思路不错,谢谢帮忙。 - user3100907
有代理服务器或负载均衡器参与,或者堆栈中还有其他信息可以告诉我们吗? - Jordan
还有,你说的“托管提供商”——你对这个服务器有完全控制权(即控制台访问权限)吗? - Jordan
显示剩余7条评论
4个回答

1
这个错误是HTTP头中广告的数据与传输的数据之间的明显不匹配。
可能来自以下几个方面:
1. 服务器:如果服务器有某些模块的错误,会更改内容但不会在标头中更新内容长度,或者只是无法正常工作。
2. 代理:您和服务器之间的任何代理都可能修改请求并不更新内容长度标头。
这也可能发生在设置错误的内容类型时。
据我所知,我没有在IIS / apache / tomcat中看到这些问题,而是大多出现在自定义编写的代码中。 (在响应流上自己编写图像)
甚至可能由您的广告拦截器引起。
尝试禁用它或为图像来源域添加异常。

我会向我的主机询问关于错误和代理的问题,因为我对此一无所知。我确实看到其他人在线上指出了广告拦截器的问题。它已被禁用,但仍然可以在有或没有广告拦截器的情况下正常运行。这种情况也发生在其他浏览器上,我从未安装过广告拦截器。谢谢。 - user3100907

0
建议使用cURL将图像作为独立的url进行访问,例如php testCurlimg >image.log 2>&1,以查看服务器返回的内容。然后您可以升级到测试网页的级别,php testCurlpg >page.log 2>&1以查看混合数据的上下文。

0
今天在使用我编写的 PHP 代理提供 JWT 认证网关以访问 CouchDB 后端时,从 Apache 2.4 检索图像时遇到了问题。代理使用 PHP fsockopen,并且 fread() 缓冲区设置相对较低(30 字节),因为我看到其他人的工作中使用了这个值,而我从未考虑过更改它。在所有失败的 JPG(JFIF)图像中,我发现原始图像与提供的图像之间的差异是一系列匹配 fread 缓冲区大小的回车符和换行符。增加缓冲区的字节长度,问题就不再存在。
简而言之,如果您的 fread 缓冲区流式传输的图像完全充满回车符和换行符,则数据会被截断。这可能也与 Collin Krawll 的帖子有关,即为什么图像优化解决了该问题。

0

我刚遇到了同样的ERR_CONTENT_LENGTH_MISMATCH错误。我优化了图片,问题就解决了。我使用了ImageOptim进行图像优化,但我猜任何图像优化工具都可以。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接