@@ -263,11 +263,13 @@ protected function sendIterator(Response $res, IteratorResponse $response)
263263
264264 protected function sendFile (Response $ res , \think \Request $ request , FileResponse $ response )
265265 {
266- $ ifNoneMatch = $ request ->header ('If-None-Match ' );
267- $ ifRange = $ request ->header ('If-Range ' );
268266
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 ' );
271273 $ eTag = $ response ->getHeader ('ETag ' );
272274 $ lastModified = $ response ->getHeader ('Last-Modified ' );
273275
@@ -277,6 +279,7 @@ protected function sendFile(Response $res, \think\Request $request, FileResponse
277279
278280 if ($ ifNoneMatch == $ eTag ) {
279281 $ code = 304 ;
282+ unset($ header ['Content-Length ' ]);
280283 } elseif (!$ ifRange || $ ifRange === $ eTag || $ ifRange === $ lastModified ) {
281284 $ range = $ request ->header ('Range ' , '' );
282285 if (Str::startsWith ($ range , 'bytes= ' )) {
@@ -294,15 +297,15 @@ protected function sendFile(Response $res, \think\Request $request, FileResponse
294297 if ($ start <= $ end ) {
295298 $ end = min ($ end , $ fileSize - 1 );
296299 if ($ start < 0 || $ start > $ end ) {
297- $ code = 416 ;
298- $ response -> header ( [
300+ $ code = 416 ;
301+ $ header = array_merge ( $ header , [
299302 'Content-Range ' => sprintf ('bytes */%s ' , $ fileSize ),
300303 ]);
301304 } elseif ($ end - $ start < $ fileSize - 1 ) {
302305 $ length = $ end < $ fileSize ? $ end - $ start + 1 : -1 ;
303306 $ offset = $ start ;
304307 $ code = 206 ;
305- $ response -> header ( [
308+ $ header = array_merge ( $ header , [
306309 'Content-Range ' => sprintf ('bytes %s-%s/%s ' , $ start , $ end , $ fileSize ),
307310 'Content-Length ' => $ end - $ start + 1 ,
308311 ]);
@@ -312,7 +315,7 @@ protected function sendFile(Response $res, \think\Request $request, FileResponse
312315 }
313316
314317 $ this ->setStatus ($ res , $ code );
315- $ this ->setHeader ($ res , $ response -> getHeader () );
318+ $ this ->setHeader ($ res , $ header );
316319
317320 if ($ code >= 200 && $ code < 300 && $ length !== 0 ) {
318321 $ res ->sendfile ($ file ->getPathname (), $ offset , $ length );
0 commit comments