Skip to content

Commit 4de406a

Browse files
authored
fix(#352): fix content-length in Range requests (#353)
1 parent 5403ac0 commit 4de406a

File tree

2 files changed

+17
-2
lines changed

2 files changed

+17
-2
lines changed

send.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ async function sendRange(
127127
const [byteRange] = ranges;
128128
response.headers.set(
129129
"Content-Length",
130-
String(byteRange.end - byteRange.start),
130+
String(byteRange.end - byteRange.start + 1),
131131
);
132132
response.headers.set(
133133
"Content-Range",

send_test.ts

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -482,11 +482,26 @@ test({
482482
const response = await context.response.toDomResponse();
483483
assertEquals(response.status, 206);
484484
assertEquals(context.response.type, ".json");
485-
assertEquals(context.response.headers.get("content-length"), "5");
485+
assertEquals(context.response.headers.get("content-length"), "6");
486486
assertEquals(await response.text(), `{\n "h`);
487487
},
488488
});
489489

490+
test({
491+
name: "range header from 0-",
492+
ignore: Deno.build.os === "windows",
493+
async fn() {
494+
const { context } = setup("/test.json");
495+
context.request.headers.set("Range", "bytes=0-");
496+
await send(context, context.request.url.pathname, { root: "./fixtures" });
497+
const response = await context.response.toDomResponse();
498+
assertEquals(response.status, 206);
499+
assertEquals(context.response.type, ".json");
500+
assertEquals(context.response.headers.get("content-length"), "23");
501+
assertEquals(await response.text(), `{\n "hello": "world"\n}\n`);
502+
},
503+
});
504+
490505
test({
491506
name: "range header - multiple ranges",
492507
ignore: Deno.build.os === "windows",

0 commit comments

Comments
 (0)