みーのぺーじ

みーが趣味でやっているPCやソフトウェアについて.Python, Javascript, Processing, Unityなど.

node.jsでERR_HTTP2_HEADER_SINGLE_VALUE

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など,ややこしい点がいくつかあるので注意が必要です.