Cloudflare Workers drop single byte ranges to Backblaze B2 S3 and return 200 instead of 206
Hi all, im experiencing an issue with range requests via workers and cannot find any solutions for this online. Hopefully this community can help!
Setup
- Backblaze B2 S3-compatible (eu-central-003)
- Serving large static MP4s (>1 GB)
- Worker signs requests with SigV4 presign
Expected
- GET with a valid Range → 206 Partial Content + Content-Range
Observed
- Direct browser → always 206 ✅
- Same request via Worker → 200 OK, no Content-Range ❌
- Accept-Ranges: bytes + Vary: Range present, but full file returned
- Workaround: 307 redirect to presigned URL → always 206
Backblaze's reply
- Origin is behaving correctly
- No known region issues
- Likely Cloudflare Workers normalizing/dropping Range
Questions
- Why does Worker fetch return 200 w/o Content-Range when browser gets 206?
- Does Worker or CF edge normalize/drop Range or Accept-Encoding on media fetches?
- Any fetch flags/headers to guarantee 206 for valid single ranges?
- Known issues with range passthrough on Workers for large MP4s?
(Worker + wrangler config available if helpful)
1 Reply
Thank you Leo! I had no idea it was against ToS. I'll take a look at this