feat(serve-static): "206 Partial Content" support #3461
+645
−9
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Closes #3324
This implements 206 Partial Content(also called as range requests) support in
serve-static
middleware.It will be useful specially for seeking a video file.
serve-static
base implementation now accepts an optional function:If
partialContentSupport
is provided and HTTP header includes validRange
,serve-static
returns subsets of content.getPartialContent
function encapsulates a file handle to avoid opening and closing file multiple times.close
function is invoked when all ranges are read, to teardown the file handle.416 Range Not Satisfiable
The implementation also returns 416 Range Not Satisfiable if
Range
headers contains many range requests (more than 10), that is potentially DoS (Denial of Service) attack.This limitation (
10
) is just a clueless number.The number may be changed when we understand it is too small/too big.
Not included
If-Range
,ETag
and so on. I think this feature is useful without having cache-control, which needs a lot work.serverStatic
implementation 😭 It is solely implemented here: https://github.com/honojs/node-server/blob/74e86a28f375e5acd52e342519ff2b1110a95c16/src/serve-static.ts#L59The author should do the following, if applicable
bun run format:fix && bun run lint:fix
to format the code