85744
# 環境

  * Chrome 97.0.4692.71（Official Build） （64 ビット）
  * Firefox 95.0.2 (64-bit)

# HTTPのHostリクエストヘッダについて

以下のサイトを読み、HTTPのHostリクエストヘッダはHTTP/1.1では必須であることを理解しました。  
<https://www.tohoho-web.com/ex/http.htm>

Chromeで <https://example.com/> にアクセスしたところ、リクエストヘッダにHostはありませんでした。  
[![Chromeのネットワーク](https://i.stack.imgur.com/thswz.png)](https://i.stack.imgur.com/thswz.png)

Firefoxで <https://example.com/> にアクセスすると、リクエストヘッダにHostはありました。  
[![Firefox](https://i.stack.imgur.com/QfQWz.png)](https://i.stack.imgur.com/QfQWz.png)

# 質問

Chromeで <https://example.com/> にアクセスしたときには、なぜHostリクエストヘッダが付与されないのでしょうか？  
<https://example.com/> はHTTP/2で通信していました。  
HTTP/2ではHostリクエストヘッダはオプショナルのでしょうか？  
`http2 host header`などのワードでGoogle検索してみましたが、Hostヘッダが必須なのかどうかが分かりませんでした。

<http://developer.hatena.ne.jp/>
にChromeでアクセスする（HTTP/1.1）と、Hostリクエストヘッダが付与されていました。  
[![Chromeでdeveloper.hatena.ne.jpにアクセスしたときの通信](https://i.stack.imgur.com/pGiwl.png)](https://i.stack.imgur.com/pGiwl.png)
CC BY-SA 4.0
2022-01-16T08:37:53.043
85730
2022-01-16T23:13:21.103
19524
question
http
HTTP/1ではHostリクエストヘッダは必須ですが、HTTP/2ではオプショナルなのでしょうか？
> Chromeで <https://example.com/> にアクセスしたときには、なぜHostリクエストヘッダが付与されないのでしょうか？  
>  <https://example.com/> はHTTP/2で通信していました。  
>  HTTP/2ではHostリクエストヘッダはオプショナルのでしょうか？

HTTP/2では、`HOST`リクエストヘッダの代わりに`:authority`疑似ヘッダを使います。

[rfc7540
section-8.1.2.3](https://datatracker.ietf.org/doc/html/rfc7540#section-8.1.2.3)

> Clients that generate HTTP/2 requests directly SHOULD use the ":authority"
> pseudo-header field instead of the Host header field.

１枚目のスクリーンショットをみると、`:authority`で`example.com`が指定されています。
CC BY-SA 4.0
2022-01-16T10:59:04.147
85736
2022-01-16T11:10:10.230
2022-01-16T11:10:10.230
4982
4982
85730
answer
> HTTP/2では、「:authority疑似ヘッダがあればHostヘッダは必須ではない」ということでしょうか？

Hostヘッダは「必須ではない」のではなく、「推奨されていない」と理解しています。

先のRFCを再掲します。

[rfc7540
section-8.1.2.3](https://datatracker.ietf.org/doc/html/rfc7540#section-8.1.2.3)

> Clients that generate HTTP/2 requests directly SHOULD use the ":authority"
> pseudo-header field instead of the Host header field.

訳

> HTTP/2リクエストを直接生成するクライアントは、Hostヘッダーフィールドの代わりに ":authority" 擬似ヘッダーフィールドを使用
> **すべきである** 。

この仕様は`SHOULD`なので、Requirement Levelは「推奨」です。

[rfc2119](https://datatracker.ietf.org/doc/html/rfc2119#section-3)

> SHOULD This word, or the adjective "RECOMMENDED", mean that there may exist
> valid reasons in particular circumstances to ignore a particular item, but
> the full implications must be understood and carefully weighed before
> choosing a different course.

以上から、私は次のように理解しています。

  * HTTP/2では、`:authority`疑似ヘッダの利用が推奨される
  * Hostヘッダの利用は禁止されてはいないが、`:authority`疑似ヘッダの利用が推奨される以上、原則使うべきではない
CC BY-SA 4.0
2022-01-16T23:13:21.103
85744
2022-01-16T23:13:21.103
4982
85730
answer