← 中文资源

简体中文版本

Content-Range 响应头构建与解析

格式化并解析用于字节区间的 Content-Range 响应头,双向校验 start、end 与 total 的取值。

阅读英文原文

功能说明

断点续传和分片下载使用 Content-Range 响应头描述返回的字节区间。该工具提供格式化和解析两个方向,并校验 start、end 与 total 的整数关系,防止生成非法头部。它适合文件服务、对象存储代理和下载器中的分片状态同步。

关键代码

formatContentRange 要求 unit 为 bytes、start 非负、end 不小于 start,total 要么是星号,要么为大于 end 的整数。解析正则捕获三个部分,把星号保留为字符串,其余转数字,再调用格式化函数做统一校验。

const match = /^bytes (\d+)-(\d+)\/(\d+|\*)$/.exec(value.trim());
if (!match) throw new RangeError("invalid Content-Range header");

使用注意

该实现只支持 bytes 单位,不支持 unsatisfied-range 形式 bytes */total。total 为星号时无法判断区间是否完整。解析不校验 Content-Length 是否与区间长度一致。超长数字转换为 Number 可能丢失精度,文件大小应在安全整数范围内。头部值应来自可信响应。

验证方式

断言 formatContentRange({ unit: “bytes”, start: 0, end: 499, total: 1000 }) 返回 bytes 0-499/1000,解析该字符串得到相同对象。total 为星号可往返。end 小于 start 抛 RangeError,total 小于等于 end 抛 RangeError,格式错误抛 RangeError。