mirror of
https://github.com/BobbyWibowo/lolisafe.git
synced 2025-01-31 07:11:33 +00:00
fix: 416 status code handling
This commit is contained in:
parent
0598a63989
commit
21ec4a7479
@ -180,26 +180,29 @@ class ServeStatic {
|
||||
}
|
||||
|
||||
// ReadStream options with Content-Range support if required
|
||||
const { options, length } = serveUtils.buildReadStreamOptions(req, res, stat, this.#options.acceptRanges)
|
||||
const result = serveUtils.buildReadStreamOptions(req, res, stat, this.#options.acceptRanges)
|
||||
if (!result) {
|
||||
return res.end()
|
||||
}
|
||||
|
||||
// HEAD support
|
||||
if (req.method === 'HEAD') {
|
||||
// If HEAD, also set Content-Length (must be string)
|
||||
res.header('Content-Length', String(length))
|
||||
res.header('Content-Length', String(result.length))
|
||||
return res.end()
|
||||
}
|
||||
|
||||
// Only set Content-Disposition on initial GET request
|
||||
// Skip for subsequent requests on non-zero start byte (e.g. streaming)
|
||||
if (options.start === 0 && this.setContentDisposition) {
|
||||
if (result.options.start === 0 && this.setContentDisposition) {
|
||||
await this.setContentDisposition(req, res)
|
||||
}
|
||||
|
||||
if (length === 0) {
|
||||
if (result.length === 0) {
|
||||
res.end()
|
||||
}
|
||||
|
||||
return this.#stream(req, res, fullPath, options, length)
|
||||
return this.#stream(req, res, fullPath, result)
|
||||
}
|
||||
|
||||
async #setHeaders (req, res, stat) {
|
||||
@ -229,8 +232,8 @@ class ServeStatic {
|
||||
}
|
||||
}
|
||||
|
||||
async #stream (req, res, fullPath, options, length) {
|
||||
const readStream = fs.createReadStream(fullPath, options)
|
||||
async #stream (req, res, fullPath, result) {
|
||||
const readStream = fs.createReadStream(fullPath, result.options)
|
||||
|
||||
readStream.on('error', error => {
|
||||
readStream.destroy()
|
||||
@ -238,7 +241,7 @@ class ServeStatic {
|
||||
})
|
||||
|
||||
// 2nd param will be set as Content-Length header (must be number)
|
||||
return res.stream(readStream, length)
|
||||
return res.stream(readStream, result.length)
|
||||
}
|
||||
|
||||
get handler () {
|
||||
|
@ -90,20 +90,23 @@ class ServeStaticQuick {
|
||||
}
|
||||
|
||||
// ReadStream options with Content-Range support if required
|
||||
const { options, length } = serveUtils.buildReadStreamOptions(req, res, stat, this.#options.acceptRanges)
|
||||
const result = serveUtils.buildReadStreamOptions(req, res, stat, this.#options.acceptRanges)
|
||||
if (!result) {
|
||||
return res.end()
|
||||
}
|
||||
|
||||
// HEAD support
|
||||
if (req.method === 'HEAD') {
|
||||
// If HEAD, also set Content-Length (must be string)
|
||||
res.header('Content-Length', String(length))
|
||||
res.header('Content-Length', String(result.length))
|
||||
return res.end()
|
||||
}
|
||||
|
||||
if (length === 0) {
|
||||
if (result.length === 0) {
|
||||
res.end()
|
||||
}
|
||||
|
||||
return this.#stream(req, res, stat, options, length)
|
||||
return this.#stream(req, res, stat, result)
|
||||
}
|
||||
|
||||
// Returns a promise which resolves to true once ServeStaticQuick is ready
|
||||
@ -195,9 +198,9 @@ class ServeStaticQuick {
|
||||
}
|
||||
}
|
||||
|
||||
#stream (req, res, stat, options, length) {
|
||||
#stream (req, res, stat, result) {
|
||||
const fullPath = this.directory + req.path
|
||||
const readStream = fs.createReadStream(fullPath, options)
|
||||
const readStream = fs.createReadStream(fullPath, result.options)
|
||||
|
||||
readStream.on('error', error => {
|
||||
readStream.destroy()
|
||||
@ -205,7 +208,7 @@ class ServeStaticQuick {
|
||||
})
|
||||
|
||||
// 2nd param will be set as Content-Length header (must be number)
|
||||
return res.stream(readStream, length)
|
||||
return res.stream(readStream, result.length)
|
||||
}
|
||||
|
||||
get middleware () {
|
||||
|
@ -166,7 +166,8 @@ self.buildReadStreamOptions = (req, res, stat, acceptRanges) => {
|
||||
res.header('Content-Range', self.contentRange('bytes', length))
|
||||
|
||||
// 416 Requested Range Not Satisfiable
|
||||
return res.status(416).end()
|
||||
res.status(416)
|
||||
return false
|
||||
}
|
||||
|
||||
// Valid (syntactically invalid/multiple ranges are treated as a regular response)
|
||||
|
Loading…
Reference in New Issue
Block a user