
小伙伴们大家好,最近,做视频播放的时候一直遇到请求状态为416的状态
HTTP 416错误,(Requested Range not satisfiable),是HTTP协议状态码的一种,表示“客户端发送的HTTP数据流包含一个“范围”请求,规定了一个无法满足的字节范围-因为被访问的资源不覆盖这个字节范围”。
HTTP 循环中的 416 错误
任何客户端 ,都需要通过以下循环:
打开一个IP套接字(socket)连接到该IP地址。
通过该套接字写 HTTP 数据流。
从您的Web服务器接受响应的HTTP数据流。该数据流包括状态编码,其值取决于HTTP协议。解析该数据流得到状态编码和其他有用信息。
该错误在以上所述的最后一步生成,即当客户端收到 HTTP 状态编码 并识别其为‘416’时
解决416错误的一般方法
这个错误在大多数网络传输中都少有发生,特别是当客户端系统是一个浏览器时就更不可能。网址在这种情况下通常是网页上可见的标准超文本链接,很少使用“范围”规范。
这个问题可以通过以下途径解决,即先检查客户端在试图做什么,然后与您的互联网服务供应商(ISP)商讨为什么Web 服务器拒绝接受客户端发送的“范围”规范。最常见的原因是编程很差的客户端系统,使用‘范围’规范但忽略所请求资源的大小。
上面这些来自416 - 站长百科 (zzbaike.com)
下面这个是来自相关文档HTTP状态码206和416 - 建站教程 (jiuaidu.com)
由于之前进行视频播放的时候,加载资源有206状态 416
然后找了相关文档,了解到206状态码表示的是:客户端通过发送范围请求头range抓取到了资源的部分数据,一般用来
解决大文件下载的问题
解决cdn和原始http服务器的问题
使用工具例如lftp,wget,telnet测试断点续传
如何判断远程服务器是否支持http 206
在我们看F12的资源看请求头
这是响应头:

这是请求头:

accept-ranges: bytes - 该响应头表明服务器支持range请求,以及服务器所支持的单位是字节(这也是唯一可用的单位).我们还能知道:服务器支持断点续传,以及支持同时下载文件的多个部分,也就是说下载工具可以利用范围请求加速下载该文件.accept-ranges: none 响应头表示服务器不支持范围请求.
content-length: 2349 content-length响应头表明了响应实体的大小,也就是真实的图片文件的大小是2349字节 .

讨论 下载地址是cdn地址,莫非cdn不支持断点续传?
恰好相反,416正是支持断点续传的标志。服务器得到一个range之后,需要对它的取值进行检验,包括:
开始位置非负
结束位置需要大于开始位置
开始位置需要小于文件长度减一 (因为这里的位置索引是从0开始的)
若结束位置大于文件长度减一,则需要把它的值设置为文件长度减一