You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
TypeError [ERR_HTTP2_INVALID_CONNECTION_HEADERS]: HTTP/1 Connection specific headers are forbidden: "host"
I'm not sure it should be considered a connection header. The HTTP/2 spec recommends using the Host header instead of :authority if you are converting from an HTTP/1 request. This is an excerpt of the examples section:
This section shows HTTP/1.1 requests and responses, with
illustrations of equivalent HTTP/2 requests and responses.
An HTTP GET request includes request header fields and no payload
body and is therefore transmitted as a single HEADERS frame, followed
by zero or more CONTINUATION frames containing the serialized block
of request header fields. The HEADERS frame in the following has
both the END_HEADERS and END_STREAM flags set; no CONTINUATION frames
are sent.
GET /resource HTTP/1.1 HEADERS
Host: example.org ==> + END_STREAM
Accept: image/jpeg + END_HEADERS
:method = GET
:scheme = https
:path = /resource
host = example.org
accept = image/jpeg
I think the correct behaviour would be for Node.JS to allow host, and omit auto-filling :authority if it's supplied.
The current behaviour was there from the very introduction of http2 (#14239), so I'm not sure if there was a special motivation for considering host a connection header? Does it interact with something else?
I don't know what we should do... But I strongly think we should at least give users a way to supply host without an error.
@codedrift Fortunately they also seem to allow :authority :) The catch is, you need to use Host when signing, then rename the header to :authority when sending the request.
If it's useful, here's a demo on accessing the Transcribe Streaming API, which uses my a4s library for signing.
@codedrift Fortunately they also seem to allow :authority :) The catch is, you need to use Host when signing, then rename the header to :authority when sending the request.
If it's useful, here's a demo on accessing the Transcribe Streaming API, which uses my a4s library for signing.
Activity
ejames17 commentedon Mar 27, 2020
@mildsunrise +1 for this.
codedrift commentedon Jul 28, 2020
+1
I'm trying to use AWS transcribe streaming which requires a host header to be present because it is signed before sending the request. See https://docs.aws.amazon.com/transcribe/latest/dg/how-streaming.html -> "Required Headers"
mildsunrise commentedon Jul 28, 2020
@codedrift Fortunately they also seem to allow
:authority:) The catch is, you need to useHostwhen signing, then rename the header to:authoritywhen sending the request.If it's useful, here's a demo on accessing the Transcribe Streaming API, which uses my a4s library for signing.
codedrift commentedon Jul 28, 2020
Awesome! Thank you very much!
codedrift commentedon Jul 28, 2020
@mildsunrise So i adapted your library and it works perfectly! 🚀
http2: allow Host in HTTP/2 requests