[2] [DFN[[RUBYB[接続エラー]@en[connection error]]]]は、
[[HTTP/2接続]]全体に影響するエラーです [SRC[>>1]]。
[[フレーム]]層の処理ができなくなったり、[[接続]]の状態を壊したりします [SRC[>>4]]。

* 仕様書

[REFS[
- [1] [CITE@en[RFC 7540 - Hypertext Transfer Protocol Version 2 (HTTP/2)]] ([TIME[2015-05-15 10:14:54 +09:00]] 版) <https://tools.ietf.org/html/rfc7540#section-2.2>
- [9] [CITE@en[RFC 7540 - Hypertext Transfer Protocol Version 2 (HTTP/2)]] ([TIME[2015-05-15 10:14:54 +09:00]] 版) <https://tools.ietf.org/html/rfc7540#section-3.5>
- [4] '''[CITE@en[RFC 7540 - Hypertext Transfer Protocol Version 2 (HTTP/2)]] ([TIME[2015-05-15 10:14:54 +09:00]] 版) <https://tools.ietf.org/html/rfc7540#section-5.4.1>'''
]REFS]

* 文脈

[3] 次のエラーは[[接続エラー]]となることがあります。
[FIG(list short)[
- [CODE[[[COMPRESSION_ERROR]]]]
- [CODE[[[ENHANCE_YOUR_CALM]]]]
- [CODE[[[FLOW_CONTROL_ERROR]]]]
- [CODE[[[FRAME_SIZE_ERROR]]]]
- [CODE(HTTP)@en[[[INADEQUATE_SECURITY]]]]
- [CODE[[[PROTOCOL_ERROR]]]]
- [CODE[[[SETTINGS_TIMEOUT]]]]
- [CODE[[[STREAM_CLOSED]]]]
]FIG]

;; [8] [[エンドポイント]]はいつでも[[接続]]を閉じることができます。
特に[[ストリームエラー]]を[[接続エラー]]として扱うこともできます。 [SRC[>>4]]

;; [12] >>11 に [[JSON]] 形式の一覧データファイルがあります。
[REFS[
- [11] [CITE@en[data-web-defs/http-frames.txt at master · manakai/data-web-defs]] ([TIME[2015-05-28 00:33:14 +09:00]] 版) <https://github.com/manakai/data-web-defs/blob/master/doc/http-frames.txt>
]REFS]

* 処理

[5] [[接続エラー]]となった[[エンドポイント]]は、
まず [CODE[[[GOAWAY]]]] [[フレーム]]を送信する[['''べきです''']] [SRC[>>4]]。
[FIG(list members)[
[FIGCAPTION[
[CODE[[[GOAWAY]]]] [[フレーム]]
]FIGCAPTION]
:[[ストリーム識別子]]:[[peer]] から最後に[[受信]]に成功した[[ストリーム]]の[[ストリーム識別子]]
:[[誤り符号]]:接続を終える理由
]FIG]

;; [7] これはできるだけ[[接続]]終了の理由を [[peer]] に伝えようとするものですが、
[[peer]] が受信する保証はありません [SRC[>>4]]。

[10] ただし[[接続序文]]が非妥当だった場合の[[接続エラー]] 
[CODE(HTTP)@en[[[PROTOCOL_ERROR]]]] は、相手が [[HTTP/2]]
でない可能性が高いため、 [CODE(HTTP)@en[[[GOAWAY]]]]
[[フレーム]]を送信しなくて構いません [SRC[>>9]]。

[6] その送信後、 [[TCP接続]]を閉じなければ[['''なりません''']] [SRC[>>4]]。