@@ -263,11 +263,13 @@ protected function sendIterator(Response $res, IteratorResponse $response)
263
263
264
264
protected function sendFile (Response $ res , \think \Request $ request , FileResponse $ response )
265
265
{
266
- $ ifNoneMatch = $ request ->header ('If-None-Match ' );
267
- $ ifRange = $ request ->header ('If-Range ' );
268
266
269
- $ code = $ response ->getCode ();
270
- $ file = $ response ->getFile ();
267
+ $ header = $ response ->getHeader ();
268
+ $ code = $ response ->getCode ();
269
+ $ file = $ response ->getFile ();
270
+
271
+ $ ifNoneMatch = $ request ->header ('If-None-Match ' );
272
+ $ ifRange = $ request ->header ('If-Range ' );
271
273
$ eTag = $ response ->getHeader ('ETag ' );
272
274
$ lastModified = $ response ->getHeader ('Last-Modified ' );
273
275
@@ -277,6 +279,7 @@ protected function sendFile(Response $res, \think\Request $request, FileResponse
277
279
278
280
if ($ ifNoneMatch == $ eTag ) {
279
281
$ code = 304 ;
282
+ unset($ header ['Content-Length ' ]);
280
283
} elseif (!$ ifRange || $ ifRange === $ eTag || $ ifRange === $ lastModified ) {
281
284
$ range = $ request ->header ('Range ' , '' );
282
285
if (Str::startsWith ($ range , 'bytes= ' )) {
@@ -294,15 +297,15 @@ protected function sendFile(Response $res, \think\Request $request, FileResponse
294
297
if ($ start <= $ end ) {
295
298
$ end = min ($ end , $ fileSize - 1 );
296
299
if ($ start < 0 || $ start > $ end ) {
297
- $ code = 416 ;
298
- $ response -> header ( [
300
+ $ code = 416 ;
301
+ $ header = array_merge ( $ header , [
299
302
'Content-Range ' => sprintf ('bytes */%s ' , $ fileSize ),
300
303
]);
301
304
} elseif ($ end - $ start < $ fileSize - 1 ) {
302
305
$ length = $ end < $ fileSize ? $ end - $ start + 1 : -1 ;
303
306
$ offset = $ start ;
304
307
$ code = 206 ;
305
- $ response -> header ( [
308
+ $ header = array_merge ( $ header , [
306
309
'Content-Range ' => sprintf ('bytes %s-%s/%s ' , $ start , $ end , $ fileSize ),
307
310
'Content-Length ' => $ end - $ start + 1 ,
308
311
]);
@@ -312,7 +315,7 @@ protected function sendFile(Response $res, \think\Request $request, FileResponse
312
315
}
313
316
314
317
$ this ->setStatus ($ res , $ code );
315
- $ this ->setHeader ($ res , $ response -> getHeader () );
318
+ $ this ->setHeader ($ res , $ header );
316
319
317
320
if ($ code >= 200 && $ code < 300 && $ length !== 0 ) {
318
321
$ res ->sendfile ($ file ->getPathname (), $ offset , $ length );
0 commit comments