next.js – NextJs + tRPC with Nginx as reverse proxy – duplicate header Transfer-Encoding: chunked

tRPC when used on client side with .useMutation() hook sends duplicate Transfer-Encoding: chunked header

Link to reproduction:
github.com/DownDev/trpc-bug

To reproduce
run using: docker compose up
visit: localhost

I generated this project using create-t3-app and just added as simple example as it could be.
It only has on main page a button that calls to a mutation on client side.

All the mutation does is return a string “TEST”.
The bug happens when using a reverse-proxy – nginx with debug mode enabled so you can see the incoming headers.

When you try to call this mutation in production mode it will fail and if you investigate in the logs you will find that nginx receives duplicated header Transfer-Encoding: chunked and fails. I also tried this with 2 other reverse-proxies (traefik and caddy) and in both of them got the same error – duplicate header

What can i do to resolve this? I tried deploying NextJs + tRPC to production but failed cause of this.

nginx-1   | 2025/08/24 14:49:34 [debug] 22#22: *7 http proxy header: "Content-Type: application/json"
nginx-1   | 2025/08/24 14:49:34 [debug] 22#22: *7 http proxy header: "Transfer-Encoding: chunked"
nginx-1   | 2025/08/24 14:49:34 [debug] 22#22: *7 http proxy header: "Content-Encoding: gzip"
nginx-1   | 2025/08/24 14:49:34 [debug] 22#22: *7 http proxy header: "Date: Sun, 24 Aug 2025 14:49:34 GMT"
nginx-1   | 2025/08/24 14:49:34 [debug] 22#22: *7 http proxy header: "Transfer-Encoding: chunked"
nginx-1   | 2025/08/24 14:49:34 [error] 22#22: *7 upstream sent duplicate header line: "Transfer-Encoding: chunked", previous value: "Transfer-Encoding: chunked" while reading response header from upstream, client: 192.168.148.1, server: localhost, request: "POST /api/trpc/post.create?batch=1 HTTP/1.1", upstream: "http://192.168.148.2:3000/api/trpc/post.create?batch=1", host: "localhost", referrer: "http://localhost/"

Read more here: Source link

next.js – NextJs + tRPC with Nginx as reverse proxy – duplicate header Transfer-Encoding: chunked

tRPC when used on client side with .useMutation() hook sends duplicate Transfer-Encoding: chunked header

Link to reproduction:
github.com/DownDev/trpc-bug

To reproduce
run using: docker compose up
visit: localhost

I generated this project using create-t3-app and just added as simple example as it could be.
It only has on main page a button that calls to a mutation on client side.

All the mutation does is return a string “TEST”.
The bug happens when using a reverse-proxy – nginx with debug mode enabled so you can see the incoming headers.

When you try to call this mutation in production mode it will fail and if you investigate in the logs you will find that nginx receives duplicated header Transfer-Encoding: chunked and fails. I also tried this with 2 other reverse-proxies (traefik and caddy) and in both of them got the same error – duplicate header

What can i do to resolve this? I tried deploying NextJs + tRPC to production but failed cause of this.

nginx-1   | 2025/08/24 14:49:34 [debug] 22#22: *7 http proxy header: "Content-Type: application/json"
nginx-1   | 2025/08/24 14:49:34 [debug] 22#22: *7 http proxy header: "Transfer-Encoding: chunked"
nginx-1   | 2025/08/24 14:49:34 [debug] 22#22: *7 http proxy header: "Content-Encoding: gzip"
nginx-1   | 2025/08/24 14:49:34 [debug] 22#22: *7 http proxy header: "Date: Sun, 24 Aug 2025 14:49:34 GMT"
nginx-1   | 2025/08/24 14:49:34 [debug] 22#22: *7 http proxy header: "Transfer-Encoding: chunked"
nginx-1   | 2025/08/24 14:49:34 [error] 22#22: *7 upstream sent duplicate header line: "Transfer-Encoding: chunked", previous value: "Transfer-Encoding: chunked" while reading response header from upstream, client: 192.168.148.1, server: localhost, request: "POST /api/trpc/post.create?batch=1 HTTP/1.1", upstream: "http://192.168.148.2:3000/api/trpc/post.create?batch=1", host: "localhost", referrer: "http://localhost/"

Read more here: Source link