@@ -409,17 +409,21 @@ class HttpServer {
409409 function proxyUrl (req : IncomingMessage , res : ServerResponse ): Bool {
410410 final url = req .url .replace (" /proxy?url=" , " " );
411411 final proxy = proxyRequest (url , req , res , proxyRes -> {
412- final url = proxyRes .headers [" location" ] ?? return false ;
413- final proxy2 = proxyRequest (url , req , res , proxyRes -> false );
412+ final redirectUrl = proxyRes .headers [" location" ] ?? return false ;
413+ final proxy2 = proxyRequest (redirectUrl , req , res , proxyRes -> false );
414414 if (proxy2 == null ) {
415- res .end (' Proxy error: multiple redirects for url $url ' );
415+ if (! res .headersSent ) {
416+ res .end (' Proxy error: multiple redirects for url $redirectUrl ' );
417+ }
416418 return true ;
417419 }
418420 req .pipe (proxy2 );
421+ req .on (" error" , () -> proxy2 .destroy ());
419422 return true ;
420423 });
421424 if (proxy == null ) return false ;
422425 req .pipe (proxy );
426+ req .on (" error" , () -> proxy .destroy ());
423427 return true ;
424428 }
425429
@@ -443,16 +447,34 @@ class HttpServer {
443447 };
444448 req .headers [" referer" ] = url .toString ();
445449 req .headers [" host" ] = url .hostname ;
450+
446451 final request = url .protocol == " https:" ? Https .request : Http .request ;
447452 final proxy = request (options , proxyRes -> {
448- if (cancelProxyRequest (proxyRes )) return ;
453+ if (cancelProxyRequest (proxyRes )) {
454+ proxyRes .destroy ();
455+ return ;
456+ }
449457 proxyRes .headers [" content-type" ] = " application/octet-stream" ;
450458 res .writeHead (proxyRes .statusCode , proxyRes .headers );
451459 proxyRes .pipe (res );
460+
461+ // clean up when response ends
462+ proxyRes .on (" end" , () -> {
463+ if (! res .writableEnded ) res .end ();
464+ });
452465 });
466+
453467 proxy .on (" error" , err -> {
454- res .end (' Proxy error: ${url .href }' );
468+ proxy .destroy ();
469+ if (! res .headersSent ) {
470+ res .end (' Proxy error: ${url .href }' );
471+ }
455472 });
473+ // clean up when client disconnects (seeking/abort)
474+ res .on (" close" , () -> {
475+ if (! proxy .destroyed ) proxy .destroy ();
476+ });
477+
456478 return proxy ;
457479 }
458480
0 commit comments