CDN加速OSS资源后访问OSS和CDN的URL返回的数据大小不一致

问题描述

OSS通过PutObject等上传方式都会在Response头中记录Content-Length和Content-MD5的信息,返回给客户端,您可以根据该信息确定本地下载的文件与OSS服务器端存储的数据是否一致。但是当使用CDN加速OSS资源后,验证本地的数据,有时会发现本地下载的文件与OSS上存储文件的Content-Length或者Content-MD5不一致。

问题原因

使用CDN加速OSS资源后,本地下载的文件与OSS上存储文件的Content-Length或者Content-MD5不一致的原因如下:

  • CDN上存在历史缓存资源,没有更新。

  • CDN开启了智能压缩功能。

  • CDN开启了页面优化功能。

  • HTTP劫持问题。

解决方案

使用CDN加速OSS资源后,访问OSS的URL和CDN的URL返回的数据大小不一致的排查方法如下:

  • CDN上存在历史缓存资源,没有更新:由于OSS上的文件有更新,而CDN上仍然缓存着历史数据,导致数据不一致,此时请删除CDN节点上已经缓存的资源,并强制CDN节点回源站获取最新资源。更多信息,请参见刷新和预热资源

  • CDN开启了智能压缩功能:CDN会对满足特定条件的文件自动做Gzip压缩,当客户端发送的Request头有Accept-Encoding:gzip,即表示客户端支持Gzip压缩,并且满足CDN智能压缩就会进行压缩,而压缩后就会导致该文件更改为chunked编码,将无法获取得到Content-Length。如不需要开启智能压缩功能,请关闭该功能。更多信息,请参见智能压缩

  • CDN开启了页面优化功能:CDN针对于HTML文件提供了TRIM的功能,即CDN在开启页面优化功能后,可以帮助用户自动删除HTML页面中的空格以及注释,这样可以减少下行流量,但是会导致客户端接收到的Content-Length或者Content-MD5发生变化。如不需要开启页面优化功能,请关闭该功能。更多信息,请参见页面优化

  • HTTP劫持问题:客户端到CDN的L1节点,或CDN的L2节点回源到源站使用HTTP协议时,数据传输是非加密的,因此有可能出现在网络传输的过程中包内容被篡改的情况。这种情况就会导致客户端接收与OSS存储内容不一致。请配置为HTTPS协议,使用HTTPS访问规避该问题。更多信息,请参见配置HTTPS证书

适用于

  • 对象存储OSS

  • CDN