Skip to content

How to handle non-chunked transfer-encoding headers #7590

@shinrich

Description

@shinrich

As part of PR #7473, the Transfer-Encoding header was marked hop-by-hop. This means all Transfer-encoding headers were are removed before the proxy request is created. Transfer-encoding headers are only added back as appropriate for the sending from ATS to the origin.

This change was made to address issue #6907.

The mozilla specification https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Transfer-Encoding indicates that the Transfer-Encoding is a hop-by-hop header, so assuming we interpret the incoming transfer-encoding header the change in PR #7473 is correct and lines up with the spec.

However @bryancall pointed out that ATS really only interprets the chunked value of the Transfer-Encoding header. According to the Mozilla document there are several other values that deal with compressing the data as it is transferred.

Transfer-Encoding: compress
Transfer-Encoding: deflate
Transfer-Encoding: gzip
Transfer-Encoding: identity

In addition in our logic to translate HTTP/1.1 headers to HTTP/2, the transfer-encoding header is stripped. Which again is fine for chunked, but ignores any compression-oriented values of the header.

It seems these days that the vast majority of uses of transfer-encoding headers are just chunked. In fact it is very hard to find articles discussing the other options. So we don't need a particularly efficient solution here. In fact it may be sufficient to just log warnings when we drop these headers.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions