Skip to content

Requests missing an :authority pseudo-header return PROTOCOL_ERROR #345

@zackangelo

Description

@zackangelo

We are using nghttpx to upgrade requests from HTTP to H2. nghttpx omits the :authority pseudo-header when creating the request to forward on via H2, this appears to be consistent with the spec:

The :authority pseudo-header field includes the authority portion of the target URI ([RFC3986], Section 3.2). The authority MUST NOT include the deprecated userinfo subcomponent for http or https schemed URIs.

To ensure that the HTTP/1.1 request line can be reproduced accurately, this pseudo-header field MUST be omitted when translating from an HTTP/1.1 request that has a request target in origin or asterisk form (see [RFC7230], Section 5.3). Clients that generate HTTP/2 requests directly SHOULD use the :authority pseudo-header field instead of the Host header field. An intermediary that converts an HTTP/2 request to HTTP/1.1 MUST create a Host header field if one is not present in a request by copying the value of the :authority pseudo-header field.

However, it appears that h2 incorrectly rejects the request with PROTOCOL_ERROR when this happens. It also seems like there should also be some logging around this code path, but I couldn't get it to trigger.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions