Skip to content

Commit 260cc70

Browse files
committed
Merge pull request #73 from mzgoddard/range-headers
Support Range requests commonly used by media
2 parents 322605c + 80796b7 commit 260cc70

File tree

2 files changed

+31
-1
lines changed

2 files changed

+31
-1
lines changed

middleware.js

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,34 @@ module.exports = function(compiler, options) {
141141
return filename ? pathJoin(compiler.outputPath, filename) : compiler.outputPath;
142142
}
143143

144+
function handleRangeHeaders(content, req, res) {
145+
if (req.headers['Accept-Ranges']) res.setHeader('Accept-Ranges', 'bytes');
146+
if (req.headers.range) {
147+
var ranges = parseRange(content.length, req.headers.range);
148+
149+
// unsatisfiable
150+
if (-1 == ranges) {
151+
res.setHeader('Content-Range', 'bytes */' + content.length);
152+
res.statusCode = 416;
153+
return content;
154+
}
155+
156+
// valid (syntactically invalid/multiple ranges are treated as a regular response)
157+
if (-2 != ranges && ranges.length === 1) {
158+
// Content-Range
159+
res.statusCode = 206;
160+
var length = content.length;
161+
res.setHeader(
162+
'Content-Range',
163+
'bytes ' + ranges[0].start + '-' + ranges[0].end + '/' + length
164+
);
165+
166+
content = content.slice(ranges[0].start, ranges[0].end + 1);
167+
}
168+
}
169+
return content;
170+
}
171+
144172
// The middleware function
145173
function webpackDevMiddleware(req, res, next) {
146174
var filename = getFilenameFromUrl(req.url);
@@ -178,6 +206,7 @@ module.exports = function(compiler, options) {
178206

179207
// server content
180208
var content = fs.readFileSync(filename);
209+
content = handleRangeHeaders(content, req, res);
181210
res.setHeader("Access-Control-Allow-Origin", "*"); // To support XHR, etc.
182211
res.setHeader("Content-Type", mime.lookup(filename));
183212
res.setHeader("Content-Length", content.length);

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@
88
},
99
"dependencies": {
1010
"memory-fs": "~0.3.0",
11-
"mime": "^1.3.4"
11+
"mime": "^1.3.4",
12+
"range-parser": "^1.0.3"
1213
},
1314
"licenses": [
1415
{

0 commit comments

Comments
 (0)