@@ -31,8 +31,8 @@ export function responseInterceptor(interceptor: Interceptor) {
3131    _proxyRes . on ( 'data' ,  ( chunk )  =>  ( buffer  =  Buffer . concat ( [ buffer ,  chunk ] ) ) ) ; 
3232
3333    _proxyRes . on ( 'end' ,  async  ( )  =>  { 
34-       // set  original content type from upstream  
35-       res . setHeader ( 'content-type' ,   originalProxyRes . headers [ 'content-type' ]   ||   '' ) ; 
34+       // copy  original headers  
35+       copyHeaders ( proxyRes ,   res ) ; 
3636
3737      // call interceptor with intercepted response (buffer) 
3838      const  interceptedBuffer  =  Buffer . from ( await  interceptor ( buffer ,  originalProxyRes ,  req ,  res ) ) ; 
@@ -79,3 +79,33 @@ function decompress(proxyRes: http.IncomingMessage, contentEncoding: string) {
7979
8080  return  _proxyRes ; 
8181} 
82+ 
83+ /** 
84+  * Copy original headers 
85+  * https://github.com/apache/superset/blob/9773aba522e957ed9423045ca153219638a85d2f/superset-frontend/webpack.proxy-config.js#L78 
86+  */ 
87+ function  copyHeaders ( originalResponse ,  response )  { 
88+   response . statusCode  =  originalResponse . statusCode ; 
89+   response . statusMessage  =  originalResponse . statusMessage ; 
90+ 
91+   if  ( response . setHeader )  { 
92+     let  keys  =  Object . keys ( originalResponse . headers ) ; 
93+ 
94+     // ignore chunked, brotli, gzip, deflate headers 
95+     keys  =  keys . filter ( ( key )  =>  ! [ 'content-encoding' ,  'transfer-encoding' ] . includes ( key ) ) ; 
96+ 
97+     keys . forEach ( ( key )  =>  { 
98+       let  value  =  originalResponse . headers [ key ] ; 
99+ 
100+       if  ( key  ===  'set-cookie' )  { 
101+         // remove cookie domain 
102+         value  =  Array . isArray ( value )  ? value  : [ value ] ; 
103+         value  =  value . map ( ( x )  =>  x . replace ( / D o m a i n = [ ^ ; ] + ?/ i,  '' ) ) ; 
104+       } 
105+ 
106+       response . setHeader ( key ,  value ) ; 
107+     } ) ; 
108+   }  else  { 
109+     response . headers  =  originalResponse . headers ; 
110+   } 
111+ } 
0 commit comments