背景与价值范围请求可被滥用导致资源耗尽。分片校验与速率治理保障下载体验与系统稳定。统一规范Accept-Ranges:统一声明 `bytes`。分片上限:单片最大(如≤8MB)。速率限制:对频繁范围请求进行限速与审计。核心实现Range解析与校验type Range = { start: number; end: number } function parseRange(h: string | undefined, size: number): Range | null { const s = (h || '').trim() const m = s.match(/^bytes=(\d*)-(\d*)$/) if (!m) return null let start = m[1] ? Number(m[1]) : 0 let end = m[2] ? Number(m[2]) : size - 1 if (!Number.isFinite(start) || !Number.isFinite(end) || start < 0 || end < start || end >= size) return null return { start, end } } function clamp(r: Range, maxChunk = 8 * 1024 * 1024): Range { const len = r.end - r.start + 1; if (len > maxChunk) return { start: r.start, end: r.start + maxChunk - 1 }; return r } 206响应构建type Res = { setHeader: (k: string, v: string) => void; status: (n: number) => Res; end: (b?: any) => void } function send206(res: Res, r: Range, size: number, chunk: Uint8Array) { res.setHeader('Accept-Ranges', 'bytes') res.setHeader('Content-Range', `bytes ${r.start}-${r.end}/${size}`) res.status(206).end(chunk) } 落地建议严格校验Range头并限制分片大小与频率,统一返回206与Accept-Ranges。验证清单Range是否合法且分片未超上限;是否正确下发206/Content-Range。

发表评论 取消回复