Skip to content

Make max_header_list_size configurable (Currently 16KB only) #14046

@chbloemer

Description

@chbloemer

What problem are you trying to solve?

I have an issue when sending more than 16kb of headers. We increased header size on our ingress and our application but linkerd is the last in the chain which needs to allow a bigger header size to work.

Linkerd Debug output is:
{"timestamp":"2025-05-22T06:14:04.309437Z","level":"DEBUG","fields":{"message":"received","frame":"Headers { stream_id: StreamId(3), flags: (0x5: END_HEADERS | END_STREAM) }"},"target":"h2::codec::framed_read","threadId":"ThreadId(1)"} {"timestamp":"2025-05-22T06:14:04.309477Z","level":"DEBUG","fields":{"message":"stream error REQUEST_HEADER_FIELDS_TOO_LARGE -- recv_headers: frame is over size; stream=StreamId(3)"},"target":"h2::proto::streams::recv","threadId":"ThreadId(1)"}

linkerd return the following error to the client:
HTTP/1.1 431 Request Header Fields Too Large

Linkerd is using h2 which default header size value is 16kb
https://docs.rs/hyper/latest/hyper/client/conn/http2/struct.Builder.html#method.max_header_list_size

We need the option to increase this value.

How should the problem be solved?

Add an option to make this value configurable.

Any alternatives you've considered?

No. Only removing linkerd. But thats not really an option.

How would users interact with this feature?

Configure it via helm-chart or maybe annotation on the pod.

Would you like to work on this feature?

no

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions