| 41 | } |
| 42 | |
| 43 | const rewriteOriginHeader = ( |
| 44 | proxyReq: http.ClientRequest, |
| 45 | options: ProxyOptions, |
| 46 | config: ResolvedConfig, |
| 47 | ) => { |
| 48 | // Browsers may send Origin headers even with same-origin |
| 49 | // requests. It is common for WebSocket servers to check the Origin |
| 50 | // header, so if rewriteWsOrigin is true we change the Origin to match |
| 51 | // the target URL. |
| 52 | if (options.rewriteWsOrigin) { |
| 53 | const { target } = options |
| 54 | |
| 55 | if (proxyReq.headersSent) { |
| 56 | config.logger.warn( |
| 57 | colors.yellow( |
| 58 | `Unable to rewrite Origin header as headers are already sent.`, |
| 59 | ), |
| 60 | ) |
| 61 | return |
| 62 | } |
| 63 | |
| 64 | if (proxyReq.getHeader('origin') && target) { |
| 65 | const changedOrigin = |
| 66 | typeof target === 'object' |
| 67 | ? `${target.protocol ?? 'http:'}//${target.host}` |
| 68 | : target |
| 69 | |
| 70 | proxyReq.setHeader('origin', changedOrigin) |
| 71 | } |
| 72 | } |
| 73 | } |
| 74 | |
| 75 | export function proxyMiddleware( |
| 76 | httpServer: HttpServer | null, |