访问OSS的URL和CDN的URL返回的数据大小不一致

访问OSS的URL和CDN的URL返回的数据大小不一致

更新时间:2018-07-17 16:08:08

概述

本文主要介绍使用CDN加速OSS资源,访问OSS的URL和CDN的URL返回的数据大小不一致的排查思路。

问题描述

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

解决方案

  1. 获取CDN上的历史缓存。由于OSS上的文件有更新,而CDN上仍然缓存着历史数据,导致数据不一致,可以通过刷新CDN缓存解决。
  2. CDN的智能压缩功能。 CDN会对满足特定条件的文件自动做gzip压缩,当客户端发送的Request头有 Accept-Encoding:gzip,即表示客户端支持gzip压缩,并且满足CDN智能压缩就会进行压缩,而压缩后就会导致该文件更改为chunked编码,将无法获取得到Content-Length 。
  3. CDN的页面优化功能。CDN针对于html文件提供了TRIM的功能,即CDN在开启页面优化功能后,可以帮助用户自动去掉html页面中的空格以及注释,这样可以减少下行流量,但是会导致客户端接收到的Content-Length或者Content-MD5发生变化。
  4. HTTP劫持问题。客户端到CDN的L1节点,或CDN的L2节点回源到源站使用HTTP协议时,数据传输是非加密的,因此有可能出现在网络传输的过程中包内容被篡改的情况。这种情况就会导致客户端接收与OSS存储内容不一致。可以通过修改为HTTPS协议规避该问题。

适用于

  • 对象存储OSS
  • CDN