@@ -368,17 +368,17 @@ const prepareSocket = function (socket, head) {
368368
369369/**
370370 * @param {http.IncomingMessage } res
371- * @param {Record<string, string> } headerOverride
371+ * @param {Record<string, string | false > } headerOverride
372372 */
373- const createHeader = function ( res , headerOverride = { } ) {
373+ const createHeaderStringFromResponse = function ( res , headerOverride = { } ) {
374374 let header = `HTTP/${ res . httpVersion } ${ res . statusCode } ${ res . statusMessage } \r\n` ;
375375 for ( let i = 0 ; i < res . rawHeaders . length ; i += 2 ) {
376- const k = res . rawHeaders [ i ] ;
377- let v = res . rawHeaders [ i + 1 ] ;
378- const override = headerOverride [ k . toLowerCase ( ) ] ;
379- if ( override ) {
380- v = override ;
381- delete headerOverride [ k . toLowerCase ( ) ] ;
376+ const k = res . rawHeaders [ i ] . toLowerCase ( ) ;
377+ const override = headerOverride [ k ] ;
378+ const v = override ?? res . rawHeaders [ i + 1 ] ;
379+ delete headerOverride [ k ] ;
380+ if ( ! v ) {
381+ continue ;
382382 }
383383 header += `${ k } : ${ v } \r\n` ;
384384 }
@@ -395,21 +395,15 @@ const createHeader = function (res, headerOverride = {}) {
395395 */
396396proxyServer . on ( 'upgrade' , async ( req , socket , head ) => {
397397 const isCCS = Boolean ( req . url ?. startsWith ( '/ccs' ) ) ;
398- let websocketTarget ;
398+ const websocketTarget = isCCS
399+ ? `https://cluster-connection.${ CLOUD_HOST } ${
400+ req . url ?. replace ( '/ccs' , '' ) ?? ''
401+ } `
402+ : `http://localhost:${ WEBSOCKET_PROXY_PORT } ` ;
403+ const createRequest = websocketTarget . startsWith ( 'https' )
404+ ? https . request
405+ : http . request ;
399406
400- if ( isCCS ) {
401- websocketTarget = `wss://cluster-connection.${ CLOUD_HOST } ${
402- req . url ?. replace ( '/ccs' , '' ) ?? ''
403- } `;
404- } else {
405- websocketTarget = `ws://localhost:${ WEBSOCKET_PROXY_PORT } ` ;
406- }
407-
408- const targetWebsocketURL = new URL ( websocketTarget ) ;
409- const isSecure = targetWebsocketURL . protocol === 'wss:' ;
410- const createRequest = isSecure ? https . request : http . request ;
411-
412- targetWebsocketURL . protocol = isSecure ? 'https:' : 'http:' ;
413407 prepareSocket ( socket , head ) ;
414408
415409 let extraHeaders = { } ;
@@ -420,7 +414,7 @@ proxyServer.on('upgrade', async (req, socket, head) => {
420414 ) ;
421415 }
422416
423- const proxyReq = createRequest ( targetWebsocketURL . toString ( ) , {
417+ const proxyReq = createRequest ( websocketTarget , {
424418 method : req . method ,
425419 headers : { ...req . headers , ...extraHeaders } ,
426420 } ) ;
@@ -433,7 +427,7 @@ proxyServer.on('upgrade', async (req, socket, head) => {
433427 proxyReq . on ( 'response' , ( proxyRes ) => {
434428 // We only get response back if upgrade didn't happen, so stream back
435429 // whatever server responded (it's probably an error)
436- socket . write ( createHeader ( proxyRes ) ) ;
430+ socket . write ( createHeaderStringFromResponse ( proxyRes ) ) ;
437431 proxyRes . pipe ( socket ) ;
438432 } ) ;
439433
@@ -444,7 +438,13 @@ proxyServer.on('upgrade', async (req, socket, head) => {
444438 socket . end ( ) ;
445439 } ) ;
446440 prepareSocket ( proxySocket , proxyHead ) ;
447- socket . write ( createHeader ( proxyRes ) ) ;
441+ socket . write (
442+ createHeaderStringFromResponse ( proxyRes , {
443+ 'access-control-allow-credentials' : false ,
444+ 'access-control-allow-origin' : false ,
445+ 'set-cookie' : false ,
446+ } )
447+ ) ;
448448 proxySocket . pipe ( socket ) . pipe ( proxySocket ) ;
449449 } ) ;
450450
0 commit comments