TestCafeを使っていたところ,"ERR_HTTP2_HEADER_SINGLE_VALUE"というエラーが出たので,原因と対応方法をまとめます.
node.jsのinternal/http2で"ERR_HTTP2_HEADER_SINGLE_VALUE"というエラーが出るのは,headerに重複するキーが存在するためです.
ERR_HTTP2_HEADER_SINGLE_VALUE
Multiple values were provided for an HTTP/2 header field that was required to have only a single value.
Node.js v16.4.2 Documentation
みーの場合は,以下のようにRefererを設定した時にエラーとなりました.
class InvalidReferrerRequestHook extends RequestHook { constructor() { super(); } onRequest(e) { e.requestOptions.headers["Referer"] = "invalid.example.com"; } onResponse(e) { } }
e.requestOptions.headers
の中身を確認したところ,以下のように refererが既に設定されていました.
{ "host": "www.example.com", "connection": "keep-alive", "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)", "accept": "*/*", "referer": "https://www.example.com/", "accept-encoding": "gzip, deflate", "accept-language": "en-US,en;q=0.9" }
Refererとrefererという2個のキーが重複したことが原因ですので,e.requestOptions.headers
の中身に合わせてキーを設定すればよいわけです.
そもそもHTTP(s)リクエストのヘッダーは,ライブラリによって大文字と小文字が混在していたり,RefererはReferrerのスペルミスなのに現在も修正されない*1など,ややこしい点がいくつかあるので注意が必要です.