@@ -141,6 +141,34 @@ module.exports = function(compiler, options) {
141
141
return filename ? pathJoin ( compiler . outputPath , filename ) : compiler . outputPath ;
142
142
}
143
143
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
+
144
172
// The middleware function
145
173
function webpackDevMiddleware ( req , res , next ) {
146
174
var filename = getFilenameFromUrl ( req . url ) ;
@@ -178,6 +206,7 @@ module.exports = function(compiler, options) {
178
206
179
207
// server content
180
208
var content = fs . readFileSync ( filename ) ;
209
+ content = handleRangeHeaders ( content , req , res ) ;
181
210
res . setHeader ( "Access-Control-Allow-Origin" , "*" ) ; // To support XHR, etc.
182
211
res . setHeader ( "Content-Type" , mime . lookup ( filename ) ) ;
183
212
res . setHeader ( "Content-Length" , content . length ) ;
0 commit comments