如何排查 CDN 416错误码的问题?

边缘云CDN与加速技术服务知识库
问题描述

用户反馈访问 CDN 加速域名失败,查看 CDN 侧状态码指标存在较多 416 错误码,如何排查分析该问题?

问题分析

首先,416 错误码表示:The requested range cannot be satisfied, 即通过HTTP Range请求获取大文件的部分内容时,选取了无效的范围。 这个错误在大多数网络传输中都少有发生,特别是当客户端系统是一个浏览器时就更不可能。 网址在这种情况下通常是网页上可见的标准超文本链接, 很少使用“Range”规范。 接下来,可以通过 CDN 访问日志和客户端侧请求的行为,进一步确认是否为客户端请求问题。

解决方案
  1. 使用 CURL 工具,我们可以模拟出 416 这一错误码的产生,例如。
 # curl -vo /dev/null 'http://0802.xxxxexample.cn' -H 'Range:bytes=655-866'
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0*   Trying 42.81.xx.xx:80...
* Connected to 0802.xxxxexample.cn (42.81.xx.xx) port 80 (#0)
> GET / HTTP/1.1
> Host: 0802.xxxxexample.cn
> User-Agent: curl/7.79.1
> Accept: */*
> Range:bytes=655-866
> 
* Mark bundle as not supporting multiuse
< HTTP/1.1 416 Requested Range Not Satisfiable
< Server: Byte-nginx
< Content-Type: text/html
< Content-Length: 0
< Connection: keep-alive
< Accept-Ranges: bytes
< Age: 761797
< Content-Range: bytes */612
< Etag: "621f01d5-264"
< Last-Modified: Wed, 02 Mar 2022 05:34:13 GMT
< X-Bdcdn-Cache-Status: TCP_HIT
< X-Request-Ip: 49.7.xx.xx
< X-Response-Cache: edge_hit
< X-Response-Cinfo: 49.7.xx.xx
< X-Tt-Trace-Tag: id=5
< Date: Wed, 10 Aug 2022 09:16:43 GMT
< via: cache014.tjct
< 
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
* Connection #0 to host 0802.xxxxexample.cn left intact

上述测试可知,该 URL 对应的文件大小实际为Content-Range: bytes */612,即 612 字节。但客户端请求的范围为 Range:bytes=655-866,已经范围越界,因此返回了 416 Requested Range Not Satisfiable。

  1. 而客户端侧的报错和行为,有时用户可能不方便收集。这时,用户可以联系火山引擎技术支持工程师,通过后台查看 CDN 访问日志,来确认问题时间段的客户端请求信息,是否同样为 Range 范围有误,导致的访问失败。
  2. 同时,我们也可以尝试使用正确的 ‘Range’ 范围请求域名,观察是否可以正常响应 206 状态码。

假设文件的总大小为2000字节,指定不同的ByteRange,可以参考如下范围使用方式:

Range: bytes=0-499:从文件开始部分到指定字节的内容,即下载1~500字节的内容。

Range: bytes=-500:最后500字节的内容,即下载1501~2000字节的内容。

Range: bytes=500-:从第500字节开始到文件结束部分的内容,即下载501~2000字节的内容。

Range: bytes=0-:从第一个字节开始到最后一个字节的内容,即下载完整的文件1~2000字节的内容。

如果您有其他问题,欢迎您联系火山引擎技术支持服务

35
0
0
0
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论