| ã€ã³ã¿ãŒããããšã³ãžãã¢ãªã³ã°ã¿ã¹ã¯ãã©ãŒã¹ (IETF) | M. Bishop, ç·šéè |
| Request for Comments: 9114 | Akamai |
| ã«ããŽãª: æšæºåãã©ã㯠| 2022幎6æ |
| ISSN: 2070-1721 |
HTTP/3
èŠçŽ
QUIC ãã©ã³ã¹ããŒããããã³ã«ã¯ãã¹ããªãŒã å€éåãã¹ããªãŒã ããšã®ãããŒå¶åŸ¡ãäœé å»¶ã®æ¥ç¶ç¢ºç«ãªã©ãHTTP ã®ãã©ã³ã¹ããŒããšããŠæãŸããããã€ãã®æ©èœãåããŠããŸããæ¬æžã¯ QUIC äžã§ã® HTTP ã»ãã³ãã£ã¯ã¹ã®ãããã³ã°ãèšè¿°ããŸããæ¬æžã¯ãŸããQUIC ã«å å«ããã HTTP/2 ã®æ©èœãç¹å®ããHTTP/2 ã®æ¡åŒµã HTTP/3 ã«ç§»æ€ããæ¹æ³ã説æããŸãã
ãã®ã¡ã¢ã®ã¹ããŒã¿ã¹
ããã¯ã€ã³ã¿ãŒãããæšæºãã©ãã¯ã®ææžã§ãã
ãã®ææžã¯ã€ã³ã¿ãŒããããšã³ãžãã¢ãªã³ã°ã¿ã¹ã¯ãã©ãŒã¹ (IETF) ã®ææç©ã§ããIETF ã³ãã¥ããã£ã®ã³ã³ã»ã³ãµã¹ã衚ããŠããŸããå ¬é審æ»ãåããã€ã³ã¿ãŒããããšã³ãžãã¢ãªã³ã°æå°ã°ã«ãŒã (IESG) ã«ãã£ãŠå ¬éãæ¿èªãããŠããŸããã€ã³ã¿ãŒãããæšæºã«é¢ãã詳现㯠RFC 7841 ã®ã»ã¯ã·ã§ã³ 2 ãåç §ããŠãã ããã
ãã®ææžã®çŸåšã®ç¶æ ãèšæ£æ å ± (errata)ãããã³ãã£ãŒãããã¯ã®æäŸæ¹æ³ã«é¢ããæ å ±ã¯ https://www.rfc-editor.org/info/rfc9114 ã§å ¥æã§ããŸãã
Copyright Notice
Copyright (c) 2022 IETF Trust and the persons identified as the document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Revised BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Revised BSD License.
- 1. ã¯ããã«
- 2. HTTP/3 ãããã³ã«æŠèŠ
- 3. æ¥ç¶ã®èšå®ãšç®¡ç
- 4. HTTP/3 ã«ããã HTTP ã»ãã³ãã£ã¯ã¹ã®è¡šçŸ
- 5. æ¥ç¶ã®çµäº
- 6. ã¹ããªãŒã ã®ãããã³ã°ãšäœ¿çš
- 7. HTTP ãã¬ãŒãã³ã°å±€
- 8. ãšã©ãŒåŠç
- 9. HTTP/3 ãžã®æ¡åŒµ
- 10. ã»ãã¥ãªãã£äžã®èæ
®äºé
- 10.1. ãµãŒããŒæš©é
- 10.2. ãããã³ã«éæ»æ
- 10.3. äžéè ã«ãã»ã«åæ»æ
- 10.4. ããã·ã¥ãããå¿çã®ãã£ãã·ã¥å¯èœæ§
- 10.5. ãµãŒãã¹æåŠïŒDoSïŒã«é¢ããèæ ®äºé
- 10.6. å§çž®ã®äœ¿çš
- 10.7. ããã£ã³ã°ãšãã©ãã£ãã¯è§£æ
- 10.8. ãã¬ãŒã è§£æ
- 10.9. æ©æããŒã¿
- 10.10. ç§»è¡
- 10.11. ãã©ã€ãã·ãŒã«é¢ããèæ ®äºé
- 11. IANAã«é¢ããèæ ®äºé
- 12. åèæç®
- ä»é² A. HTTP/2ããã®ç§»è¡ã«é¢ããèæ ®äºé
- è¬èŸ
- 玢åŒ
- èè ã®é£çµ¡å
1. ã¯ããã«
HTTP ã»ãã³ãã£ã¯ã¹ ([HTTP]) ã¯ãã€ã³ã¿ãŒãããäžã®å¹ åºããµãŒãã¹ã§äœ¿çšãããŸãããããã®ã»ãã³ãã£ã¯ã¹ã¯äž»ã« HTTP/1.1 ãš HTTP/2 ã§å©çšãããŠããŸãããHTTP/1.1 ã¯ããŸããŸãªãã©ã³ã¹ããŒãããã³ã»ãã·ã§ã³å±€äžã§äœ¿çšãããŠããäžæ¹ãHTTP/2 ã¯äž»ã« TLS over TCP äžã§äœ¿çšãããŠããŸãããHTTP/3 ã¯æ°ãããã©ã³ã¹ããŒããããã³ã«ã§ãã QUIC äžã§åãã»ãã³ãã£ã¯ã¹ããµããŒãããŸãã
1.1. HTTP ã®ä»¥åã®ããŒãžã§ã³
HTTP/1.1 ([HTTP/1.1]) ã¯ã空çœã§åºåãããããã¹ããã£ãŒã«ããçšã㊠HTTP ã¡ãã»ãŒãžãäŒéããŸãããããã®äº€æã¯äººéãèªã¿ãããäžæ¹ã§ãã¡ãã»ãŒãžåœ¢åŒã«ç©ºçœãçšããããšã¯ããŒã¹ã®è€éæ§ãšããªã¢ã³ãæåã«å¯Ÿããé床ã®å¯å®¹ããæããŸãã
HTTP/1.1 ã¯å€éåã¬ã€ã€ãŒãå«ãŸãªããããè€æ°ã® TCP æ¥ç¶ã䞊åã«ãªã¯ãšã¹ããåŠçããããã«çšããããããšããããããŸããããããTCP ã¯è€æ°æ¥ç¶éã§èŒ»èŒ³å¶åŸ¡ãå ±æããªããããããã¯èŒ»èŒ³å¶åŸ¡ãšãããã¯ãŒã¯å¹çã«æªåœ±é¿ãåãŒããŸãã
HTTP/2 ([HTTP/2]) ã¯ããã©ã³ã¹ããŒãå±€ã倿Žããã«ã¬ã€ãã³ã·ãæ¹åããããã«ãã€ããªãã¬ãŒãã³ã°ãšå€éåã¬ã€ã€ãŒãå°å ¥ããŸãããããããHTTP/2 ã®å€éåã®äžŠåæ§ã TCP ã®æå€±å埩ã¡ã«ããºã ã«èŠããªãããããã±ããã®åªå€±ãé åºã®ä¹±ããçºçãããšããã®æå€±ãã±ããã«çŽæ¥åœ±é¿ãåããŠããªããã©ã³ã¶ã¯ã·ã§ã³ã§ãã£ãŠãã¢ã¯ãã£ããªãã¹ãŠã®ãã©ã³ã¶ã¯ã·ã§ã³ãåæ»ããããšã«ãªããŸãã
1.2. QUIC ãžã®å§è²
QUIC ãã©ã³ã¹ããŒããããã³ã«ã¯ãHTTP/2 ãã¬ãŒãã³ã°å±€ãæäŸãããã®ãšé¡äŒŒããã¹ããªãŒã å€éåããã³ã¹ããªãŒã ããšã®ãããŒå¶åŸ¡ãçµã¿èŸŒã¿ãŸããã¹ããªãŒã ã¬ãã«ã§ã®ä¿¡é Œæ§ãšæ¥ç¶å šäœã§ã®èŒ»èŒ³å¶åŸ¡ãæäŸããããšã«ãããQUIC 㯠TCP ãããã³ã°ãšæ¯èŒã㊠HTTP ã®æ§èœãæ¹åããèœåãæã¡ãŸããQUIC ã¯ãŸããã©ã³ã¹ããŒã局㧠TLS 1.3 ([TLS]) ãçµã¿èŸŒã¿ãTCP äžã§ TLS ãåäœãããå Žåãšåçã®æ©å¯æ§ãšå®å šæ§ãæäŸãã€ã€ãTCP Fast Open ([TFO]) ã«ããæ¥ç¶ç¢ºç«é å»¶ã®æ¹åãæäŸããŸãã
æ¬æžã¯ HTTP/3 ãå®çŸ©ããŸãïŒQUIC ãã©ã³ã¹ããŒããããã³ã«äžã§ã® HTTP ã»ãã³ãã£ã¯ã¹ã®ãããã³ã°ã§ãããHTTP/2 ã®èšèšã倧ãã«èžè¥²ããŠããŸããHTTP/3 ã¯ããŒã¿ã®æ©å¯æ§ããã³å®å šæ§ä¿è·ããã¢èªèšŒãããã³ã¹ããªãŒã ããšã«é åºéãã§ã®ä¿¡é Œã§ããé ä¿¡ãæäŸããããã« QUIC ã«äŸåããŸããã¹ããªãŒã ã®ã©ã€ãã¿ã€ã ããããŒå¶åŸ¡ã®åé¡ã QUIC ã«å§è²ãã€ã€ãåã¹ããªãŒã äžã§ HTTP/2 ã®ãã¬ãŒãã³ã°ã«é¡äŒŒãããã€ããªãã¬ãŒãã³ã°ã䜿çšããŸããããã€ãã® HTTP/2 æ©èœã¯ QUIC ã«å å«ãããä»ã®æ©èœã¯ QUIC äžã«å®è£ ãããŸãã
QUIC 㯠[QUIC-TRANSPORT] ã«èšè¿°ãããŠããŸããHTTP/2 ã®å®å šãªèšè¿°ã«ã€ããŠã¯ [HTTP/2] ãåç §ããŠãã ããã
2. HTTP/3 ãããã³ã«æŠèŠ
HTTP/3 ã¯ãQUIC ãã©ã³ã¹ããŒããããã³ã«ãš HTTP/2 ã«é¡äŒŒããå éšãã¬ãŒãã³ã°å±€ãçšã㊠HTTP ã»ãã³ãã£ã¯ã¹ã®ããã®ãã©ã³ã¹ããŒããæäŸããŸãã
ã¯ã©ã€ã¢ã³ããç¹å®ã®ãšã³ããã€ã³ãã« HTTP/3 ãµãŒããååšããããšãç¥ããšãQUIC æ¥ç¶ãéããŸããQUIC ã¯ãããã³ã«ããŽã·ãšãŒã·ã§ã³ãã¹ããªãŒã ããŒã¹ã®å€éåãããã³ãããŒå¶åŸ¡ãæäŸããŸããHTTP/3 ãšã³ããã€ã³ãã®æ€åºã¯ Section 3.1 ã«èšè¿°ãããŠããŸãã
åã¹ããªãŒã å ã§ãHTTP/3 éä¿¡ã®åºæ¬åäœã¯ãã¬ãŒã ã§ãïŒSection 7.2ïŒãåãã¬ãŒã ã¿ã€ãã¯ç°ãªãç®çãæã¡ãŸããäŸãã°ãHEADERS ããã³ DATA ãã¬ãŒã 㯠HTTP ãªã¯ãšã¹ããšã¬ã¹ãã³ã¹ã®åºç€ã圢æããŸãïŒSection 4.1ïŒãæ¥ç¶å šäœã«é©çšããããã¬ãŒã ã¯å°çšã® control stream äžã§äŒéãããŸãã
ãªã¯ãšã¹ãã®å€éå㯠QUIC ã®ã¹ããªãŒã æœè±¡ãçšããŠè¡ãããŸãããã㯠Section 2 ãš [QUIC-TRANSPORT] ã«èšè¿°ãããŠããŸããåãªã¯ãšã¹ãã»ã¬ã¹ãã³ã¹å¯Ÿã¯åäžã® QUIC ã¹ããªãŒã ãæ¶è²»ããŸããã¹ããªãŒã ã¯äºãã«ç¬ç«ããŠãããããããã¹ããªãŒã ããããã¯ãããããã±ããæå€±ãçºçããŠããä»ã®ã¹ããªãŒã ã®é²è¡ã劚ããããšã¯ãããŸããã
ãµãŒãããã·ã¥ã¯ HTTP/2 ([HTTP/2]) ã§å°å ¥ãããã€ã³ã¿ã©ã¯ã·ã§ã³ã¢ãŒãã§ããããµãŒããã¯ã©ã€ã¢ã³ããè¡ãã§ããããªã¯ãšã¹ããäºåã«æ³å®ããŠãªã¯ãšã¹ãã»ã¬ã¹ãã³ã¹äº€æãã¯ã©ã€ã¢ã³ãã«ããã·ã¥ããããšãèš±ããŸããããã¯ãããã¯ãŒã¯äœ¿çšéãšæœåšçãªã¬ã€ãã³ã·ççž®ããã¬ãŒããªãããŸãããµãŒãããã·ã¥ã管çããããã«ãPUSH_PROMISE (PUSH_PROMISE), MAX_PUSH_ID (MAX_PUSH_ID), CANCEL_PUSH (CANCEL_PUSH) ãªã©ã®è€æ°ã® HTTP/3 ãã¬ãŒã ãçšããããŸãã
HTTP/2 ãšåæ§ã«ãèŠæ±ããã³å¿çãã£ãŒã«ãã¯éä¿¡ã®ããã«å§çž®ãããŸããHPACK ([HPACK]) ã¯å§çž®ããããã£ãŒã«ãã»ã¯ã·ã§ã³ã®é åºéãã®éä¿¡ã«äŸåããŠããïŒãã㯠QUIC ãä¿èšŒããªãïŒããã®ãã HTTP/3 ã§ã¯ HPACK ã QPACK ([QPACK]) ã«çœ®ãæããŸããQPACK ã¯ãã£ãŒã«ãããŒãã«ç¶æ ã倿Žããã³è¿œè·¡ããããã®å¥åã®äžæ¹åã¹ããªãŒã ã䜿çšãããšã³ã³ãŒãããããã£ãŒã«ãã»ã¯ã·ã§ã³ã¯ããŒãã«ã®ç¶æ ãåç §ããã®ã¿ã§ããã倿ŽããŸããã
2.1. ææžã®æ§æ
以äžã®ã»ã¯ã·ã§ã³ã¯ HTTP/3 æ¥ç¶ã®ã©ã€ããµã€ã¯ã«ã®è©³çŽ°ãªæŠèŠãæäŸããŸãïŒ
- "Connection Setup and Management" (Section 3) 㯠HTTP/3 ãšã³ããã€ã³ãã®æ€åºæ¹æ³ãš HTTP/3 æ¥ç¶ã®ç¢ºç«æ¹æ³ãæ±ããŸãã
- "Expressing HTTP Semantics in HTTP/3" (Section 4) ã¯ãã¬ãŒã ãçšã㊠HTTP ã»ãã³ãã£ã¯ã¹ãã©ã®ããã«è¡šçŸããããã説æããŸãã
- "Connection Closure" (Section 5) 㯠HTTP/3 æ¥ç¶ãã©ã®ããã«åªé ã«ãŸãã¯çªç¶çµäºããããã説æããŸãã
ã¯ã€ã€ãããã³ã«ã®è©³çްãšãã©ã³ã¹ããŒããšã®çžäºäœçšã¯åŸç¶ã®ã»ã¯ã·ã§ã³ã§èª¬æãããŸãïŒ
- "Stream Mapping and Usage" (Section 6) 㯠QUIC ã¹ããªãŒã ã®äœ¿ç𿹿³ã説æããŸãã
- "HTTP Framing Layer" (Section 7) ã¯ã»ãšãã©ã®ã¹ããªãŒã ã§äœ¿çšããããã¬ãŒã ã説æããŸãã
- "Error Handling" (Section 8) ã¯ãç¹å®ã®ã¹ããªãŒã äžãŸãã¯æ¥ç¶å šäœã«å¯ŸããŠãšã©ãŒæ¡ä»¶ãã©ã®ããã«åŠçãã衚çŸããããã説æããŸãã
远å ã®ãªãœãŒã¹ã¯æçµã»ã¯ã·ã§ã³ã§æäŸãããŸãïŒ
- "Extensions to HTTP/3" (Section 9) ã¯å°æ¥ã®ææžã§ã©ã®ããã«æ°ããæ©èœã远å ã§ãããã説æããŸãã
- HTTP/2 ãš HTTP/3 ã®ããè©³çŽ°ãªæ¯èŒã¯ Appendix A ã«ãããŸãã
2.2. æ £äŸãšçšèª
ãã®ææžã§ã®ããŒã¯ãŒã "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", ããã³ "OPTIONAL" ã¯ããããããã¹ãŠå€§æåã§çŸããå Žåã«éããBCP 14 ã«èšèŒãããŠããããã«è§£éãããŸãã[RFC2119] [RFC8174]
ãã®ææžã¯å¯å€é·æŽæ°ãšã³ã³ãŒãã£ã³ã°ã [QUIC-TRANSPORT] ãã䜿çšããŸãã
以äžã®çšèªã䜿çšãããŸãïŒ
- abort:
-
æ¥ç¶ãŸãã¯ã¹ããªãŒã ã®çªç¶ã®çµäºããšã©ãŒæ¡ä»¶ã«ããå ŽåããããŸãã
- client:
-
HTTP/3 æ¥ç¶ãéå§ãããšã³ããã€ã³ããã¯ã©ã€ã¢ã³ã㯠HTTP ãªã¯ãšã¹ããéä¿¡ããHTTP ã¬ã¹ãã³ã¹ãåä¿¡ããŸãã
- connection:
-
QUIC ããã©ã³ã¹ããŒããããã³ã«ãšããŠäœ¿çšãããäºã€ã®ãšã³ããã€ã³ãéã®ãã©ã³ã¹ããŒãå±€ã®æ¥ç¶ã
- connection error :
-
HTTP/3 æ¥ç¶å šäœã«åœ±é¿ãäžãããšã©ãŒã
- endpoint:
-
æ¥ç¶ã®ã¯ã©ã€ã¢ã³ããŸãã¯ãµãŒãã®ããããã
- frame:
-
HTTP/3 ã«ãããã¹ããªãŒã äžã®éä¿¡ã®æå°åäœã§ãããããšãã¬ãŒã ã¿ã€ãã«åŸã£ãŠæ§é åãããå¯å€é·ã®ãã€ãåããæããŸãããã®ææžãš [QUIC-TRANSPORT] ã®äž¡æ¹ã«ãframeããšåŒã°ãããããã³ã«èŠçŽ ãååšããŸãã[QUIC-TRANSPORT] ããã®ãã¬ãŒã ãåç §ãããå Žåããã¬ãŒã å㯠"QUIC" ã§å眮ãããŸããäŸãã° "QUIC CONNECTION_CLOSE frames" ã®ããã«ãªããŸãããã®å眮ããªãåç §ã¯ Section 7.2 ã§å®çŸ©ããããã¬ãŒã ãæããŸãã
- HTTP/3 connection:
-
åæãããã¢ããªã±ãŒã·ã§ã³ãããã³ã«ã HTTP/3 ã§ãã QUIC æ¥ç¶ã
- peer:
-
ãšã³ããã€ã³ããç¹å®ã®ãšã³ããã€ã³ãã«ã€ããŠè°è«ããéã"peer" ã¯è°è«ã®äž»äœã«å¯ŸããŠãªã¢ãŒãã«ãããšã³ããã€ã³ããæããŸãã
- receiver:
-
ãã¬ãŒã ãåä¿¡ããŠãããšã³ããã€ã³ãã
- sender:
-
ãã¬ãŒã ãéä¿¡ããŠãããšã³ããã€ã³ãã
- server:
-
HTTP/3 æ¥ç¶ãåãå ¥ãããšã³ããã€ã³ãããµãŒã㯠HTTP ãªã¯ãšã¹ããåä¿¡ããHTTP ã¬ã¹ãã³ã¹ãéä¿¡ããŸãã
- stream:
-
QUIC ãã©ã³ã¹ããŒããæäŸããåæ¹åãŸãã¯äžæ¹åã®ãã€ãã¹ããªãŒã ããã¹ãŠã®ã¹ããªãŒã 㯠HTTP/3 æ¥ç¶å ã§ãHTTP/3 ã¹ããªãŒã ããšèŠãªããŸãããHTTP/3 å ã§ã¯è€æ°ã®ã¹ããªãŒã ã¿ã€ããå®çŸ©ãããŠããŸãã
- stream error :
-
åã ã®ã¹ããªãŒã äžã®ã¢ããªã±ãŒã·ã§ã³ã¬ãã«ã®ãšã©ãŒã
"content" ãšããçšèªã¯ Section 6.4 ã® [HTTP] ã§å®çŸ©ãããŠããŸãã
æåŸã«ã"resource", "message", "user agent", "origin server", "gateway", "intermediary", "proxy", ããã³ "tunnel" ã®çšèªã¯ Section 3 ã® [HTTP] ã§å®çŸ©ãããŠããŸãã
æ¬æžã®ãã±ããå³ã¯ããã£ãŒã«ãã®é åºãšãµã€ãºã瀺ãããã« Section 1.3 ã®åœ¢åŒã䜿çšããŸãïŒåç §ïŒ[QUIC-TRANSPORT]ïŒã
3. æ¥ç¶ã®èšå®ãšç®¡ç
3.1. HTTP/3 ãšã³ããã€ã³ãã®æ€åº
HTTP ã¯ãæš©åšããã¬ã¹ãã³ã¹ïŒauthoritative responseïŒãã®æŠå¿µã«äŸåããŸãïŒããã¯ãã¿ãŒã²ãã URI ã«èå¥ããããªãªãžã³ãµãŒãã«ãã£ãŠïŒãŸãã¯ãã®æç€ºã§ïŒã¬ã¹ãã³ã¹ã¡ãã»ãŒãžãçæãããæç¹ã§ã®ã¿ãŒã²ãããªãœãŒã¹ã®ç¶æ ãèæ ®ããŠããã®ãªã¯ãšã¹ãã«å¯ŸããŠæãé©åã§ãããšå€æãããã¬ã¹ãã³ã¹ã§ããHTTP URI ã®æš©åšãããµãŒãã®äœçœ®ç¹å®ã¯ Section 4.3 ã® [HTTP] ã§è°è«ãããŠããŸãã
"https" ã¹ããŒã ã¯ãã¯ã©ã€ã¢ã³ãããã® URI ã® authority ã³ã³ããŒãã³ãã§èå¥ããããã¹ãã«å¯ŸããŠä¿¡é Œã§ãããšã¿ãªãèšŒææžã®ææãæš©éãšé¢é£ä»ããŸããTLS ãã³ãã·ã§ã€ã¯ã§ãµãŒãèšŒææžãåãåã£ãéãã¯ã©ã€ã¢ã³ã㯠Section 4.3.4 ã®ããã»ã¹ãçšããŠãã®èšŒææžã URI ã®ãªãªãžã³ãµãŒãã«å¯ŸããŠèš±å®¹ã§ãããããã§ããããšãæ€èšŒããªããã°ãªããŸãããããèšŒææžã URI ã®ãªãªãžã³ãµãŒãã«é¢ããŠæ€èšŒã§ããªãå Žåãã¯ã©ã€ã¢ã³ãã¯åœè©²ãµãŒãããã®ãªãªãžã³ã«å¯Ÿããæš©åšãããµãŒããšèŠãªããŠã¯ãªããŸããã
ã¯ã©ã€ã¢ã³ãã¯ããã¹ãèå¥åã IP ã¢ãã¬ã¹ã«è§£æ±ºããæå®ãããããŒããžã®ãã®ã¢ãã¬ã¹ã«å¯Ÿã㊠QUIC æ¥ç¶ã確ç«ãïŒäžèšã®ãµãŒãèšŒææžã®æ€èšŒãå«ãïŒããã®ä¿è·ãããæ¥ç¶äžã§åœè©² URI ãã¿ãŒã²ãããšãã HTTP/3 ãªã¯ãšã¹ãã¡ãã»ãŒãžããµãŒãã«éä¿¡ããããšã§ã"https" URI ã®ãªãœãŒã¹ãžã®ã¢ã¯ã»ã¹ã詊ã¿ãããšãã§ããŸãïŒãã®åäœã¯ MAY ã§ãïŒãHTTP/3 ãéžæããããã®ä»ã®ã¡ã«ããºã ã䜿çšãããªãéããããŒã¯ã³ "h3" 㯠TLS ãã³ãã·ã§ã€ã¯äžã® Application-Layer Protocol Negotiation (ALPN; åç § [RFC7301]) æ¡åŒµã§äœ¿çšãããŸãã
æ¥ç¶æ§ã®åé¡ïŒäŸïŒUDP ã®ãããã¯ïŒã¯ QUIC æ¥ç¶ã®ç¢ºç«å€±æãããããå¯èœæ§ããããããã¯ã©ã€ã¢ã³ãã¯ãã®å Žåã« TCP ããŒã¹ã® HTTP ã®äœ¿çšã詊ã¿ãã¹ãã§ãïŒSHOULDïŒã
ãµãŒãã¯ä»»æã® UDP ããŒãã§ HTTP/3 ãæäŸããŠãããïŒMAYïŒã代æ¿ãµãŒãã¹åºåã¯åžžã«æç€ºçãªããŒããå«ã¿ãURI ã¯æç€ºçããŒããã¹ããŒã ã«é¢é£ä»ããããããã©ã«ãããŒãã®ãããããå«ã¿ãŸãã
3.1.1. HTTP Alternative Services
HTTP ãªãªãžã³ã¯ Alt-Svc HTTP ã¬ã¹ãã³ã¹ããããã£ãŒã«ããŸã㯠HTTP/2 ã® ALTSVC ãã¬ãŒã ([ALTSVC]) ãéã㊠"h3" ALPN ããŒã¯ã³ã䜿çšããŠç䟡㮠HTTP/3 ãšã³ããã€ã³ãã®å¯çšæ§ãåºåããããšãã§ããŸãã
äŸãã°ããªãªãžã³ã¯ HTTP ã¬ã¹ãã³ã¹å ã§æ¬¡ã®ããããã£ãŒã«ããå«ããããšã«ãããåããã¹ãåã® UDP ããŒã 50781 ã§ HTTP/3 ãå©çšå¯èœã§ããããšã瀺ãããšãã§ããŸãïŒ
Alt-Svc: h3=":50781"
HTTP/3 ãµããŒãã瀺ã Alt-Svc ã¬ã³ãŒããåä¿¡ããã¯ã©ã€ã¢ã³ãã¯ã瀺ããããã¹ããšããŒãã«å¯Ÿã㊠QUIC æ¥ç¶ã®ç¢ºç«ã詊ã¿ãããšãã§ããŸãïŒMAYïŒïŒãã®æ¥ç¶ãæåããã°ãã¯ã©ã€ã¢ã³ãã¯æ¬æžã§èšè¿°ããããããã³ã°ãçšã㊠HTTP ãªã¯ãšã¹ããéä¿¡ã§ããŸãã
3.1.2. ä»ã®ã¹ããŒã
HTTP ã¯ãã©ã³ã¹ããŒããããã³ã«ããç¬ç«ããŠããŸããã"http" ã¹ããŒã ã¯æš©åšããæå®ãããããŒãã§ TCP æ¥ç¶ãåãå ¥ããèœåãšé¢é£ä»ããŸããHTTP/3 㯠TCP ã䜿çšããªãããã"http" URI ã§èå¥ããããªãœãŒã¹ã®æš©åšãããµãŒããžçŽæ¥ã¢ã¯ã»ã¹ããããã« HTTP/3 ã䜿çšããããšã¯ã§ããŸããããã ãã[ALTSVC] ã®ãããªãããã³ã«æ¡åŒµã¯ãæš©åšãããµãŒããä»ã®ãµãŒãã¹ïŒHTTP/3 ã§å°éå¯èœã§ãããããããªãïŒãèå¥ããããšãèš±ããŸãã
"https" ã§ãªãã¹ããŒã ã®ãªãªãžã³ã«å¯ŸããŠãªã¯ãšã¹ããè¡ãåã«ãã¯ã©ã€ã¢ã³ãã¯ãµãŒãããã®ã¹ããŒã ã§ã®æäŸãæãã§ããããšã確èªããªããã°ãªããŸããïŒMUSTïŒã"http" ã¹ããŒã ã®ãªãªãžã³ã«å¯ŸããŠãããéæããå®éšçæ¹æ³ã¯ [RFC8164] ã«èšè¿°ãããŠããŸããå°æ¥çã«ããŸããŸãªã¹ããŒã ã®ããã®ä»ã®ã¡ã«ããºã ãå®çŸ©ãããå¯èœæ§ããããŸãã
3.2. æ¥ç¶ã®ç¢ºç«
HTTP/3 ã¯åºç€ãšãªããã©ã³ã¹ããŒããšã㊠QUIC ããŒãžã§ã³ 1 ã«äŸåããŸããä»ã® QUIC ãã©ã³ã¹ããŒãããŒãžã§ã³ã HTTP/3 ãšå ±ã«äœ¿çšããããšã¯å°æ¥ã®ä»æ§ã§å®çŸ©ããããïŒMAYïŒã
QUIC ããŒãžã§ã³ 1 ã¯ãã³ãã·ã§ã€ã¯ãããã³ã«ãšã㊠TLS ããŒãžã§ã³ 1.3 以äžã䜿çšããŸããHTTP/3 ã¯ã©ã€ã¢ã³ã㯠TLS ãã³ãã·ã§ã€ã¯äžã«ãµãŒããžã®ã¿ãŒã²ãããã¹ãã瀺ãä»çµã¿ããµããŒãããªããã°ãªããŸããïŒMUSTïŒããµãŒãããã¡ã€ã³åã§èå¥ãããå ŽåïŒ[DNS-TERMS]ïŒãã¯ã©ã€ã¢ã³ã㯠Server Name Indication (SNI; [RFC6066]) TLS æ¡åŒµãéä¿¡ããªããã°ãªããŸããïŒMUSTïŒã代æ¿ã®ãã¹ãæç€ºã¡ã«ããºã ã䜿ãããªãéãã
QUIC æ¥ç¶ã®ç¢ºç«ã¯ [QUIC-TRANSPORT] ã«èšè¿°ãããŠããéãã§ããæ¥ç¶ç¢ºç«äžã«ãHTTP/3 ãµããŒã㯠TLS ãã³ãã·ã§ã€ã¯ã§ ALPN ããŒã¯ã³ "h3" ãéžæããããšã§ç€ºãããŸãããã®ä»ã®ã¢ããªã±ãŒã·ã§ã³å±€ãããã³ã«ã®ãµããŒããåããã³ãã·ã§ã€ã¯ã§æäŸãããããšãããåŸãŸãïŒMAYïŒã
ã³ã¢ QUIC ãããã³ã«ã«é¢ããæ¥ç¶ã¬ãã«ã®ãªãã·ã§ã³ã¯åæã®æå·ãã³ãã·ã§ã€ã¯ã§èšå®ãããŸãããHTTP/3 åºæã®èšå®ã¯ SETTINGS ãã¬ãŒã ã§äŒéãããŸããQUIC æ¥ç¶ã確ç«ãããåŸãåãšã³ããã€ã³ãã¯ããããã® HTTP control stream ã®åæãã¬ãŒã ãšã㊠SETTINGS ãã¬ãŒã ãéä¿¡ããªããã°ãªããŸããïŒMUSTïŒã
3.3. æ¥ç¶ã®åå©çš
HTTP/3 æ¥ç¶ã¯è€æ°ã®ãªã¯ãšã¹ãã«ããã£ãŠæç¶ããŸããæé«ã®ããã©ãŒãã³ã¹ã®ãããã¯ã©ã€ã¢ã³ãã¯è¿œå ã®ãµãŒããšã®éä¿¡ãäžèŠã§ãããšå€æããããŸã§ïŒäŸãã°ãŠãŒã¶ãç¹å®ã®ãŠã§ãããŒãžããé¢ãããšãïŒæ¥ç¶ãéããªãããšãæåŸ ãããŸãããŸãã¯ãµãŒããæ¥ç¶ãéãããŸã§ä¿æããŸãã
äžåºŠãµãŒããšã³ããã€ã³ããžã®æ¥ç¶ãååšãããšããã®æ¥ç¶ã¯è€æ°ã®ç°ãªã URI authority ã³ã³ããŒãã³ããæã€ãªã¯ãšã¹ãã«åå©çšãããããšããããŸãïŒMAYïŒãæ°ãããªãªãžã³ã®ããã«æ¢åæ¥ç¶ã䜿çšããã«ã¯ãã¯ã©ã€ã¢ã³ãã¯ãµãŒããæ°ãããªãªãžã³ã«æç€ºããèšŒææžã Section 4.3.4 ã®ããã»ã¹ãçšããŠæ€èšŒããªããã°ãªããŸããïŒMUSTïŒãããã¯ã¯ã©ã€ã¢ã³ãããµãŒãèšŒææžãšãã®èšŒææžãæ€èšŒããããã«å¿ èŠãªè¿œå æ å ±ãä¿æããå¿ èŠãããããšãæå³ããŸãïŒããããªãã¯ã©ã€ã¢ã³ãã¯æ¥ç¶ã远å ã®ãªãªãžã³ã§åå©çšããããšãã§ããŸããã
èšŒææžãäœããã®çç±ã§æ°ãããªãªãžã³ã«å¯ŸããŠåãå ¥ããããªãå Žåãæ¥ç¶ã¯åå©çšããŠã¯ãªããïŒMUST NOTïŒãæ°ãããªãªãžã³ã®ããã«æ°ããæ¥ç¶ã確ç«ãã¹ãã§ãïŒSHOULDïŒãèšŒææžã®æ€èšŒã倱æããçç±ããã®æ¥ç¶ã«é¢é£ä»ããããä»ã®ãªãªãžã³ã«ãåœãŠã¯ãŸãå¯èœæ§ãããå Žåãã¯ã©ã€ã¢ã³ãã¯ãããã®ãªãªãžã³ã«å¯ŸããŠããµãŒãèšŒææžãåæ€èšŒãã¹ãã§ãïŒSHOULDïŒãäŸãã°ãèšŒææžã®æ€èšŒãæå¹æéåãã倱å¹ã®ããã«å€±æããå Žåããã®èšŒææžãæš©é確ç«ã«äœ¿çšãããä»ã®ãã¹ãŠã®ãªãªãžã³ãç¡å¹ã«ããããããããŸããã
ã¯ã©ã€ã¢ã³ãã¯äžãããã IP ã¢ãã¬ã¹ãš UDP ããŒãã«å¯ŸããŠè€æ°ã® HTTP/3 æ¥ç¶ãéããŠã¯ãªããªãïŒSHOULD NOTïŒãããã§ IP ã¢ãã¬ã¹ãšããŒã㯠URIãéžæããã代æ¿ãµãŒãã¹ïŒ[ALTSVC]ïŒãèšå®ããããããã·ããŸãã¯ãããã®åå解決ã«ç±æ¥ããå¯èœæ§ããããŸããã¯ã©ã€ã¢ã³ãã¯ç°ãªããã©ã³ã¹ããŒãæã㯠TLS æ§æãçšããããšã§åã IP ã¢ãã¬ã¹ãš UDP ããŒãã«è€æ°ã® HTTP/3 æ¥ç¶ãéãããšãã§ããŸãïŒMAYïŒããåäžã®æ§æã§è€æ°ã®æ¥ç¶ãäœæããããšã¯é¿ããã¹ãã§ãïŒSHOULDïŒã
ãµãŒãã¯å¯èœãªéãé·ã HTTP/3 æ¥ç¶ãç¶æããããšã奚å±ãããŸãããå¿ èŠã«å¿ããŠã¢ã€ãã«æ¥ç¶ãçµäºããããšãèš±å¯ãããŸããããããã®ãšã³ããã€ã³ãã HTTP/3 æ¥ç¶ãéããããšãéžæããå Žåãçµäºãããšã³ããã€ã³ãã¯ãŸã GOAWAY ãã¬ãŒã ïŒSection 5.2ïŒãéä¿¡ããã¹ãã§ãïŒSHOULDïŒãããã«ããäž¡ãšã³ããã€ã³ãã¯ä»¥åã«éä¿¡ããããã¬ãŒã ãåŠçããããã©ããã確å®ã«å€æããå¿ èŠãªæ®äœæ¥ãåªé ã«å®äºãŸãã¯çµäºã§ããŸãã
ãµãŒããç¹å®ã®ãªãªãžã³ã«å¯ŸããŠã¯ã©ã€ã¢ã³ããæ¥ç¶ãåå©çšããããšãæãŸãªãå ŽåããµãŒãã¯ãªã¯ãšã¹ãã«å¯Ÿã㊠421 (Misdirected Request) ã¹ããŒã¿ã¹ã³ãŒããè¿ãããšã§ããã®ãªã¯ãšã¹ãã«å¯ŸããŠæš©åšããªãããšã瀺ãããšãã§ããŸãïŒè©³çŽ°ã¯ Section 7.4 ã® [HTTP] ãåç §ããŠãã ããã
4. HTTP/3 ã«ããã HTTP ã»ãã³ãã£ã¯ã¹ã®è¡šçŸ
4.1. HTTP ã¡ãã»ãŒãžã®ãã¬ãŒãã³ã°
ã¯ã©ã€ã¢ã³ã㯠ãªã¯ãšã¹ãã¹ããªãŒã äžã§ HTTP ãªã¯ãšã¹ããéä¿¡ããŸããããã¯ã¯ã©ã€ã¢ã³ããéå§ããåæ¹åã® QUIC ã¹ããªãŒã ã§ãïŒSection 6.1 ãåç §ïŒãã¯ã©ã€ã¢ã³ãã¯ç¹å®ã®ã¹ããªãŒã äžã§åäžã®ãªã¯ãšã¹ãã®ã¿ãéä¿¡ããªããã°ãªããŸããïŒMUSTïŒããµãŒãã¯åãã¹ããªãŒã äžã§ 0 å以äžã®äžéç㪠HTTP ã¬ã¹ãã³ã¹ãéä¿¡ãããã®åŸã«åäžã®æçµ HTTP ã¬ã¹ãã³ã¹ãéä¿¡ããŸããäžéå¿çãšæçµå¿çã®èª¬æã¯ Section 15 ã® [HTTP] ãåç §ããŠãã ããã
ããã·ã¥ãããå¿çã¯ãµãŒããéå§ããäžæ¹åã® QUIC ã¹ããªãŒã äžã§éä¿¡ãããŸãïŒSection 6.2.2 ãåç §ïŒããµãŒãã¯éåžžã®å¿çãšåæ§ã«ã0 å以äžã®äžéç㪠HTTP ã¬ã¹ãã³ã¹ã«ç¶ããŠåäžã®æçµ HTTP ã¬ã¹ãã³ã¹ãéä¿¡ããŸããããã·ã¥ã®è©³çŽ°ã¯ Section 4.6 ãåç §ããŠãã ããã
ããã¹ããªãŒã äžã§è€æ°ã®ãªã¯ãšã¹ããåä¿¡ããå Žåããããã¯æçµ HTTP ã¬ã¹ãã³ã¹ã®åŸã«è¿œå ã® HTTP ã¬ã¹ãã³ã¹ãåä¿¡ããå Žåã¯ãããã äžæ£ïŒmalformedïŒ ãšããŠæ±ããªããã°ãªããŸããïŒMUSTïŒã
HTTP ã¡ãã»ãŒãžïŒãªã¯ãšã¹ããŸãã¯ã¬ã¹ãã³ã¹ïŒã¯æ¬¡ã®èŠçŽ ã§æ§æãããŸãïŒ
- ã¡ãã»ãŒãžå¶åŸ¡ããŒã¿ãå«ããããã»ã¯ã·ã§ã³ãåäžã® HEADERS ãã¬ãŒã ãšããŠéä¿¡ããããšã
- ïŒååšããå ŽåïŒã³ã³ãã³ããäžé£ã® DATA ãã¬ãŒã ãšããŠéä¿¡ããããšïŒä»»æïŒãããã³
- ïŒååšããå ŽåïŒãã¬ãŒã©ã»ã¯ã·ã§ã³ãåäžã® HEADERS ãã¬ãŒã ãšããŠéä¿¡ããããšïŒä»»æïŒã
ãããããã³ãã¬ãŒã©ã»ã¯ã·ã§ã³ã®èª¬æã¯ Section 6.3 ããã³ Section 6.5 ã® [HTTP] ãåç §ããŠãã ãããã³ã³ãã³ã㯠Section 6.4 ã«èšè¿°ãããŠããŸãã
ãã¬ãŒã ã®äžæ£ãªé åºã®åä¿¡ã¯ãæ¥ç¶ãšã©ãŒ ãšããŠæ±ããªããã°ãªããŸããïŒMUSTïŒãç¹ã«ããããªã HEADERS ãã¬ãŒã ã®åã« DATA ãã¬ãŒã ãæ¥ãããšããŸãã¯ãã¬ãŒãªã³ã°ã® HEADERS ãã¬ãŒã ã®åŸã« HEADERS ã DATA ãã¬ãŒã ãæ¥ãããšã¯ç¡å¹ãšèŠãªãããŸããä»ã®ãã¬ãŒã ã¿ã€ããç¹ã«äžæãªãã¬ãŒã ã¿ã€ãã«ã€ããŠã¯ããããã®èŠåã«åŸã£ãŠèš±å®¹ãããå ŽåããããŸãã詳现㯠Section 9 ãåç §ããŠãã ããã
ãµãŒãã¯å¿çã¡ãã»ãŒãžã®ãã¬ãŒã ã®åãåŸããŸãã¯ããããšã€ã³ã¿ãŒãªãŒãã㊠1 å以äžã® PUSH_PROMISE ãã¬ãŒã ãéä¿¡ããããšãã§ããŸãïŒMAYïŒããããã® PUSH_PROMISE ãã¬ãŒã ã¯å¿çã®äžéšã§ã¯ãããŸããã詳现㯠Section 4.6 ãåç §ããŠãã ãããPUSH_PROMISE ãã¬ãŒã 㯠ããã·ã¥ã¹ããªãŒã äžã§èš±å¯ãããŠããŸãããããããã·ã¥ãããå¿çã PUSH_PROMISE ãã¬ãŒã ãå«ãå Žåããã㯠æ¥ç¶ãšã©ãŒ ãšããŠæ±ãããã¿ã€ã㯠H3_FRAME_UNEXPECTED ã§ãªããã°ãªããŸããïŒMUSTïŒã
äžæãªã¿ã€ãã®ãã¬ãŒã ïŒSection 9 ãå«ãïŒãããã³äºçŽããããã¬ãŒã ïŒSection 7.2.8ïŒã¯ãèŠæ±ãŸã㯠ããã·ã¥ã¹ããªãŒã äžã§ãããã§èª¬æãããä»ã®ãã¬ãŒã ã®ååŸãŸãã¯ã€ã³ã¿ãŒãªãŒãããŠéä¿¡ãããããšãã§ããŸãïŒMAYïŒã
HEADERS ããã³ PUSH_PROMISE ãã¬ãŒã 㯠QPACK åçããŒãã«ãžã®æŽæ°ãåç §ããããšããããŸãããããã®æŽæ°ã¯ã¡ãã»ãŒãžäº€æã®çŽæ¥ã®äžéšã§ã¯ãããŸããããã¡ãã»ãŒãžãæ¶è²»ããåã«åä¿¡ããã³åŠçãããªããã°ãªããŸããã詳现㯠Section 4.2 ãåç §ããŠãã ããã
転é笊å·åïŒTransfer codingsïŒSection 7 ã®èª¬æïŒã¯ HTTP/3 ã§ã¯å®çŸ©ãããŠããŸãããTransfer-Encoding ããããã£ãŒã«ãã¯äœ¿çšããŠã¯ãªããŸããïŒMUST NOTïŒã
å¿çãè€æ°ã®ã¡ãã»ãŒãžã§æ§æããåŸãã®ã¯ãåäžã®ãªã¯ãšã¹ãã«å¯Ÿã㊠1 å以äžã®äžéå¿çïŒ1xxïŒSection 15.2 ãåç §ïŒãæçµå¿çã«å è¡ããå Žåã«éãããŸãïŒãã®å Žåã«ã®ã¿ïŒãäžéå¿çã¯ã³ã³ãã³ãããã¬ãŒã©ã»ã¯ã·ã§ã³ãå«ã¿ãŸããïŒMAY ã¯ããã§ã¯äžèŠïŒã
HTTP ã®ãªã¯ãšã¹ã/ã¬ã¹ãã³ã¹äº€æã¯ã¯ã©ã€ã¢ã³ãéå§ã®åæ¹å QUIC ã¹ããªãŒã ãå®å šã«æ¶è²»ããŸãããªã¯ãšã¹ããéä¿¡ããåŸãã¯ã©ã€ã¢ã³ãã¯éä¿¡åŽã®ã¹ããªãŒã ãéããªããã°ãªããŸããïŒMUSTïŒãCONNECT ã¡ãœããã䜿çšããå ŽåïŒSection 4.4 ãåç §ïŒãé€ããã¯ã©ã€ã¢ã³ãã¯ã¬ã¹ãã³ã¹ãåä¿¡ããããšã«äŸåããŠã¹ããªãŒã ã®ã¯ããŒãºãè¡ã£ãŠã¯ãªããŸããïŒMUST NOTïŒãæçµã¬ã¹ãã³ã¹ãéä¿¡ããåŸããµãŒãã¯éä¿¡åŽã®ã¹ããªãŒã ãéããªããã°ãªããŸããïŒMUSTïŒããã®æç¹ã§ QUIC ã¹ããªãŒã ã¯å®å šã«éããããŸãã
ã¹ããªãŒã ãéãããããšãããã¯æçµ HTTP ã¡ãã»ãŒãžã®çµäºã瀺ããŸããã¡ãã»ãŒãžã«ãã£ãŠã¯å€§ãããç¡éã§ããããããšã³ããã€ã³ãã¯ã¡ãã»ãŒãžã®äžéšãååã«åä¿¡ãããŠåŠçãé²ããããããã«ãªã£ãæç¹ã§éšåç㪠HTTP ã¡ãã»ãŒãžã®åŠçãéå§ãã¹ãã§ãïŒSHOULDïŒãããã¯ã©ã€ã¢ã³ãéå§ã¹ããªãŒã ã HTTP ã¡ãã»ãŒãžã®ååãªéšåãåä¿¡ããã«çµäºããå ŽåããµãŒãã¯ãšã©ãŒã³ãŒã H3_REQUEST_INCOMPLETE ã§å¿çã¹ããªãŒã ãäžæ¢ãã¹ãã§ãïŒSHOULDïŒã
ãµãŒãã¯ãå¿çãæªéä¿¡ã®ãªã¯ãšã¹ãéšåã«äŸåããªãå Žåãã¯ã©ã€ã¢ã³ãããªã¯ãšã¹ãå šäœãéä¿¡ããåã«å®å šãªå¿çãéä¿¡ããããšãã§ããŸãããµãŒããæ®ãã®ãªã¯ãšã¹ããåãåãå¿ èŠããªãå ŽåããµãŒã㯠ãªã¯ãšã¹ãã¹ããªãŒã ã®èªã¿åããäžæ¢ããå®å šãªå¿çãéä¿¡ããéä¿¡åŽãã¯ãªãŒã³ã«éããããšãã§ããŸãããã®ãšãã¯ã©ã€ã¢ã³ãã«å¯ŸããŠã¹ããªãŒã ã®éä¿¡ã忢ããããèŠæ±ããéã«ã¯ãšã©ãŒã³ãŒã H3_NO_ERROR ã䜿çšããããšãæšå¥šãããŸãïŒSHOULDïŒãã¯ã©ã€ã¢ã³ãã¯ããªã¯ãšã¹ããçªç¶çµäºããçµæãšããŠå®å šãªå¿çãç Žæ£ããŠã¯ãªããŸããïŒMUST NOTïŒããã ããã¯ã©ã€ã¢ã³ãã¯ä»ã®çç±ã§ä»»æã«å¿çãç Žæ£ããããšã¯ã§ããŸãããããµãŒããéšåçãŸãã¯å®å šãªå¿çãéä¿¡ããããªã¯ãšã¹ãã®èªã¿åããäžæ¢ããªãã£ãå Žåãã¯ã©ã€ã¢ã³ãã¯ãªã¯ãšã¹ãã®ã³ã³ãã³ãã®éä¿¡ãç¶ããéåžžã©ããã¹ããªãŒã ãéããã¹ãã§ãïŒSHOULDïŒã
4.1.1. ãªã¯ãšã¹ãã®ãã£ã³ã»ã«ãšæåŠ
äžåºŠ ãªã¯ãšã¹ãã¹ããªãŒã ãéããããšããããã®ãšã³ããã€ã³ãããã®ãªã¯ãšã¹ãããã£ã³ã»ã«ããããšãã§ããŸãïŒMAYïŒãã¯ã©ã€ã¢ã³ãã¯ãã¯ãå¿çã«é¢å¿ããªãå Žåã«ãªã¯ãšã¹ãããã£ã³ã»ã«ãããµãŒãã¯å¿çã§ããªããå¿çããªãããšãéžæããå Žåã«ãªã¯ãšã¹ãããã£ã³ã»ã«ããŸããå¯èœã§ããã°ããµãŒãã¯ãªã¯ãšã¹ãã®åŠçãæ¢ã«éå§ããŠããå Žåã«ã¯ãªã¯ãšã¹ãããã£ã³ã»ã«ãããããé©åãªã¹ããŒã¿ã¹ã³ãŒãã䌎ã HTTP ã¬ã¹ãã³ã¹ãéä¿¡ããããšãæšå¥šãããŸãïŒRECOMMENDEDïŒã
å®è£ ã¯ãã¹ããªãŒã äžã§ãŸã éããŠããæ¹åãçªç¶çµäºããããšã§ãªã¯ãšã¹ãããã£ã³ã»ã«ãã¹ãã§ãïŒSHOULDïŒããã®ããã«ã¯ãå®è£ ã¯ã¹ããªãŒã ã®éä¿¡éšåããªã»ããããåä¿¡éšåã®èªã¿åããäžæ¢ããŸãã詳现㯠Section 2.4 ã® [QUIC-TRANSPORT] ãåç §ããŠãã ããã
ãµãŒããäœããã®ã¢ããªã±ãŒã·ã§ã³åŠçãè¡ããã«ãªã¯ãšã¹ãããã£ã³ã»ã«ããå Žåããã®ãªã¯ãšã¹ãã¯ãæåŠãããïŒrejectedïŒããšèŠãªãããŸãããµãŒãã¯å¿çã¹ããªãŒã ããšã©ãŒã³ãŒã H3_REQUEST_REJECTED ã§äžæ¢ããããšãæšå¥šãããŸãïŒSHOULDïŒãããã§ãåŠçãããïŒprocessedïŒããšã¯ãã¹ããªãŒã ããã®äžéšã®ããŒã¿ãäžäœãœãããŠã§ã¢å±€ã«æž¡ããããã®çµæãšããŠäœããã®åäœãè¡ãããå¯èœæ§ãããããšãæå³ããŸããã¯ã©ã€ã¢ã³ãã¯ãµãŒãã«ãã£ãŠæåŠããããªã¯ãšã¹ããããŸãã§äžåºŠãéä¿¡ãããªãã£ããã®ããã«åãæ±ããåŸã§å詊è¡ã§ããããã«ããŠããã§ãã
ãµãŒãã¯éšåçãŸãã¯å®å šã«åŠçããããªã¯ãšã¹ãã«å¯Ÿã㊠H3_REQUEST_REJECTED ã䜿çšããŠã¯ãªããŸããïŒMUST NOTïŒããµãŒããéšåçãªåŠçã®åŸã«å¿çãæŸæ£ããå Žåãå¿çã¹ããªãŒã ããšã©ãŒã³ãŒã H3_REQUEST_CANCELLED ã§äžæ¢ããããšãæšå¥šãããŸãïŒSHOULDïŒã
ã¯ã©ã€ã¢ã³ãã¯ãªã¯ãšã¹ãããã£ã³ã»ã«ããéã«ãšã©ãŒã³ãŒã H3_REQUEST_CANCELLED ã䜿çšããã¹ãã§ãïŒSHOULDïŒããã®ãšã©ãŒã³ãŒããåãåã£ããµãŒãã¯ãåŠçãè¡ãããŠããªãå Žåã«éããå¿çãçªç¶çµäºããããã«ãšã©ãŒã³ãŒã H3_REQUEST_REJECTED ã䜿çšããŠãããã§ãïŒMAYïŒãã¯ã©ã€ã¢ã³ãã¯ããµãŒããã¹ããªãŒã ã®ééããã®ãšã©ãŒã³ãŒãã§èŠæ±ããå Žåãé€ããH3_REQUEST_REJECTED ãšã©ãŒã³ãŒãã䜿çšããŠã¯ãªããŸããïŒMUST NOTïŒã
ã¹ããªãŒã ãå®å šãªå¿çãåä¿¡ããåŸã«ãã£ã³ã»ã«ãããå Žåãã¯ã©ã€ã¢ã³ãã¯ãã£ã³ã»ã«ãç¡èŠããŠå¿çãå©çšããããšãã§ããŸãïŒMAYïŒãããããéšåçãªå¿çãåä¿¡ããåŸã«ã¹ããªãŒã ããã£ã³ã»ã«ãããå Žåããã®å¿çã¯äœ¿çšãã¹ãã§ã¯ãããŸããïŒSHOULD NOTïŒãGETãPUTãDELETE ã®ãããªåªçãªæäœã®ã¿ãå®å šã«å詊è¡ã§ãããããã¯ã©ã€ã¢ã³ãã¯ã¡ãœããã«äŸåãããªã¯ãšã¹ãã®æå³ãåªçã§ããããšãç¥ãææ®µããå ã®ãªã¯ãšã¹ããé©çšãããªãã£ãããšãæ€åºããææ®µããªãéããéåªçã¡ãœãããèªåçã«å詊è¡ããŠã¯ãªããŸããïŒSHOULD NOTïŒã詳现㯠Section 9.2.2 ãåç §ããŠãã ããã
4.1.2. äžæ£ãªãªã¯ãšã¹ãããã³ã¬ã¹ãã³ã¹
äžæ£ãªïŒmalformedïŒãªã¯ãšã¹ããŸãã¯ã¬ã¹ãã³ã¹ãšã¯ããã¬ãŒã ã®äžŠã³èªäœã¯æå¹ã§ãã£ãŠãã以äžã®çç±ã«ããç¡å¹ãšãªããã®ãæããŸãïŒ
- çŠæ¢ããããã£ãŒã«ããæ¬äŒŒããããã£ãŒã«ããååšããããšã
- å¿ é ã®æ¬äŒŒããããã£ãŒã«ããæ¬ åŠããŠããããšã
- æ¬äŒŒããããã£ãŒã«ãã®å€ãç¡å¹ã§ããããšã
- æ¬äŒŒããããã£ãŒã«ããéåžžã®ãããã®åŸã«ååšããããšã
- HTTP ã¡ãã»ãŒãžã®é åºãç¡å¹ã§ããããšã
- 倧æåã®ãã£ãŒã«ãåãå«ãŸããŠããããšããŸãã¯
- ãã£ãŒã«ãåãå€ã«ç¡å¹ãªæåãå«ãŸããŠããããšã
Content-Length ããããã£ãŒã«ããå«ãå Žåã«ã³ã³ãã³ããæã€ãšå®çŸ©ããããªã¯ãšã¹ããŸãã¯ã¬ã¹ãã³ã¹ã¯ãåä¿¡ãã DATA ãã¬ãŒã é·ã®åèšã Content-Length ãããã®å€ãšäžèŽããªãå Žåãäžæ£ãšãªããŸããã³ã³ãã³ããæ±ºããŠæããªããšå®çŸ©ãããã¬ã¹ãã³ã¹ã¯ãContent-Length ãååšããŠã DATA ãã¬ãŒã ã«å®éã®ã³ã³ãã³ããå«ãŸããŠããªããŠãéãŒãã® Content-Length ãæã€ããšãã§ããŸãã
HTTP ãªã¯ãšã¹ããŸãã¯ã¬ã¹ãã³ã¹ãåŠçããã€ã³ã¿ãŒããã£ã¢ãªïŒãã³ãã«ãšããŠåäœããŠããªããã®ïŒã¯ãäžæ£ãªãªã¯ãšã¹ããã¬ã¹ãã³ã¹ã転éããŠã¯ãªããŸããïŒMUST NOTïŒãæ€åºãããäžæ£ãªãªã¯ãšã¹ããã¬ã¹ãã³ã¹ã¯ãã¹ããªãŒã ãšã©ãŒãšããŠæ±ããªããã°ãªããŸããïŒMUSTïŒããã®çš®é¡ã¯ H3_MESSAGE_ERROR ã§ãã
äžæ£ãªãªã¯ãšã¹ãã«å¯ŸããŠããµãŒãã¯ã¹ããªãŒã ãéããããªã»ããããåã«ãšã©ãŒã瀺ã HTTP ã¬ã¹ãã³ã¹ãéä¿¡ããããšãã§ããŸãïŒMAYïŒãã¯ã©ã€ã¢ã³ãã¯äžæ£ãªã¬ã¹ãã³ã¹ãåãå ¥ããŠã¯ãªããŸããïŒMUST NOTïŒããããã®èŠä»¶ã¯ HTTP ã«å¯Ÿããäžè¬çãªæ»æããä¿è·ããããšãç®çãšããŠãããå¯å®¹ã«ãããšå®è£ ãè匱æ§ã«ãããããå¯èœæ§ããããããæå³çã«å³æ Œã«ãªã£ãŠããŸãã
4.2. HTTP ãã£ãŒã«ã
HTTP ã¡ãã»ãŒãžã¯ "HTTP ãã£ãŒã«ã" ãšåŒã°ããããŒã»ããªã¥ãŒã®åãšããŠã¡ã¿ããŒã¿ãéã³ãŸãã詳现㯠Section 6.3 ããã³ Section 6.5 ã® [HTTP] ãåç §ããŠãã ãããç»é²ããã HTTP ãã£ãŒã«ãã®äžèŠ§ã¯ IANA ã® "Hypertext Transfer Protocol (HTTP) Field Name Registry"ïŒ<https://www.iana.org/assignments/http-fields/>ïŒã§åç §ã§ããŸããHTTP/2 ãšåæ§ã«ãHTTP/3 ã§ã¯ãã£ãŒã«ãåã§äœ¿çšã§ããæåãConnection ããããã£ãŒã«ããæ¬äŒŒããããã£ãŒã«ãã«é¢ããŠè¿œå ã®èæ ®äºé ããããŸãã
ãã£ãŒã«ãå㯠ASCII æåã®éšåéåãå«ãæååã§ããHTTP ãã£ãŒã«ãåãšå€ã®æ§è³ªã«ã€ããŠã¯ Section 5.1 ãåç §ããŠãã ããããã£ãŒã«ãåã®æåã¯ãšã³ã³ãŒãã®åã«å°æåã«å€æãããªããã°ãªããŸããïŒMUSTïŒããã£ãŒã«ãåã«å€§æåãå«ãŸãããªã¯ãšã¹ããŸãã¯ã¬ã¹ãã³ã¹ã¯äžæ£ãšèŠãªãããŸãïŒmalformedïŒïŒMUSTïŒã
HTTP/3 㯠Connection ããããã£ãŒã«ããæ¥ç¶åºæã®ãã£ãŒã«ãã瀺ãããã«äœ¿çšããŸãããæ¬ãããã³ã«ã§ã¯æ¥ç¶åºæã®ã¡ã¿ããŒã¿ã¯ä»ã®ææ®µã§äŒéãããŸãããšã³ããã€ã³ãã¯æ¥ç¶åºæã®ãã£ãŒã«ããå«ã HTTP/3 ãã£ãŒã«ãã»ã¯ã·ã§ã³ãçæããŠã¯ãªããŸããïŒMUST NOTïŒãæ¥ç¶åºæã®ãã£ãŒã«ããå«ãã¡ãã»ãŒãžã¯äžæ£ãšããŠæ±ãããŸãïŒMUSTïŒã
ãã ãäŸå€ãšã㊠TE ããããã£ãŒã«ã㯠HTTP/3 ãªã¯ãšã¹ããããã«å«ãŸããŠãããïŒMAYïŒãååšããå Žå㯠"trailers" 以å€ã®å€ãå«ãã§ã¯ãªããŸããïŒMUST NOTïŒã
HTTP/1.x ã¡ãã»ãŒãžã HTTP/3 ã«å€æããã€ã³ã¿ãŒããã£ã¢ãªã¯ãConnection åºæã®ããããã£ãŒã«ããåé€ããªããã°ãªããŸããïŒSection 7.6.1 ãåç §ïŒãåé€ããªããšãä»ã® HTTP/3 ãšã³ããã€ã³ãã«ãã£ãŠãã®ã¡ãã»ãŒãžã¯äžæ£ãšããŠæ±ãããŸãã
4.2.1. ãã£ãŒã«ãã®å§çž®
[QPACK] ã¯ããšã³ã³ãŒããå§çž®ã«ããããããªãã©ã€ã³ããããã³ã°ã®çšåºŠãå¶åŸ¡ã§ããããã«ãã HPACK ã®å€çš®ãèšè¿°ããŠããŸããããã«ãããšã³ã³ãŒãã¯å§çž®å¹çãšé å»¶ãšããã©ã³ã¹ã§ããŸããHTTP/3 ã¯ãããããã³ãã¬ãŒã©ã»ã¯ã·ã§ã³ïŒãããã»ã¯ã·ã§ã³ã«å«ãŸããå¶åŸ¡ããŒã¿ãå«ãïŒã®å§çž®ã« QPACK ã䜿çšããŸãã
ããè¯ãå§çž®å¹çãå¯èœã«ãããããCookie ããããã£ãŒã«ãïŒ[COOKIES]ïŒã¯å§çž®åã«è€æ°ã®ãã£ãŒã«ãè¡ã«åå²ããåŸãŸãïŒåè¡ã¯ 1 å以äžã® cookie-pair ãå«ãïŒãããå±éããããã£ãŒã«ãã»ã¯ã·ã§ã³ãè€æ°ã® cookie ãã£ãŒã«ãè¡ãå«ãå Žåãããã㯠HTTP/2 ã HTTP/3 以å€ã®æèïŒäŸãã° HTTP/1.1 æ¥ç¶ãæ±çšã® HTTP ãµãŒãã¢ããªã±ãŒã·ã§ã³ïŒã«æž¡ãåã«ã2 ãã€ãåºåã "; "ïŒASCII 0x3b, 0x20ïŒ ãçšããŠåäžã®ãã€ãåã«é£çµãããªããã°ãªããŸããïŒMUSTïŒã
4.2.2. ããããµã€ãºã®å¶çŽ
HTTP/3 å®è£ ã¯åã ã® HTTP ã¡ãã»ãŒãžã§åãå ¥ãããããã®æå€§ãµã€ãºã«å¶éã課ãããšãã§ããŸãïŒMAYïŒãåä¿¡ãããããã»ã¯ã·ã§ã³ãèªåã®èš±å®¹ãããµã€ãºãè¶ ãããµãŒãã¯ãHTTP 431 (Request Header Fields Too Large) ã¹ããŒã¿ã¹ã³ãŒããè¿ãããšãã§ããŸãïŒ[RFC6585]ïŒãã¯ã©ã€ã¢ã³ãã¯åŠçã§ããªãå¿çãç Žæ£ããããšãã§ããŸãããã£ãŒã«ããªã¹ãã®ãµã€ãºã¯ãååãšå€ã®ãã€ãé·ã®åèšã«å ããŠåãã£ãŒã«ãããšã« 32 ãã€ãã®ãªãŒããŒããããå«ããéå§çž®ãµã€ãºã«åºã¥ããŠèšç®ãããŸãã
å®è£ ããã®éçããã¢ã«éç¥ãããå ŽåãSETTINGS_MAX_FIELD_SECTION_SIZE ãã©ã¡ãŒã¿ãšããŠãã€ãæ°ã§äŒããããšãã§ããŸãããã®ãã©ã¡ãŒã¿ãåãåã£ãå®è£ ã¯ã瀺ããããµã€ãºãè¶ ãã HTTP ã¡ãã»ãŒãžããããéä¿¡ããŠã¯ãªããªãïŒSHOULD NOTïŒãšãããŸãããªããªããã¢ã¯ãããåŠçããã®ãæåŠããå¯èœæ§ãé«ãããã§ãããã ããHTTP ã¡ãã»ãŒãžã¯ãªãªãžã³ãµãŒãã«å°éããåã« 1 å以äžã®ã€ã³ã¿ãŒããã£ã¢ãªãçµç±ããå¯èœæ§ããããŸãïŒè©³çŽ°ã¯ Section 3.7 ãåç §ïŒããã®å¶éã¯ã¡ãã»ãŒãžãåŠçããåå®è£ ããšã«åå¥ã«é©çšãããããããã®å¶éæªæºã®ã¡ãã»ãŒãžãå¿ ãããåçããããšã¯éããŸããã
4.3. HTTP å¶åŸ¡ããŒã¿
HTTP/2 ãšåæ§ã«ãHTTP/3 ããã£ãŒã«ãåã : æåïŒASCII 0x3aïŒã§å§ãŸãæ¬äŒŒããããã£ãŒã«ãã®åã䜿çšããŸãããããã®æ¬äŒŒããããã£ãŒã«ãã¯ã¡ãã»ãŒãžå¶åŸ¡ããŒã¿ãäŒéããŸãã詳现㯠Section 6.2 ãåç §ããŠãã ããã
æ¬äŒŒããããã£ãŒã«ã㯠HTTP ãã£ãŒã«ãã§ã¯ãããŸããããšã³ããã€ã³ãã¯æ¬æžã§å®çŸ©ããããã®ä»¥å€ã®æ¬äŒŒããããã£ãŒã«ããçæããŠã¯ãªããŸããïŒMUST NOTïŒããã ããæ¡åŒµã«ãããã®å¶éã®ä¿®æ£ã亀æžããåŸãããšããããŸãã詳现㯠Section 9 ãåç §ããŠãã ããã
æ¬äŒŒããããã£ãŒã«ãã¯ãããå®çŸ©ãããŠããæèã§ã®ã¿æå¹ã§ãããªã¯ãšã¹ãçšã«å®çŸ©ãããæ¬äŒŒããããã£ãŒã«ãã¯ã¬ã¹ãã³ã¹ã«çŸããŠã¯ãªããïŒMUST NOTïŒãã¬ã¹ãã³ã¹çšã«å®çŸ©ãããæ¬äŒŒããããã£ãŒã«ãã¯ãªã¯ãšã¹ãã«çŸããŠã¯ãªããŸããïŒMUST NOTïŒãæ¬äŒŒããããã£ãŒã«ãã¯ãã¬ãŒã©ã»ã¯ã·ã§ã³ã«çŸããŠã¯ãªããŸããïŒMUST NOTïŒãå®çŸ©ãããŠããªããç¡å¹ãªæ¬äŒŒããããã£ãŒã«ããå«ããªã¯ãšã¹ããã¬ã¹ãã³ã¹ã¯äžæ£ãšããŠæ±ããªããã°ãªããŸããïŒMUSTïŒã
ãã¹ãŠã®æ¬äŒŒããããã£ãŒã«ãã¯éåžžã®ããããã£ãŒã«ãããåã«ãããã»ã¯ã·ã§ã³å ã«çŸããªããã°ãªããŸããïŒMUSTïŒããããã»ã¯ã·ã§ã³å ã§éåžžã®ãããã®åŸã«æ¬äŒŒããããã£ãŒã«ããçŸãããªã¯ãšã¹ããŸãã¯ã¬ã¹ãã³ã¹ã¯äžæ£ãšããŠæ±ãããŸãïŒMUSTïŒã
4.3.1. ãªã¯ãšã¹ãæ¬äŒŒããããã£ãŒã«ã
ãªã¯ãšã¹ãã«å¯ŸããŠä»¥äžã®æ¬äŒŒããããã£ãŒã«ããå®çŸ©ãããŠããŸãïŒ
- ":method":
-
HTTP ã¡ãœãããå«ã¿ãŸãïŒSection 9 ã®èª¬æãåç §ïŒã
- ":scheme":
-
ã¿ãŒã²ãã URI ã®ã¹ããŒã éšåãå«ã¿ãŸãïŒSection 3.1 ãåç §ïŒã
-
:scheme æ¬äŒŒããã㯠"http" ããã³ "https" ã«éå®ãããŸããããããã·ãã²ãŒããŠã§ã€ã¯é HTTP ã¹ããŒã ã®ãªã¯ãšã¹ãã倿ããHTTP ãçšããŠé HTTP ãµãŒãã¹ãšããåãã§ããããã«ããããšãã§ããŸãã
-
:scheme ã "https" 以å€ã®ã¹ããŒã ã瀺ãå Žåã®æé㯠Section 3.1.2 ãåç §ããŠãã ããã
- ":authority":
-
ã¿ãŒã²ãã URI ã®ãªãŒãœãªãã£éšåãå«ã¿ãŸãïŒSection 3.2 ãåç §ïŒããªãŒãœãªãã£ã¯ "http" ãŸã㯠"https" ã®ã¹ããŒã ã® URI ã«å¯ŸããŠã¯å»æ¢ããã userinfo ãµãã³ã³ããŒãã³ããå«ãã§ã¯ãªããŸããïŒMUST NOTïŒã
-
HTTP/1.1 ã®ãªã¯ãšã¹ãè¡ãæ£ç¢ºã«åçŸããããã«ããã®æ¬äŒŒãããã¯ã¡ãœããåºæã®åœ¢åŒã®ãªã¯ãšã¹ãã¿ãŒã²ãããæã€ HTTP/1.1 ãã倿ããéã«ã¯çç¥ããªããã°ãªããŸããïŒMUSTïŒãã¯ã©ã€ã¢ã³ããçŽæ¥ HTTP/3 ãªã¯ãšã¹ããçæããå ŽåãHost ãããã®ä»£ããã« :authority æ¬äŒŒãããã䜿çšããããšãæšå¥šãããŸãïŒSHOULDïŒãHTTP/3 ãªã¯ãšã¹ãã HTTP/1.1 ã«å€æããã€ã³ã¿ãŒããã£ã¢ãªã¯ãHost ãã£ãŒã«ãããªã¯ãšã¹ãã«ååšããªãå Žåã:authority æ¬äŒŒãããã®å€ãã³ããŒã㊠Host ãã£ãŒã«ããäœæããªããã°ãªããŸããïŒMUSTïŒã
- ":path":
-
ã¿ãŒã²ãã URI ã®ãã¹ããã³ã¯ãšãªéšåãå«ã¿ãŸãïŒ"path-absolute" ãšãä»»æã§ ? ãšãã®åŸã« "query" ãç¶ãã圢åŒãå«ãïŒè©³çŽ°ã¯ RFC 3986 ã®è©²åœã»ã¯ã·ã§ã³ãåç §ïŒã
-
ãã®æ¬äŒŒããã㯠"http" ã "https" ã® URI ã«å¯ŸããŠç©ºã§ãã£ãŠã¯ãªããŸããããããã¹æåãå«ãŸãªã "http" ã "https" ã® URI ãããå Žåãå€ãšã㊠/ ãå«ããªããã°ãªããŸãããOPTIONS ãªã¯ãšã¹ãã§ãã¹æåãå«ãŸããªãå Žåã¯ã:path æ¬äŒŒãããã« * ãå«ããŸãã
ãã¹ãŠã® HTTP/3 ãªã¯ãšã¹ãã¯ãCONNECT ãªã¯ãšã¹ããé€ãã:methodã:schemeãããã³ :path æ¬äŒŒããããã£ãŒã«ããããããæ£ç¢ºã« 1 ã€ãã€å«ãŸãªããã°ãªããŸããïŒMUSTïŒã
:scheme æ¬äŒŒããããå¿ é ã®ãªãŒãœãªãã£æåãæã€ã¹ããŒã ïŒ"http" ã "https" ãå«ãïŒã瀺ãå Žåããªã¯ãšã¹ã㯠:authority æ¬äŒŒããããŸã㯠Host ããããã£ãŒã«ãã®ãããããå«ãŸãªããã°ãªããŸããïŒMUSTïŒããããã®ãã£ãŒã«ããååšããå Žåã空ã§ãã£ãŠã¯ãªããŸããïŒMUST NOTïŒãäž¡æ¹ååšããå Žåã¯åãå€ã§ãªããã°ãªããŸããïŒMUSTïŒãããã¹ããŒã ãå¿ é ã®ãªãŒãœãªãã£æåãæããããªã¯ãšã¹ãã¿ãŒã²ããã«ãããæäŸãããŠããªãå Žåããªã¯ãšã¹ã㯠:authority æ¬äŒŒãããã Host ããããå«ãã§ã¯ãªããŸããïŒMUST NOTïŒã
å¿ é ã®æ¬äŒŒããããçç¥ãããããã®æ¬äŒŒãããã®å€ãç¡å¹ã§ãã HTTP ãªã¯ãšã¹ãã¯äžæ£ãšèŠãªãããŸãïŒmalformedïŒã
HTTP/3 㯠HTTP/1.1 ã®ãªã¯ãšã¹ãè¡ã«å«ãŸããããŒãžã§ã³èå¥åãéã¶æ¹æ³ãå®çŸ©ããŠããŸãããHTTP/3 ãªã¯ãšã¹ãã¯æé»çã«ãããã³ã«ããŒãžã§ã³ "3.0" ãæã¡ãŸãã
4.3.2. ã¬ã¹ãã³ã¹æ¬äŒŒããããã£ãŒã«ã
ã¬ã¹ãã³ã¹ã«å¯ŸããŠã¯ãHTTP ã¹ããŒã¿ã¹ã³ãŒããéã¶åäžã® ":status" æ¬äŒŒããããã£ãŒã«ããå®çŸ©ãããŠããŸãïŒSection 15 ãåç §ïŒããã®æ¬äŒŒããããã£ãŒã«ãã¯ãã¹ãŠã®ã¬ã¹ãã³ã¹ã«å«ããªããã°ãªããŸããïŒMUSTïŒãå«ãŸããŠããªãå Žåããã®ã¬ã¹ãã³ã¹ã¯äžæ£ãšèŠãªãããŸãïŒmalformedïŒã
HTTP/3 㯠HTTP/1.1 ã®ã¹ããŒã¿ã¹è¡ã«å«ãŸããããŒãžã§ã³ãçç±å¥ãéã¶æ¹æ³ãå®çŸ©ããŠããŸãããHTTP/3 ã¬ã¹ãã³ã¹ã¯æé»çã«ãããã³ã«ããŒãžã§ã³ "3.0" ãæã¡ãŸãã
4.4. CONNECT ã¡ãœãã
CONNECT ã¡ãœããã¯åä¿¡è ã«å¯ŸããŠãªã¯ãšã¹ãã¿ãŒã²ããã§èå¥ãããå®å ãªãªãžã³ãµãŒããžã®ãã³ãã«ã確ç«ããããèŠæ±ããŸãã詳现㯠Section 9.3.6 ãåç §ããŠãã ããã䞻㫠HTTP ãããã·ã§ããªãªãžã³ãµãŒããšã® TLS ã»ãã·ã§ã³ã確ç«ã "https" ãªãœãŒã¹ãšããåãããç®çã§äœ¿çšãããŸãã
HTTP/1.x ã§ã¯ CONNECT ã¯å š HTTP æ¥ç¶ããªã¢ãŒããã¹ããžã®ãã³ãã«ã«å€æããããã«äœ¿ãããŸããHTTP/2 ããã³ HTTP/3 ã§ã¯ CONNECT ã¡ãœããã¯åäžã®ã¹ããªãŒã äžã§ãã³ãã«ã確ç«ããããã«äœ¿çšãããŸãã
CONNECT ãªã¯ãšã¹ãã¯æ¬¡ã®ããã«æ§ç¯ããªããã°ãªããŸããïŒMUSTïŒïŒ
- :method æ¬äŒŒããããã£ãŒã«ã㯠"CONNECT" ã«èšå®ããããš
- :scheme ããã³ :path æ¬äŒŒããããã£ãŒã«ãã¯çç¥ããããš
- :authority æ¬äŒŒããããã£ãŒã«ãã¯æ¥ç¶å ã®ãã¹ããšããŒããå«ãããšïŒCONNECT ãªã¯ãšã¹ãã® request-target ã® authority-form ã«çžåœïŒ
ãªã¯ãšã¹ãã¹ããªãŒã ã¯ã転éãããããŒã¿ãéã¶ããã«ãªã¯ãšã¹ãã®çµããã§ãéãããŸãŸã«ããŠãããªããã°ãªããŸããããããã®å¶éã«åŸããªã CONNECT ãªã¯ãšã¹ãã¯äžæ£ã§ãïŒmalformedïŒã
CONNECT ããµããŒããããããã·ã¯ :authority æ¬äŒŒãããã§èå¥ããããµãŒãã«å¯Ÿã㊠TCP æ¥ç¶ã確ç«ããŸããæ¥ç¶ãæåãããšããããã·ã¯ã¯ã©ã€ã¢ã³ãã«å¯Ÿã㊠2xx ç³»ã®ã¹ããŒã¿ã¹ã³ãŒããå«ã HEADERS ãã¬ãŒã ãéä¿¡ããŸãïŒå®çŸ©ã¯ Section 15.3 ãåç §ïŒã
ã¹ããªãŒã äžã®ãã¹ãŠã® DATA ãã¬ãŒã 㯠TCP æ¥ç¶äžã§éåä¿¡ãããããŒã¿ã«å¯Ÿå¿ããŸããã¯ã©ã€ã¢ã³ããéä¿¡ããä»»æã® DATA ãã¬ãŒã ã®ãã€ããŒãã¯ãããã·ã«ãã£ãŠ TCP ãµãŒããžè»¢éãããTCP ãµãŒãããåä¿¡ããããŒã¿ã¯ãããã·ã«ãã£ãŠ DATA ãã¬ãŒã ã«ããã±ãŒãžãããŠã¯ã©ã€ã¢ã³ããžéãããŸããTCP ã»ã°ã¡ã³ãã®ãµã€ãºãšæ°ã HTTP ã® DATA ãã¬ãŒã ã QUIC ã¹ããªãŒã ãã¬ãŒã ã®ãµã€ãºãšæ°ã«äºæž¬å¯èœã«å¯Ÿå¿ãããšã¯éããªãããšã«æ³šæããŠãã ããã
CONNECT ã¡ãœãããå®äºããåŸããã®ã¹ããªãŒã äžã§ã¯ DATA ãã¬ãŒã ã®ã¿ãéä¿¡å¯èœã§ããæ¡åŒµãæç€ºçã«èš±å¯ããå Žåã«éãæ¡åŒµãã¬ãŒã ã䜿çšã§ããŸãããã®ä»ã®æ¢ç¥ã®ãã¬ãŒã ã¿ã€ããåä¿¡ããå Žåã¯ãæ¥ç¶ãšã©ãŒãšããŠæ±ãããã¿ã€ã㯠H3_FRAME_UNEXPECTED ã§ãªããã°ãªããŸããïŒMUSTïŒã
TCP æ¥ç¶ã¯ã©ã¡ãã®ãã¢ã«ãã£ãŠãéãããåŸãŸããã¯ã©ã€ã¢ã³ãã ãªã¯ãšã¹ãã¹ããªãŒã ãçµäºãããšïŒããªãã¡ãããã·ã§ã®åä¿¡ã¹ããªãŒã ã "Data Recvd" ç¶æ ã«ãªããšïŒããããã·ã¯ TCP ãµãŒããžã®æ¥ç¶ã§ FIN ããããèšå®ããŸãããããã·ã FIN ããããå«ããã±ãããåä¿¡ãããšãã¯ã©ã€ã¢ã³ããžéãéä¿¡ã¹ããªãŒã ãéããŸããçæ¹åã§åã¯ããŒãºã®ãŸãŸã® TCP æ¥ç¶ã¯ç¡å¹ã§ã¯ãããŸãããããµãŒãã«ãã£ãŠã¯é©åã«æ±ãããªãããšãå€ããããã¯ã©ã€ã¢ã³ãã¯ãŸã CONNECT ã®å¯Ÿè±¡ããããŒã¿ãåä¿¡ããããšãæåŸ ããŠããéã«éä¿¡åŽã®ã¹ããªãŒã ãéããã¹ãã§ã¯ãããŸããïŒSHOULD NOTïŒã
TCP ã® æ¥ç¶ãšã©ãŒ ã¯ã¹ããªãŒã ãçªç¶çµäºããããšã§éç¥ãããŸãããããã·ã¯ TCP æ¥ç¶äžã®ãããããšã©ãŒïŒRST ããããå«ã TCP ã»ã°ã¡ã³ãã®åä¿¡ãå«ãïŒã ã¹ããªãŒã ãšã©ãŒ ãšããŠæ±ããã¿ã€ã㯠H3_CONNECT_ERROR ãšããŸãã
éã«ããããã·ãã¹ããªãŒã ã QUIC æ¥ç¶ã«ãšã©ãŒãæ€åºããå ŽåãTCP æ¥ç¶ãéããªããã°ãªããŸããïŒMUSTïŒãã¯ã©ã€ã¢ã³ããã¹ããªãŒã ããªã»ãããããèªã¿åããäžæ¢ããããšããããã·ãæ€åºããå Žåãããããã·ã¯ TCP æ¥ç¶ãéããªããã°ãªããŸããïŒMUSTïŒãããã¯ã©ã€ã¢ã³ãã«ãã£ãŠã¹ããªãŒã ããªã»ããããããèªã¿åããäžæ¢ãããå Žåããããã·ã¯å¯èœãªãã°ã¹ããªãŒã ã®ä»æ¹åã«ã€ããŠãåãæäœãè¡ã£ãŠäž¡æ¹åããã£ã³ã»ã«ããããšãæšå¥šãããŸãïŒSHOULDïŒããããã®å Žåãåºç€ãšãªã TCP å®è£ ãèš±ããªãã°ããããã·ã¯ RST ããããç«ãŠã TCP ã»ã°ã¡ã³ããéä¿¡ããããšãæšå¥šãããŸãïŒSHOULDïŒã
CONNECT ã¯ä»»æã®ãµãŒããžã®ãã³ãã«ãäœæãããããCONNECT ããµããŒããããããã·ã¯ãã®äœ¿çšãæ¢ç¥ã®ããŒãã®éåãŸãã¯å®å šãªãªã¯ãšã¹ãã¿ãŒã²ããã®ãªã¹ãã«å¶éããããšãæšå¥šãããŸãïŒSHOULDïŒã詳现㯠Section 9.3.6 ãåç §ããŠãã ããã
4.5. HTTP ã¢ããã°ã¬ãŒã
HTTP/3 㯠HTTP Upgrade ã®ä»çµã¿ããµããŒãããŸããïŒè©³çŽ°ã¯ Section 7.8 ãåç §ïŒããŸã 101 (Switching Protocols) æ å ±ã¹ããŒã¿ã¹ã³ãŒãããµããŒãããŸããïŒSection 15.2.2 ãåç §ïŒã
4.6. ãµãŒããŒããã·ã¥
ãµãŒããŒããã·ã¥ã¯ããµãŒããã¯ã©ã€ã¢ã³ããè¡ãã§ããããªã¯ãšã¹ããäºæž¬ããŠãªã¯ãšã¹ãã»ã¬ã¹ãã³ã¹äº€æãã¯ã©ã€ã¢ã³ããžããã·ã¥ããããšãèš±ãã€ã³ã¿ã©ã¯ã·ã§ã³ã¢ãŒãã§ããããã¯ãããã¯ãŒã¯äœ¿çšéãšæœåšçãªã¬ã€ãã³ã·å©åŸãšã®ãã¬ãŒããªãã§ããHTTP/3 ã®ãµãŒããŒããã·ã¥ã¯ Section 8.2 ã«èšè¿°ããããã®ã«é¡äŒŒããŠããŸãããç°ãªãã¡ã«ããºã ã䜿çšããŸãã
åãµãŒããŒããã·ã¥ã«ã¯ãµãŒãã«ãã£ãŠäžæãª push ID ãå²ãåœãŠãããŸããpush ID 㯠HTTP/3 æ¥ç¶ã®ã©ã€ãã¿ã€ã ãéããŠæ§ã ãªæèã§ãã®ããã·ã¥ãåç §ããããã«äœ¿çšãããŸãã
push ID 空é㯠0 ããå§ãŸããMAX_PUSH_ID ãã¬ãŒã ã§èšå®ãããæå€§å€ã§çµãããŸããç¹ã«ãã¯ã©ã€ã¢ã³ãã MAX_PUSH_ID ãã¬ãŒã ãéä¿¡ãããŸã§ã¯ãµãŒãã¯ããã·ã¥ã§ããŸãããã¯ã©ã€ã¢ã³ãã¯ãµãŒããçŽæã§ããããã·ã¥ã®æ°ãå¶åŸ¡ããããã« MAX_PUSH_ID ãã¬ãŒã ãéä¿¡ããŸãããµãŒã㯠push ID ã 0 ããé ã«é£çªã§äœ¿çšããããšãæšå¥šãããŸãïŒSHOULDïŒãã¯ã©ã€ã¢ã³ã㯠ããã·ã¥ã¹ããªãŒã ããMAX_PUSH_ID ãã¬ãŒã ãéä¿¡ãããŠããªãå Žåããããã¯ã¹ããªãŒã ãæå€§ push ID ãè¶ ãã push ID ãåç §ããå Žåã«ãæ¥ç¶ãšã©ãŒïŒã¿ã€ã H3_ID_ERRORïŒãšããŠæ±ããªããã°ãªããŸããïŒMUSTïŒã
push ID ã¯ããªã¯ãšã¹ãã¡ãã»ãŒãžã®å¶åŸ¡ããŒã¿ããã³ããããã£ãŒã«ããéã¶ 1 å以äžã® PUSH_PROMISE ãã¬ãŒã ã§äœ¿çšãããŸãããããã®ãã¬ãŒã ã¯ããã·ã¥ãçæãã ãªã¯ãšã¹ãã¹ããªãŒã äžã§éä¿¡ãããŸããããã«ãããµãŒããŒããã·ã¥ãã¯ã©ã€ã¢ã³ããªã¯ãšã¹ããšé¢é£ä»ããããšãã§ããŸããåã push ID ãè€æ°ã® ãªã¯ãšã¹ãã¹ããªãŒã äžã§çŽæãããå Žåãå±éããããªã¯ãšã¹ããã£ãŒã«ãã»ã¯ã·ã§ã³ã¯åãé åºã§åããã£ãŒã«ããå«ãŸãªããã°ãªãããåãã£ãŒã«ãã®ååãšå€ã¯å®å šã«äžèŽããªããã°ãªããŸããïŒMUSTïŒã
ãã®åŸãpush ID ã¯æçµçã«ãããã®çŽæãå±¥è¡ãã ããã·ã¥ã¹ããªãŒã ã«å«ãŸããŸããããã·ã¥ã¹ããªãŒã ã¯ããããå±¥è¡ããçŽæã® push ID ãèå¥ããæ¬¡ã« Section 4.1 ã«èšè¿°ãããããã«çŽæããããªã¯ãšã¹ããžã®ã¬ã¹ãã³ã¹ãå«ã¿ãŸãã
æåŸã«ãpush ID 㯠CANCEL_PUSH ãã¬ãŒã ã§äœ¿çšã§ããŸãïŒSection 7.2.3 ãåç §ïŒãã¯ã©ã€ã¢ã³ãã¯ãã®ãã¬ãŒã ã䜿çšããŠçŽæããããªãœãŒã¹ãåãåããããªãããšã瀺ãããµãŒãã¯ãã®ãã¬ãŒã ã䜿çšããŠä»¥åã®çŽæãå±¥è¡ããªãããšã瀺ããŸãã
ãã¹ãŠã®ãªã¯ãšã¹ããããã·ã¥å¯èœãªããã§ã¯ãããŸããããµãŒãã¯æ¬¡ã®æ§è³ªãæã€ãªã¯ãšã¹ããããã·ã¥ããŠãããã§ãïŒMAYïŒïŒ
- ãã£ãã·ã¥å¯èœã§ããããšïŒè©³çŽ°ã¯ Section 9.2.3 ãåç §ïŒ
- å®å šã§ããããšïŒè©³çŽ°ã¯ Section 9.2.1 ãåç §ïŒ
- ãªã¯ãšã¹ãã³ã³ãã³ãããã¬ãŒã©ã»ã¯ã·ã§ã³ãå«ãŸãªãããš
ãµãŒãã¯èªããæš©éãæã€ :authority æ¬äŒŒãããã®å€ãå«ããªããã°ãªããŸããïŒMUSTïŒãããã¯ã©ã€ã¢ã³ãããã®ããã·ã¥ããããªã¯ãšã¹ãã§ç€ºããããªãªãžã³ã«å¯ŸããŠãŸã æ¥ç¶ã®æ€èšŒãè¡ã£ãŠããªãå Žåãã¯ã©ã€ã¢ã³ãã¯ãã®ãªãªãžã³ã«å¯ŸããŠãªã¯ãšã¹ãããã®æ¥ç¶äžã§éä¿¡ããåã«è¡ãã®ãšåãæ€èšŒããã»ã¹ãå®è¡ããªããã°ãªããŸããïŒSection 3.3 ãåç §ïŒããã®æ€èšŒã«å€±æããå Žåãã¯ã©ã€ã¢ã³ãã¯ãã®ãµãŒããåœè©²ãªãªãžã³ã®æš©åšãããµãŒããšèŠãªããŠã¯ãªããŸããïŒMUST NOTïŒã
ã¯ã©ã€ã¢ã³ãã¯ãåä¿¡ãã PUSH_PROMISE ãã¬ãŒã ã§ç€ºããããªã¯ãšã¹ãããã£ãã·ã¥å¯èœã§ãªããæ¢ç¥ã§å®å šã§ãªãããªã¯ãšã¹ãã³ã³ãã³ãã®ååšã瀺ãããããã¯ãµãŒãããã®ãªã¯ãšã¹ãã®ãªãŒãœãªãã£ãšèŠãªããªãå ŽåãCANCEL_PUSH ãã¬ãŒã ãéä¿¡ããã¹ãã§ãïŒSHOULDïŒã察å¿ããå¿çã¯äœ¿çšãŸãã¯ãã£ãã·ã¥ããŠã¯ãªããŸããïŒMUST NOTïŒã
åããã·ã¥ãããå¿ç㯠1 å以äžã®ã¯ã©ã€ã¢ã³ããªã¯ãšã¹ãã«é¢é£ä»ããããŸããããã·ã¥ã¯ãPUSH_PROMISE ãã¬ãŒã ãåä¿¡ããã ãªã¯ãšã¹ãã¹ããªãŒã ã«é¢é£ä»ããããŸããåããµãŒããŒããã·ã¥ã¯ãåã push ID ãæã€å¥ã® PUSH_PROMISE ãã¬ãŒã ãè€æ°ã® ãªã¯ãšã¹ãã¹ããªãŒã äžã§éãããšã§è¿œå ã®ã¯ã©ã€ã¢ã³ããªã¯ãšã¹ãã«é¢é£ä»ããããããšããããŸãããããã®é¢é£ä»ãã¯ãããã³ã«ã®åäœã«ã¯åœ±é¿ããŸãããããŠãŒã¶ãšãŒãžã§ã³ããããã·ã¥ããããªãœãŒã¹ã®å©ç𿹿³ã決ããéã«èæ ®ããåŸãŸãïŒMAYïŒã
PUSH_PROMISE ãã¬ãŒã ãšå¿çã®ç¹å®éšåãšã®é åºã¯éèŠã§ãããµãŒãã¯çŽæãããå¿çãåç §ãã HEADERS ãŸã㯠DATA ãã¬ãŒã ãéä¿¡ããåã« PUSH_PROMISE ãã¬ãŒã ãéä¿¡ããããšãæšå¥šãããŸãïŒSHOULDïŒãããã«ããã¯ã©ã€ã¢ã³ãããµãŒããããã·ã¥ãããªãœãŒã¹ãäžå¿ èŠã«èŠæ±ããå¯èœæ§ãæžããŸãã
åé åºã«ãããããã·ã¥ã¹ããªãŒã ã®ããŒã¿ã察å¿ãã PUSH_PROMISE ãã¬ãŒã ããå ã«å°çããããšããããŸããã¯ã©ã€ã¢ã³ããæªç¥ã® push ID ãæã€æ°ãã ããã·ã¥ã¹ããªãŒã ãåä¿¡ããå Žåãé¢é£ããã¯ã©ã€ã¢ã³ããªã¯ãšã¹ããšããã·ã¥ããããªã¯ãšã¹ãã®ããããã£ãŒã«ãã¯äžæã§ããã¯ã©ã€ã¢ã³ãã¯äžèŽãã PUSH_PROMISE ãã¬ãŒã ãæåŸ ããŠã¹ããªãŒã ããŒã¿ããããã¡ããããšãã§ããŸããã¯ã©ã€ã¢ã³ãã¯ã¹ããªãŒã ãããŒå¶åŸ¡ãçšããŠãµãŒããããã·ã¥ã¹ããªãŒã ã«ã³ãããã§ããããŒã¿éãå¶éããããšãã§ããŸãããã劥åœãªæéå ã«å¯Ÿå¿ãã PUSH_PROMISE ãã¬ãŒã ãåŠçãããªãå Žåãã¯ã©ã€ã¢ã³ã㯠ããã·ã¥ã¹ããªãŒã ã®èªã¿åããäžæ¢ããŠæ¢ã«èªãã ããŒã¿ãç Žæ£ããã¹ãã§ãïŒSHOULDïŒã
ã¯ã©ã€ã¢ã³ããããã·ã¥ããã£ã³ã»ã«ããåŸã«ããã·ã¥ã¹ããªãŒã ããŒã¿ãå°çããããšããããŸãããã®å Žåãã¯ã©ã€ã¢ã³ã㯠H3_REQUEST_CANCELLED ã®ãšã©ãŒã³ãŒãã§èªã¿åããäžæ¢ããããšãã§ããŸããããã«ãããµãŒãã«è¿œå ããŒã¿ã®éä¿¡ããããããèŠæ±ããåä¿¡ããããŒã¿ã¯ç Žæ£ãããããšã瀺ããŸãã
ãã£ãã·ã¥å¯èœãªããã·ã¥ãããå¿çã¯ãã¯ã©ã€ã¢ã³ãã HTTP ãã£ãã·ã¥ãå®è£ ããŠããå Žåã«ã¯ã©ã€ã¢ã³ãã«ãã£ãŠä¿åããåŸãŸãïŒè©³çŽ°ã¯ Section 3 ãåç §ïŒãããã·ã¥ãããå¿çã¯ãåä¿¡æç¹ã§ãªãªãžã³ãµãŒãäžã§æåè£ã«æ€èšŒããããšèŠãªãããŸãïŒäŸãã° "no-cache" æç€ºåãããå Žåãªã©ïŒã
ãã£ãã·ã¥å¯èœã§ãªãããã·ã¥ãããå¿çã¯ã©ã® HTTP ãã£ãã·ã¥ã«ãã£ãŠãæ ŒçŽããŠã¯ãªããŸããïŒMUST NOTïŒããã ãããããã¯ã¢ããªã±ãŒã·ã§ã³ã«å¥åã«æäŸããåŸãŸãïŒMAYïŒã
5. æ¥ç¶ã®çµäº
確ç«ããã HTTP/3 æ¥ç¶ã¯ãæ¥ç¶ãéãããããŸã§ã®éã«å€æ°ã®ãªã¯ãšã¹ãããã³ã¬ã¹ãã³ã¹ã«ããã£ãŠäœ¿çšã§ããŸããæ¥ç¶ã®çµäºã¯ãããã€ãã®ç°ãªãæ¹æ³ã§çºçããå¯èœæ§ããããŸãã
5.1. ã¢ã€ãã«æ¥ç¶
å QUIC ãšã³ããã€ã³ãã¯ãã³ãã·ã§ã€ã¯äžã«ã¢ã€ãã«ã¿ã€ã ã¢ãŠãã宣èšããŸããQUIC æ¥ç¶ããã®æéããé·ãã¢ã€ãã«ã®ãŸãŸã§ããïŒãã±ãããåä¿¡ããªãïŒå Žåããã¢ã¯æ¥ç¶ãéãããããšèŠãªããŸããHTTP/3 å®è£ ã¯ãæ¢åã®æ¥ç¶ã QUIC ãã³ãã·ã§ã€ã¯äžã«äº€æžãããã¢ã€ãã«ã¿ã€ã ã¢ãŠãããé·ãã¢ã€ãã«ã§ãã£ãå Žåãæ°ãããªã¯ãšã¹ãã®ããã«æ°ãã HTTP/3 æ¥ç¶ãéãå¿ èŠããããã¢ã€ãã«ã¿ã€ã ã¢ãŠãã«è¿ã¥ããŠããå Žåã¯ãã®ããã«ããããšãæšå¥šãããŸãïŒSHOULDïŒã詳现㯠Section 10.1 ãåç §ããŠãã ããïŒ[QUIC-TRANSPORT]ïŒã
HTTP ã¯ã©ã€ã¢ã³ãã¯ããªã¯ãšã¹ãã«å¯ŸããŠã¬ã¹ãã³ã¹ããµãŒãããã·ã¥ãä¿çäžã®éã¯ãã©ã³ã¹ããŒãã«æ¥ç¶ãç¶æããããèŠæ±ããããšãæåŸ ãããŸãïŒè©³çŽ°ã¯ Section 10.1.2 ãåç §ïŒãã¯ã©ã€ã¢ã³ãããµãŒãããã®å¿çãæåŸ ããŠããªãå Žåãå¿ èŠãªããããããªãæ¥ç¶ãç¶æããåªåãããããããã¢ã€ãã«æ¥ç¶ãã¿ã€ã ã¢ãŠããããããšãæãŸããã§ããã²ãŒããŠã§ã€ã¯ããµãŒããžã®æ¥ç¶ç¢ºç«ã®é å»¶ã³ã¹ããåé¿ããããã«ãå¿ èŠãèŠè¶ããŠæ¥ç¶ãç¶æããããšã MAY ãããŸãããµãŒãã¯æ¥ç¶ãç©æ¥µçã«ç¶æãã¹ãã§ã¯ãããŸããïŒSHOULD NOTïŒã
5.2. æ¥ç¶ã®ã·ã£ããããŠã³
æ¥ç¶ãã¢ã€ãã«ã§ãªãå Žåã§ãããããã®ãšã³ããã€ã³ããæ¥ç¶ã®äœ¿çšã忢ããŠåªé ãªæ¥ç¶çµäºãéå§ããããšãã§ããŸãããšã³ããã€ã³ã㯠GOAWAY ãã¬ãŒã ãéä¿¡ããããšã§ HTTP/3 æ¥ç¶ã®åªé ãªã·ã£ããããŠã³ãéå§ããŸããGOAWAY ãã¬ãŒã ã¯ãåä¿¡è ã«å¯ŸããŠãã®æ¥ç¶ã§åŠçããããããããªããªã¯ãšã¹ããããã·ã¥ã®ç¯å²ã瀺ãèå¥åãå«ã¿ãŸãããµãŒãã¯ã¯ã©ã€ã¢ã³ãéå§ã®åæ¹åã¹ããªãŒã ID ãéä¿¡ããã¯ã©ã€ã¢ã³ã㯠push ID ãéä¿¡ããŸãã瀺ãããèå¥å以äžã®èå¥åãæã€ãªã¯ãšã¹ããŸãã¯ããã·ã¥ã¯ãGOAWAY ã®éä¿¡è ã«ãã£ãŠæåŠãããŸãïŒSection 4.1.1 ãåç §ïŒãåŠçããããªã¯ãšã¹ããããã·ã¥ããªãå Žåããã®èå¥å㯠0 ã§ãã£ãŠãããŸããŸããïŒMAYïŒã
GOAWAY ãã¬ãŒã å ã®æ å ±ã«ãããã¯ã©ã€ã¢ã³ããšãµãŒã㯠HTTP/3 æ¥ç¶ã®ã·ã£ããããŠã³åã«ã©ã®ãªã¯ãšã¹ããããã·ã¥ãåãå ¥ããããããåæã§ããŸããGOAWAY ãã¬ãŒã ãéä¿¡ããåŸããšã³ããã€ã³ãã¯ç€ºãããèå¥å以äžã®èå¥åãæã€ãªã¯ãšã¹ããããã·ã¥ãæç€ºçã«ãã£ã³ã»ã«ããããšã SHOULD ã§ãïŒç¶æ ã®ã¯ãªãŒã³ã¢ããã®ãããSection 4.1.1 ããã³ 7.2.3 ãåç §ïŒããšã³ããã€ã³ãã¯ãããã«ãªã¯ãšã¹ããããã·ã¥ãå°çããã«ã€ããŠãããç¶ç¶ãã¹ãã§ãïŒSHOULDïŒã
ãã¢ãã GOAWAY ãã¬ãŒã ãåä¿¡ããåŸããšã³ããã€ã³ãã¯æ¥ç¶äžã§æ°ãããªã¯ãšã¹ããéå§ãããæ°ããããã·ã¥ãçŽæãããããŠã¯ãªããŸããïŒMUST NOTïŒãã¯ã©ã€ã¢ã³ãã¯è¿œå ã®ãªã¯ãšã¹ããéä¿¡ããããã«æ°ããæ¥ç¶ã確ç«ããŠãããŸããŸããïŒMAYïŒã
ããã€ãã®ãªã¯ãšã¹ããããã·ã¥ã¯ãã§ã«è»¢éäžã§ããå¯èœæ§ããããŸãïŒ
-
GOAWAY ãã¬ãŒã ãåä¿¡ããéãããã¯ã©ã€ã¢ã³ãããã§ã«ãã® GOAWAY ãã¬ãŒã ã«å«ãŸããèå¥å以äžã®ã¹ããªãŒã ID ãæã€ãªã¯ãšã¹ããéä¿¡ããŠããå Žåããããã®ãªã¯ãšã¹ãã¯åŠçãããŸãããã¯ã©ã€ã¢ã³ãã¯åŠçãããªãã£ããªã¯ãšã¹ããå¥ã® HTTP æ¥ç¶äžã§å®å šã«å詊è¡ã§ããŸããå詊è¡ã§ããªãã¯ã©ã€ã¢ã³ãã¯ããµãŒããæ¥ç¶ãéããæç¹ã§è»¢éäžã®ãã¹ãŠã®ãªã¯ãšã¹ãã倱ããŸãã
ãµãŒãããã® GOAWAY ãã¬ãŒã ã®ã¹ããªãŒã ID ããå°ããã¹ããªãŒã ID äžã®ãªã¯ãšã¹ãã¯åŠçãããŠããå¯èœæ§ããããŸãããããã®ç¶æ ã¯ãã¬ã¹ãã³ã¹ãåä¿¡ããããŸã§ãã¹ããªãŒã ãåå¥ã«ãªã»ããããããŸã§ãããå°ããã¹ããªãŒã ID ãæã€å¥ã® GOAWAY ãåä¿¡ããããŸã§ããŸãã¯æ¥ç¶ãçµäºãããŸã§å€æããªãããšããããŸãã
ãµãŒãã¯ã瀺ããã ID æªæºã®ã¹ããªãŒã äžã®åã ã®ãªã¯ãšã¹ããåŠçããŠããªãã£ãå Žåã«ããããæåŠããããšã MAY ãããŸãã
- ãµãŒãã GOAWAY ãã¬ãŒã ãåä¿¡ããåŸã«ããã¬ãŒã ã«å«ãŸããèå¥å以äžã® push ID ã䌎ãããã·ã¥ãçŽæããŠããå Žåããããã®ããã·ã¥ã¯åãå ¥ããããŸããã
ãµãŒãã¯æ¥ç¶ã®ééãäºåã«å€æããŠããå Žåãããšããã®äºåéç¥ãçããŠãããªã¢ãŒããã¢ãã©ã®ãªã¯ãšã¹ãã«éšåçã«åŠçãè¡ãããããç¥ãããšãã§ããããã« GOAWAY ãã¬ãŒã ãéä¿¡ããããšã SHOULD ã§ããããšãã°ãHTTP ã¯ã©ã€ã¢ã³ãã POST ãéä¿¡ããŠããã¿ã€ãã³ã°ã§ãµãŒãã QUIC æ¥ç¶ãéãããšãããµãŒããã©ã®ã¹ããªãŒã ã«äœçšãããã瀺ã GOAWAY ãã¬ãŒã ãéä¿¡ããªããšãã¯ã©ã€ã¢ã³ãã¯ãµãŒãã POST ã®åŠçãéå§ãããã©ãããç¥ãããšãã§ããŸããã
ãšã³ããã€ã³ãã¯ç°ãªãèå¥åã瀺ãè€æ°ã® GOAWAY ãã¬ãŒã ãéä¿¡ããããšã MAY ãããŸãããåãã¬ãŒã ã®èå¥åã¯ä»¥åã®ãã¬ãŒã ã®èå¥åãã倧ããããŠã¯ãªããŸããïŒã¯ã©ã€ã¢ã³ãã¯åŠçãããªãã£ããªã¯ãšã¹ããæ¢ã«å¥ã®æ¥ç¶ã§å詊è¡ããŠããå¯èœæ§ãããããïŒã以åã«åä¿¡ãããã®ãã倧ããèå¥åãå«ã GOAWAY ãåä¿¡ããå Žåããã㯠æ¥ç¶ãšã©ãŒ ãšããŠæ±ãããã¿ã€ã㯠H3_ID_ERROR ã§ãªããã°ãªããŸããïŒMUSTïŒã
åªé ã«æ¥ç¶ãã·ã£ããããŠã³ããããšãããšã³ããã€ã³ãã¯ãæå€§å€ã«èšå®ãããå€ïŒãµãŒã㯠262-4ãã¯ã©ã€ã¢ã³ã㯠262-1ïŒãæã€ GOAWAY ãã¬ãŒã ãéä¿¡ããããšãã§ããŸããããã«ãããã¢ã¯æ°ãããªã¯ãšã¹ããããã·ã¥ãäœæããã®ã忢ããŸãã転éäžã®ãªã¯ãšã¹ããããã·ã¥ãå°çããæéãäžããåŸããšã³ããã€ã³ãã¯æ¥ç¶çµäºåã«åãå ¥ãåŸããªã¯ãšã¹ããããã·ã¥ã瀺ãå¥ã® GOAWAY ãã¬ãŒã ãéä¿¡ã§ããŸããããã«ãããªã¯ãšã¹ãã倱ãããšãªãæ¥ç¶ãã¯ãªãŒã³ã«çµäºã§ããããã«ãªããŸãã
ã¯ã©ã€ã¢ã³ãã¯èªèº«ãéä¿¡ãã GOAWAY ã® Push ID ãã£ãŒã«ãã®å€ã«ã€ããŠããæè»ã«éžæã§ããŸããå€ 262-1 ã¯ãµãŒããæ¢ã«çŽæãããããã·ã¥ã®å±¥è¡ãç¶ç¶ã§ããããšã瀺ããŸããããå°ããå€ã¯ãã¯ã©ã€ã¢ã³ãããã®å€ä»¥äžã® push ID ãæã€ããã·ã¥ãæåŠããããšã瀺ããŸãããµãŒããšåæ§ã«ãã¯ã©ã€ã¢ã³ãã¯æå®ããã push ID ã以åã«éä¿¡ããå€ãã倧ãããªãéãããã®åŸã«ããã« GOAWAY ãã¬ãŒã ãéä¿¡ããããšã MAY ãããŸãã
GOAWAY ãç¹å®ã®ãªã¯ãšã¹ããããã·ã¥ãåŠçãŸãã¯åãå ¥ããããªãããšã瀺ããŠããå Žåã§ããåºç€ãšãªããã©ã³ã¹ããŒãè³æºã¯ãŸã ååšããŸãããããã®ãªã¯ãšã¹ããéå§ãããšã³ããã€ã³ãã¯ããã©ã³ã¹ããŒãç¶æ ãã¯ãªãŒã³ã«ããããã«ãããããã£ã³ã»ã«ã§ããŸãã
åãå ¥ãããããã¹ãŠã®ãªã¯ãšã¹ããšããã·ã¥ãåŠçããããšããšã³ããã€ã³ãã¯æ¥ç¶ãã¢ã€ãã«ã«ããããšãèš±å¯ãããããŸãã¯å³æã«æ¥ç¶ãéããããšã MAY ãããŸããåªé ãªã·ã£ããããŠã³ãå®äºãããšã³ããã€ã³ãã¯ãæ¥ç¶ãéããéã« H3_NO_ERROR ãšã©ãŒã³ãŒãã䜿çšããããšã SHOULD ã§ãã
ã¯ã©ã€ã¢ã³ãããªã¯ãšã¹ãçšã®åæ¹åã¹ããªãŒã ID ããã¹ãŠäœ¿ãåã£ãŠããå ŽåããµãŒã㯠GOAWAY ãã¬ãŒã ãéä¿¡ããå¿ èŠã¯ãããŸãããã¯ã©ã€ã¢ã³ãã¯ãã以äžãªã¯ãšã¹ããè¡ãããšãã§ããªãããã§ãã
5.3. ã¢ããªã±ãŒã·ã§ã³ã®å³æéé
HTTP/3 å®è£ ã¯ãã€ã§ã QUIC æ¥ç¶ã峿ã«éããããšãã§ããŸããããã«ãããã¢ããªã±ãŒã·ã§ã³å±€ãæ¥ç¶ãçµäºããããšã瀺ã QUIC CONNECTION_CLOSE ãã¬ãŒã ããã¢ã«éä¿¡ãããŸãããã®ãã¬ãŒã å ã®ã¢ããªã±ãŒã·ã§ã³ãšã©ãŒã³ãŒãã¯ãæ¥ç¶ããªãéããããã®ãããã¢ã«ç€ºããŸããæ¥ç¶ãéããéã«äœ¿çšã§ãããšã©ãŒã³ãŒãã«ã€ããŠã¯ Section 8 ãåç §ããŠãã ããã
æ¥ç¶ãéããåã«ãã¯ã©ã€ã¢ã³ããããã€ãã®ãªã¯ãšã¹ããå詊è¡ã§ããããã« GOAWAY ãã¬ãŒã ãéä¿¡ããããšã MAY ãããŸããQUIC CONNECTION_CLOSE ãã¬ãŒã ãšåããã±ããã« GOAWAY ãã¬ãŒã ãå«ãããšãã¯ã©ã€ã¢ã³ãããã®ãã¬ãŒã ãåä¿¡ãã確çãé«ãŸããŸãã
æç€ºçã«éããããŠããªãéããã¹ããªãŒã ãããå Žåããããã¯æ¥ç¶ãéãããããšæé»çã«éããããŸãã詳现㯠Section 10.2 ãåç §ããŠãã ããïŒ[QUIC-TRANSPORT]ïŒã
5.4. ãã©ã³ã¹ããŒãã®çµäº
ããŸããŸãªçç±ã«ãããQUIC ãã©ã³ã¹ããŒãã¯ã¢ããªã±ãŒã·ã§ã³å±€ã«æ¥ç¶ãçµäºããããšãéç¥ããå¯èœæ§ããããŸããããã¯ããã¢ã«ããæç€ºçãªééããã©ã³ã¹ããŒãã¬ãã«ã®ãšã©ãŒããŸãã¯æ¥ç¶ãäžæãããããã¯ãŒã¯ããããžãŒã®å€åã«ãããã®ãããããŸããã
æ¥ç¶ã GOAWAY ãã¬ãŒã ãªãã§çµäºããå Žåãã¯ã©ã€ã¢ã³ãã¯éä¿¡ããããããããªã¯ãšã¹ãïŒå šéšãŸãã¯äžéšïŒãåŠçãããå¯èœæ§ããããã®ãšã¿ãªããªããã°ãªããŸããïŒMUSTïŒã
6. ã¹ããªãŒã ã®ãããã³ã°ãšäœ¿çš
QUIC ã¹ããªãŒã ã¯é åºã©ããã®ä¿¡é Œã§ãããã€ãé ä¿¡ãæäŸããŸãããä»ã®ã¹ããªãŒã äžã®ãã€ããšã®é ä¿¡é åºã«é¢ããŠã¯ä¿èšŒããŸãããQUIC ããŒãžã§ã³ 1 ã§ã¯ãHTTP ãã¬ãŒã ãå«ãã¹ããªãŒã ããŒã¿ã¯ QUIC STREAM ãã¬ãŒã ã§éã°ããŸããããã®ãã¬ãŒãã³ã°ã¯ HTTP ãã¬ãŒãã³ã°å±€ããã¯èŠããŸããããã©ã³ã¹ããŒãå±€ã¯åä¿¡ããã¹ããªãŒã ããŒã¿ããããã¡ããŠé åºãæŽããã¢ããªã±ãŒã·ã§ã³ã«ä¿¡é Œã§ãããã€ãã¹ããªãŒã ãæäŸããŸããQUIC ãã¹ããªãŒã å ã§ã®é åºå€é ä¿¡ãèš±å¯ããäžæ¹ã§ãHTTP/3 ã¯ãã®æ©èœãå©çšããŸããã
QUIC ã¹ããªãŒã ã¯ãäžæ¹åïŒéå§è ããåä¿¡è ãžã®ã¿ããŒã¿ãéã¶ïŒãŸãã¯åæ¹åïŒäž¡æ¹åã«ããŒã¿ãéã¶ïŒã®ããããã§ããã¹ããªãŒã ã¯ã¯ã©ã€ã¢ã³ããŸãã¯ãµãŒãã®ãããããéå§ã§ããŸããQUIC ã¹ããªãŒã ã®è©³çްã«ã€ããŠã¯ Section 2 ãåç §ããŠãã ããïŒ[QUIC-TRANSPORT]ïŒã
HTTP ãã£ãŒã«ããšããŒã¿ã QUIC äžã§éä¿¡ããããšããQUIC å±€ãã»ãšãã©ã®ã¹ããªãŒã 管çãåŠçããŸããHTTP 㯠QUIC ã䜿çšããéã«å¥åã®å€éåãè¡ãå¿ èŠã¯ãããŸããïŒQUIC ã¹ããªãŒã äžã§éä¿¡ãããããŒã¿ã¯åžžã«ç¹å®ã® HTTP ãã©ã³ã¶ã¯ã·ã§ã³ãŸãã¯å šäœã® HTTP/3 æ¥ç¶ã³ã³ããã¹ãã«å¯Ÿå¿ããŸãã
6.1. åæ¹åã¹ããªãŒã
ã¯ã©ã€ã¢ã³ãéå§ã®ãã¹ãŠã®åæ¹åã¹ããªãŒã 㯠HTTP ãªã¯ãšã¹ããšã¬ã¹ãã³ã¹ã«äœ¿çšãããŸããåæ¹åã¹ããªãŒã ã¯ã¬ã¹ãã³ã¹ããªã¯ãšã¹ããšå®¹æã«é¢é£ä»ããããããšãä¿èšŒããŸãããããã®ã¹ããªãŒã ã¯ãªã¯ãšã¹ãã¹ããªãŒã ãšåŒã°ããŸãã
ããã¯ã¯ã©ã€ã¢ã³ãã®æåã®ãªã¯ãšã¹ãã QUIC ã¹ããªãŒã 0 äžã§è¡ãããç¶ããªã¯ãšã¹ãã¯ã¹ããªãŒã 4ã8ã⊠äžã§è¡ãããããšãæå³ããŸãããããã®ã¹ããªãŒã ãéããããã«ãHTTP/3 ãµãŒãã¯èš±å¯ãããã¹ããªãŒã æ°ããã³åæã¹ããªãŒã ãããŒå¶åŸ¡ãŠã£ã³ããŠã®æå°å€ããŒã以å€ã«æ§æããããšã SHOULD ã§ããäžŠåæ§ãäžå¿ èŠã«å¶éããªãããã«ãå°ãªããšã 100 ã®ãªã¯ãšã¹ãã¹ããªãŒã ãåæã«èš±å¯ãããããšã SHOULD ã§ãã
HTTP/3 ã¯ãµãŒãéå§ã®åæ¹åã¹ããªãŒã ã䜿çšããŸããããæ¡åŒµããããã®ã¹ããªãŒã ã®äœ¿çšãå®çŸ©ããããšãããåŸãŸãããã®ãããªæ¡åŒµã亀æžãããŠããªãéããã¯ã©ã€ã¢ã³ãã¯ãµãŒãéå§ã®åæ¹åã¹ããªãŒã ãåä¿¡ããå Žåãããã æ¥ç¶ãšã©ãŒ ãšããŠæ±ããã¿ã€ã㯠H3_STREAM_CREATION_ERROR ã§ãªããã°ãªããŸããïŒMUSTïŒã
6.2. äžæ¹åã¹ããªãŒã
äžæ¹åã¹ããªãŒã ã¯ããããã®æ¹åã§ãããŸããŸãªç®çã«äœ¿çšãããŸããç®çã¯ã¹ããªãŒã ã®å é ã§å¯å€é·æŽæ°ãšããŠéä¿¡ãããã¹ããªãŒã ã¿ã€ãã«ãã£ãŠç€ºãããŸãããã®æŽæ°ã®åŸã«ç¶ãããŒã¿ã®åœ¢åŒãšæ§é ã¯ã¹ããªãŒã ã¿ã€ãã«ãã£ãŠæ±ºãŸããŸãã
Unidirectional Stream Header {
Stream Type (i),
}
Figure 1: Unidirectional Stream Header
æ¬æžã§ã¯ 2 ã€ã®ã¹ããªãŒã ã¿ã€ããå®çŸ©ãããŠããŸãïŒcontrol streamsïŒSection 6.2.1ïŒããã³ push streamsïŒSection 6.2.2ïŒã[QPACK] 㯠2 ã€ã®è¿œå ã®ã¹ããªãŒã ã¿ã€ããå®çŸ©ããŸãããã®ä»ã®ã¹ããªãŒã ã¿ã€ã㯠HTTP/3 ã®æ¡åŒµã«ãã£ãŠå®çŸ©ã§ããŸãïŒè©³çŽ°ã¯ Section 9 ãåç §ããŠãã ãããããã€ãã®ã¹ããªãŒã ã¿ã€ãã¯äºçŽãããŠããŸãïŒSection 6.2.3ïŒã
HTTP/3 æ¥ç¶ã®åææ®µéã«ãããããã©ãŒãã³ã¹ã¯ãäžæ¹åã¹ããªãŒã äžã§ã®ããŒã¿ã®äœæãšäº€æã«ææã§ãããšã³ããã€ã³ããã¹ããªãŒã æ°ããããã®ã¹ããªãŒã ã®ãããŒå¶åŸ¡ãŠã£ã³ããŠãé床ã«å¶éãããšããªã¢ãŒããã¢ãæ©æã«äžéã«éããŠãããã¯ãããå¯èœæ§ãé«ãŸããŸããç¹ã«ãå®è£ ã¯ãªã¢ãŒããã¢ãèš±å¯ãããäžæ¹åã¹ããªãŒã ã®äžéšã§äºçŽæžã¿ã¹ããªãŒã åäœïŒSection 6.2.3ïŒãè¡äœ¿ãããããããªãããšãèæ ®ãã¹ãã§ãã
åãšã³ããã€ã³ã㯠HTTP ã® control stream ã®ããã«å°ãªããšã 1 ã€ã®äžæ¹åã¹ããªãŒã ãäœæããå¿ èŠããããŸããQPACK ã¯ããã« 2 ã€ã®äžæ¹åã¹ããªãŒã ãå¿ èŠãšããä»ã®æ¡åŒµã¯è¿œå ã®ã¹ããªãŒã ãå¿ èŠãšããå ŽåããããŸãããããã£ãŠãã¯ã©ã€ã¢ã³ããšãµãŒããéä¿¡ãããã©ã³ã¹ããŒããã©ã¡ãŒã¿ã¯ãã¢ãå°ãªããšã 3 åã®äžæ¹åã¹ããªãŒã ãäœæã§ããããšãèš±å¯ããªããã°ãªããŸããïŒMUSTïŒããããã®ãã©ã³ã¹ããŒããã©ã¡ãŒã¿ã¯åäžæ¹åã¹ããªãŒã ã«å°ãªããšã 1,024 ãã€ãã®ãããŒå¶åŸ¡ã¯ã¬ãžãããæäŸããããšãæšå¥šãããŸãïŒSHOULDïŒã
ãã¢ãéèŠãªäžæ¹åã¹ããªãŒã ãäœæããåã«åæã¯ã¬ãžããããã¹ãŠæ¶è²»ããŠããŸã£ãå Žåããšã³ããã€ã³ããããã«äžæ¹åã¹ããªãŒã ãäœæããããã®è¿œå ã¯ã¬ãžãããä»äžããå¿ èŠã¯ãªãããšã«æ³šæããŠãã ããããšã³ããã€ã³ã㯠HTTP ã® control stream ããã³å¿ é æ¡åŒµïŒäŸãã° QPACK ãšã³ã³ãŒããšãã³ãŒãã¹ããªãŒã ïŒã§èŠæ±ãããäžæ¹åã¹ããªãŒã ããŸãäœæãããã®åŸãã¢ãèš±å¯ããç¯å²ã§è¿œå ã®ã¹ããªãŒã ãäœæããããšã SHOULD ã§ãã
ã¹ããªãŒã ããããåä¿¡è ã«ãã£ãŠãµããŒããããªãã¹ããªãŒã ã¿ã€ãã瀺ãå Žåããã®åŸã®ã¹ããªãŒã ã®æ®ãã¯æå³ãäžæãªããæ¶è²»ã§ããŸãããäžæãªã¹ããªãŒã ã¿ã€ãã®åä¿¡è ã¯ã¹ããªãŒã ã®èªã¿åããäžæ¢ããããåä¿¡ããŒã¿ããããªãåŠçãªãã«ç Žæ£ããªããã°ãªããŸããïŒMUSTïŒãèªã¿åããäžæ¢ããå Žåãåä¿¡è 㯠H3_STREAM_CREATION_ERROR ãšã©ãŒã³ãŒããŸãã¯äºçŽæžã¿ãšã©ãŒã³ãŒãã䜿çšããããšãæšå¥šãããŸãïŒSHOULDïŒãåä¿¡è ã¯äžæãªã¹ããªãŒã ã¿ã€ããæ¥ç¶ãšã©ãŒãšèŠãªããŠã¯ãªããŸããïŒMUST NOTïŒã
ç¹å®ã®ã¹ããªãŒã ã¿ã€ããæ¥ç¶ç¶æ ã«åœ±é¿ãäžããå¯èœæ§ããããããåä¿¡è ã¯ã¹ããªãŒã ã¿ã€ããèªãåã«åä¿¡ããäžæ¹åã¹ããªãŒã ã®ããŒã¿ãç Žæ£ããªãããšã SHOULD NOT ã§ãã
å®è£ ã¯ãã¢ããããããµããŒããããã©ãããç¥ããªããã¡ã«ã¹ããªãŒã ã¿ã€ããéä¿¡ããããšã MAY ã§ããããããQPACK ãä»ã®æ¡åŒµãå«ãæ¢åã®ãããã³ã«ã³ã³ããŒãã³ãã®ç¶æ ãæå³ã倿Žããå¯èœæ§ãããã¹ããªãŒã ã¿ã€ãã¯ããã¢ããããããµããŒããããšå€æãããŸã§éä¿¡ããŠã¯ãªããŸããïŒMUST NOTïŒã
éä¿¡è ã¯ãç¹ã«æå®ããªãéããäžæ¹åã¹ããªãŒã ãéããããªã»ãããããã§ããŸããåä¿¡è ã¯äžæ¹åã¹ããªãŒã ãããã®åä¿¡åã«ã¹ããªãŒã ãéããããããªã»ããããããããããšã蚱容ããªããã°ãªããŸããïŒMUSTïŒã
6.2.1. å¶åŸ¡ã¹ããªãŒã
å¶åŸ¡ã¹ããªãŒã ã¯ã¹ããªãŒã ã¿ã€ã 0x00 ã«ãã£ãŠç€ºãããŸãããã®ã¹ããªãŒã äžã®ããŒã¿ã¯ Section 7.2 ã§å®çŸ©ãããããã« HTTP/3 ãã¬ãŒã ã§æ§æãããŸãã
ååŽã¯æ¥ç¶ã®éå§æã«åäžã®å¶åŸ¡ã¹ããªãŒã ãéå§ãããã®ã¹ããªãŒã ã®æåã®ãã¬ãŒã ãšããŠèªåã® SETTINGS ãã¬ãŒã ãéä¿¡ããªããã°ãªããŸããïŒMUSTïŒãå¶åŸ¡ã¹ããªãŒã ã®æåã®ãã¬ãŒã ãä»ã®ä»»æã®ãã¬ãŒã ã¿ã€ãã§ãã£ãå Žåããã㯠æ¥ç¶ãšã©ãŒ ãšããŠæ±ãããã¿ã€ã㯠H3_MISSING_SETTINGS ã«ãªããŸãïŒMUSTïŒããã¢ããšã«å¶åŸ¡ã¹ããªãŒã 㯠1 ã€ã ãèš±å¯ãããŸããå¶åŸ¡ã¹ããªãŒã ã§ãããšäž»åŒµãã 2 çªç®ã®ã¹ããªãŒã ãåä¿¡ããå Žåããã㯠æ¥ç¶ãšã©ãŒ ãšããŠæ±ãããã¿ã€ã㯠H3_STREAM_CREATION_ERROR ã§ãªããã°ãªããŸããïŒMUSTïŒãéä¿¡è ã¯å¶åŸ¡ã¹ããªãŒã ãéããŠã¯ãªããïŒMUST NOTïŒãåä¿¡è ã¯éä¿¡è ã«å¶åŸ¡ã¹ããªãŒã ãéããããèŠæ±ããŠã¯ãªããŸããïŒMUST NOTïŒãããããã®å¶åŸ¡ã¹ããªãŒã ãéããããå Žåããã㯠æ¥ç¶ãšã©ãŒ ãšããŠæ±ãããã¿ã€ã㯠H3_CLOSED_CRITICAL_STREAM ã§ãªããã°ãªããŸãããæ¥ç¶ãšã©ãŒã®è©³çŽ°ã¯ Section 8 ãåç §ããŠãã ããã
å¶åŸ¡ã¹ããªãŒã ã®å 容ã¯ä»ã®ã¹ããªãŒã ã®åäœã管çããããã«äœ¿çšãããããããšã³ããã€ã³ãã¯ãã¢ã®å¶åŸ¡ã¹ããªãŒã ããããã¯ãããªãããååãªãããŒå¶åŸ¡ã¯ã¬ãžãããæäŸããããšã SHOULD ã§ãã
äžå¯Ÿã®äžæ¹åã¹ããªãŒã ãåäžã®åæ¹åã¹ããªãŒã ã®ä»£ããã«äœ¿çšãããŸããããã«ããããããã®ãã¢ãå¯èœã«ãªã次第ããã«ããŒã¿ãéä¿¡ã§ããŸãã0-RTT ã QUIC æ¥ç¶ã§å©çšå¯èœãã©ããã«å¿ããŠãã¯ã©ã€ã¢ã³ãããµãŒãã®ãããããå ã«ã¹ããªãŒã ããŒã¿ãéä¿¡ã§ããå ŽåããããŸãã
6.2.2. ããã·ã¥ã¹ããªãŒã
ãµãŒãããã·ã¥ã¯ HTTP/2 ã§å°å ¥ããããªãã·ã§ã³æ©èœã§ããµãŒãããªã¯ãšã¹ããè¡ãããåã«ã¬ã¹ãã³ã¹ãéå§ã§ããããã«ããŸãã詳现㯠Section 4.6 ãåç §ããŠãã ããã
ããã·ã¥ã¹ããªãŒã ã¯ã¹ããªãŒã ã¿ã€ã 0x01 ã«ãã£ãŠç€ºããããã®åŸã«ãã®ã¹ããªãŒã ãå±¥è¡ããçŽæã® push ID ãå¯å€é·æŽæ°ãšããŠç¶ããŸãããã®ã¹ããªãŒã äžã®æ®ãã®ããŒã¿ã¯ Section 7.2 ã§å®çŸ©ããã HTTP/3 ãã¬ãŒã ã§æ§æããã0 å以äžã®äžé HTTP ã¬ã¹ãã³ã¹ã«ç¶ãåäžã®æçµ HTTP ã¬ã¹ãã³ã¹ãæã€ããšã§çŽæããããµãŒãããã·ã¥ãå±¥è¡ããŸãïŒSection 4.1 ãåç §ïŒããµãŒãããã·ã¥ãš push ID ã®èª¬æã¯ Section 4.6 ã«ãããŸãã
ãµãŒãã®ã¿ãããã·ã¥ãè¡ãããšãã§ããŸãããããµãŒããã¯ã©ã€ã¢ã³ãéå§ã®ããã·ã¥ã¹ããªãŒã ãåä¿¡ããå Žåããã㯠æ¥ç¶ãšã©ãŒ ãšããŠæ±ãããã¿ã€ã㯠H3_STREAM_CREATION_ERROR ã§ãªããã°ãªããŸããïŒMUSTïŒã
Push Stream Header {
Stream Type (i) = 0x01,
Push ID (i),
}
Figure 2: Push Stream Header
ã¯ã©ã€ã¢ã³ãã¯ãããã·ã¥ã¹ããªãŒã ããããèªãåã«ããã·ã¥ã¹ããªãŒã ã®èªã¿åããäžæ¢ããŠã¯ãªããŸããïŒSHOULD NOTïŒãããã«ããã¯ã©ã€ã¢ã³ããšãµãŒãéã§ã©ã® push ID ããã§ã«æ¶è²»ããããã«ã€ããŠäžäžèŽãçããå¯èœæ§ããããŸãã
å push ID ã¯ããã·ã¥ã¹ããªãŒã ãããã§äžåºŠã ã䜿çšãããªããã°ãªããŸããïŒMUSTïŒãã¯ã©ã€ã¢ã³ããããããã·ã¥ã¹ããªãŒã ãããã«å¥ã®ããã·ã¥ã¹ããªãŒã ãããã§äœ¿çšããã push ID ãæ€åºããå Žåãã¯ã©ã€ã¢ã³ãã¯ããã æ¥ç¶ãšã©ãŒ ãšããŠæ±ããã¿ã€ã㯠H3_ID_ERROR ã§ãªããã°ãªããŸããïŒMUSTïŒã
6.2.3. äºçŽæžã¿ã¹ããªãŒã ã¿ã€ã
ãã©ãŒããã 0x1f * N + 0x21ïŒéè² æŽæ° NïŒã®ã¹ããªãŒã ã¿ã€ãã¯ãæªç¥ã®ã¿ã€ããç¡èŠãããèŠä»¶ãè¡äœ¿ããããã«äºçŽãããŠããŸãããããã®ã¹ããªãŒã ã«ã¯æå³ããªããã¢ããªã±ãŒã·ã§ã³å±€ã®ããã£ã³ã°ãå¿ èŠãªãšãã«éä¿¡ã§ããŸããããŒã¿ãçŸåšè»¢éãããŠããªãæ¥ç¶äžã§ãéä¿¡ããããšã MAY ãããŸããåä¿¡æã«ãããã®ã¹ããªãŒã ãæå³ã®ãããã®ãšèŠãªããŠã¯ãªããŸããïŒMUST NOTïŒã
ã¹ããªãŒã ã®ãã€ããŒããšé·ãã¯éä¿¡å®è£ ãéžæããä»»æã®æ¹æ³ã§æ±ºããããŸããäºçŽæžã¿ã¹ããªãŒã ã¿ã€ããéä¿¡ããå Žåãå®è£ ã¯ã¹ããªãŒã ãã¯ãªãŒã³ã«çµäºããããããªã»ããããããšã MAY ãããŸããã¹ããªãŒã ããªã»ããããå ŽåãH3_NO_ERROR ãšã©ãŒã³ãŒããŸãã¯äºçŽæžã¿ãšã©ãŒã³ãŒãã䜿çšããããšãæšå¥šãããŸãïŒSHOULDïŒã
7. HTTP ãã¬ãŒãã³ã°å±€
HTTP ãã¬ãŒã 㯠QUIC ã¹ããªãŒã äžã§éã°ããŸãïŒSection 6 ãåç §ïŒãHTTP/3 㯠3 çš®é¡ã®ã¹ããªãŒã ã¿ã€ããå®çŸ©ããŸãïŒcontrol streamãrequest streamãããã³ push streamããã®ã»ã¯ã·ã§ã³ã¯ HTTP/3 ãã¬ãŒã ã®åœ¢åŒãšèš±å¯ãããã¹ããªãŒã ã¿ã€ãã説æããŸãïŒæŠèŠã¯ Table 1 ãåç §ããŠãã ãããHTTP/2 ãš HTTP/3 ã®ãã¬ãŒã ã®æ¯èŒã¯ Appendix A.2 ã«ãããŸãã
| Frame | Control Stream | Request Stream | Push Stream | Section |
|---|---|---|---|---|
| DATA | No | Yes | Yes | Section 7.2.1 |
| HEADERS | No | Yes | Yes | Section 7.2.2 |
| CANCEL_PUSH | Yes | No | No | Section 7.2.3 |
| SETTINGS | Yes (1) | No | No | Section 7.2.4 |
| PUSH_PROMISE | No | Yes | No | Section 7.2.5 |
| GOAWAY | Yes | No | No | Section 7.2.6 |
| MAX_PUSH_ID | Yes | No | No | Section 7.2.7 |
| Reserved | Yes | Yes | Yes | Section 7.2.8 |
SETTINGS ãã¬ãŒã ã¯å¶åŸ¡ã¹ããªãŒã ã®æåã®ãã¬ãŒã ãšããŠã®ã¿çºçã§ããŸãïŒãã㯠Table 1 ã® (1) ã§ç€ºãããŠããŸãã該åœã»ã¯ã·ã§ã³ã«å ·äœçãªæéããããŸãã
QUIC ãã¬ãŒã ãšã¯ç°ãªããHTTP/3 ãã¬ãŒã ã¯è€æ°ã®ãã±ããã«ãŸãããããšãã§ããç¹ã«æ³šæããŠãã ããã
7.1. ãã¬ãŒã ã®ã¬ã€ã¢ãŠã
ãã¹ãŠã®ãã¬ãŒã ã¯æ¬¡ã®åœ¢åŒãæã¡ãŸãïŒ
HTTP/3 Frame Format {
Type (i),
Length (i),
Frame Payload (..),
}
Figure 3: HTTP/3 Frame Format
ãã¬ãŒã ã«ã¯ä»¥äžã®ãã£ãŒã«ããå«ãŸããŸãïŒ
- Type:
-
ãã¬ãŒã ã¿ã€ããèå¥ããå¯å€é·æŽæ°ã
- Length:
-
ãã¬ãŒã ãã€ããŒãã®ãã€ãé·ã瀺ãå¯å€é·æŽæ°ã
- Frame Payload:
-
Type ãã£ãŒã«ãã«ãã£ãŠæå³ã決ãŸããã€ããŒãã
åãã¬ãŒã ã®ãã€ããŒãã¯ããã®èª¬æã«èšèŒããããã£ãŒã«ããæ£ç¢ºã«å«ãŸãªããã°ãªããŸããïŒMUSTïŒãèå¥ããããã£ãŒã«ãã®æ«å°Ÿãã远å ã®ãã€ããå«ããã¬ãŒã ãã€ããŒãããŸãã¯èå¥ããããã£ãŒã«ãã®çµããããåã«çµç«¯ãããã¬ãŒã ãã€ããŒãã¯ãæ¥ç¶ãšã©ãŒ ãšããŠæ±ãããã¿ã€ã㯠H3_FRAME_ERROR ã§ãªããã°ãªããŸããïŒMUSTïŒãç¹ã«ãåé·ãªé·ããšã³ã³ãŒãã£ã³ã°ã¯èªå·±æŽåæ§ãæ€èšŒããå¿ èŠããããŸãã詳现㯠Section 10.8 ãåç §ããŠãã ããã
ã¹ããªãŒã ãã¯ãªãŒã³ã«çµäºãããšããããã¹ããªãŒã äžã®æåŸã®ãã¬ãŒã ãåãè©°ããããŠããå Žåããã㯠æ¥ç¶ãšã©ãŒ ãšããŠæ±ãããã¿ã€ã㯠H3_FRAME_ERROR ã§ãªããã°ãªããŸãããçªç¶çµäºããã¹ããªãŒã ã¯ãã¬ãŒã ã®ã©ã®æç¹ã§ããªã»ããããåŸãŸãã
7.2. ãã¬ãŒã å®çŸ©
7.2.1. DATA
DATA ãã¬ãŒã ïŒtype=0x00ïŒã¯ãHTTP ãªã¯ãšã¹ããŸãã¯ã¬ã¹ãã³ã¹ã®ã³ã³ãã³ãã«é¢é£ããä»»æã®å¯å€é·ãã€ãåãäŒéããŸãã
DATA ãã¬ãŒã 㯠HTTP ãªã¯ãšã¹ããŸãã¯ã¬ã¹ãã³ã¹ã«é¢é£ä»ããããŠããªããã°ãªããŸããïŒMUSTïŒããã DATA ãã¬ãŒã ã control stream äžã§åä¿¡ãããå Žåãåä¿¡è 㯠æ¥ç¶ãšã©ãŒ ãšããŠå¿çããªããã°ãªãããã¿ã€ã㯠H3_FRAME_UNEXPECTED ã§ãªããã°ãªããŸããïŒMUSTïŒã
DATA Frame {
Type (i) = 0x00,
Length (i),
Data (..),
}
Figure 4: DATA Frame
7.2.2. HEADERS
HEADERS ãã¬ãŒã ïŒtype=0x01ïŒã¯ QPACK ãçšããŠãšã³ã³ãŒãããã HTTP ãã£ãŒã«ãã»ã¯ã·ã§ã³ãéã¶ããã«äœ¿çšãããŸãã詳现㯠[QPACK] ãåç §ããŠãã ããã
HEADERS Frame {
Type (i) = 0x01,
Length (i),
Encoded Field Section (..),
}
Figure 5: HEADERS Frame
HEADERS ãã¬ãŒã 㯠request streams ãŸã㯠push streams äžã§ã®ã¿éä¿¡ã§ããŸãããã HEADERS ãã¬ãŒã ã control stream äžã§åä¿¡ãããå Žåãåä¿¡è 㯠æ¥ç¶ãšã©ãŒ ãšããŠå¿çããªããã°ãªãããã¿ã€ã㯠H3_FRAME_UNEXPECTED ã§ãªããã°ãªããŸããïŒMUSTïŒã
7.2.3. CANCEL_PUSH
CANCEL_PUSH ãã¬ãŒã ïŒtype=0x03ïŒã¯ãpush stream ãåä¿¡ããåã«ãµãŒãããã·ã¥ã®ãã£ã³ã»ã«ãèŠæ±ããããã«äœ¿çšãããŸããCANCEL_PUSH ãã¬ãŒã ã¯å¯å€é·æŽæ°ãšããŠãšã³ã³ãŒãããã push ID ã«ãã£ãŠãµãŒãããã·ã¥ãèå¥ããŸãïŒSection 4.6 ãåç §ïŒã
ã¯ã©ã€ã¢ã³ãã CANCEL_PUSH ãã¬ãŒã ãéä¿¡ããå Žåãããã¯çŽæããããªãœãŒã¹ãåãåããããªãããšã瀺ããŠããŸãããµãŒãã¯è³æºã®éä¿¡ãäžæ¢ããããšã SHOULD ã§ããããã®ææ®µã¯å¯Ÿå¿ãã push stream ã®ç¶æ ã«äŸåããŸãããããµãŒãããŸã push stream ãäœæããŠããªãå ŽåããããäœæããŸããããã push stream ãéããŠããå ŽåããµãŒãã¯ãã®ã¹ããªãŒã ãçªç¶çµäºããããšã SHOULD ã§ãããã push stream ããã§ã«çµäºããŠããå ŽåããµãŒãã¯ã¹ããªãŒã ãçªç¶çµäºãããäœãããªãããšã MAY ãããŸãã
ãµãŒãã¯ä»¥åã«éä¿¡ããçŽæãå±¥è¡ããªãããšã瀺ãããã« CANCEL_PUSH ãã¬ãŒã ãéä¿¡ããŸããã¯ã©ã€ã¢ã³ãã¯å¯Ÿå¿ããçŽæããã§ã«åä¿¡ããåŠçãããŠããå Žåãé€ãããã®çŽæãå±¥è¡ãããããšãæåŸ ã§ããŸãããã¹ããªãŒã ããã§ã«éãããŠãããã©ããã«ãããããããµãŒãã¯çŽæãå±¥è¡ãããªããšå€æãããšãã« CANCEL_PUSH ãã¬ãŒã ãéä¿¡ããããšã SHOULD ã§ããããã¹ããªãŒã ããã§ã«éãããŠããå ŽåããµãŒã㯠H3_REQUEST_CANCELLED ã®ãšã©ãŒã³ãŒãã§éä¿¡ãäžæ¢ã§ããŸãã
CANCEL_PUSH ãã¬ãŒã ã®éä¿¡ã¯æ¢åã® push streams ã®ç¶æ ã«çŽæ¥çãªåœ±é¿ãäžããŸãããã¯ã©ã€ã¢ã³ãã¯å¯Ÿå¿ãã push stream ããã§ã«åä¿¡ããŠããå Žåã« CANCEL_PUSH ãã¬ãŒã ãéä¿¡ããŠã¯ãªããŸããïŒSHOULD NOTïŒããµãŒãã CANCEL_PUSH ãåŠçããŠããªãå¯èœæ§ããããããã¯ã©ã€ã¢ã³ãã CANCEL_PUSH ãéä¿¡ããåŸã« push stream ãå°çããããšããããŸããã¯ã©ã€ã¢ã³ãã¯ã¹ããªãŒã ã®èªã¿åãã H3_REQUEST_CANCELLED ã®ãšã©ãŒã³ãŒãã§äžæ¢ããããšã SHOULD ã§ãã
CANCEL_PUSH ãã¬ãŒã 㯠control stream äžã§éä¿¡ãããŸããå¶åŸ¡ã¹ããªãŒã 以å€ã®ã¹ããªãŒã ã§ CANCEL_PUSH ãã¬ãŒã ãåä¿¡ããå Žåããã㯠æ¥ç¶ãšã©ãŒ ãšããŠæ±ãããã¿ã€ã㯠H3_FRAME_UNEXPECTED ã§ãªããã°ãªããŸããïŒMUSTïŒã
CANCEL_PUSH Frame {
Type (i) = 0x03,
Length (i),
Push ID (i),
}
Figure 6: CANCEL_PUSH Frame
CANCEL_PUSH ãã¬ãŒã ã¯å¯å€é·æŽæ°ãšããŠãšã³ã³ãŒãããã push ID ãéã³ãŸããPush ID ãã£ãŒã«ãã¯ãã£ã³ã»ã«ããããµãŒãããã·ã¥ãèå¥ããŸãïŒSection 4.6 ãåç §ïŒããã CANCEL_PUSH ãã¬ãŒã ãæ¥ç¶ã§çŸåšèš±å¯ãããŠããç¯å²ãã倧ãã push ID ãåç §ããŠããå Žåããã㯠æ¥ç¶ãšã©ãŒ ãšããŠæ±ãããã¿ã€ã㯠H3_ID_ERROR ã§ãªããã°ãªããŸããïŒMUSTïŒã
ã¯ã©ã€ã¢ã³ãã CANCEL_PUSH ãã¬ãŒã ãåä¿¡ããå Žåããã®ãã¬ãŒã ã¯åé åºã®ããã«ãŸã PUSH_PROMISE ãã¬ãŒã ã§èšåãããŠããªã push ID ãèå¥ããŠããå¯èœæ§ããããŸãããããµãŒãããŸã PUSH_PROMISE ãã¬ãŒã ã§èšåããŠããªã push ID ã«å¯Ÿãã CANCEL_PUSH ãåä¿¡ããå Žåããã㯠æ¥ç¶ãšã©ãŒ ãšããŠæ±ãããã¿ã€ã㯠H3_ID_ERROR ã§ãªããã°ãªããŸããïŒMUSTïŒã
7.2.4. SETTINGS
SETTINGS ãã¬ãŒã ïŒtype=0x04ïŒã¯ããšã³ããã€ã³ãéã®éä¿¡æ¹æ³ã«åœ±é¿ãäžããæ§æãã©ã¡ãŒã¿ïŒãã¢ã®æåã«å¯Ÿãã奜ã¿ãå¶çŽãªã©ïŒãäŒããŸããåã ã® SETTINGS ãã©ã¡ãŒã¿ã¯ãsettingããšãåŒã°ããããããã®ãã©ã¡ãŒã¿ã®èå¥åãšå€ã¯ãsetting identifierããšãsetting valueããšããŠåç §ã§ããŸãã
SETTINGS ãã¬ãŒã ã¯åžžã«å šäœã® HTTP/3 æ¥ç¶ã«é©çšãããåäžã®ã¹ããªãŒã ã«ã¯é©çšãããŸãããSETTINGS ãã¬ãŒã ã¯åãã¢ã«ãã£ãŠå control stream ã®æåã®ãã¬ãŒã ãšããŠéä¿¡ãããªããã°ãªããïŒMUSTïŒããã®åŸã«éä¿¡ããŠã¯ãªããŸããããããšã³ããã€ã³ããå¶åŸ¡ã¹ããªãŒã äžã§ 2 åç®ã® SETTINGS ãã¬ãŒã ãåä¿¡ããå Žåãåä¿¡è 㯠æ¥ç¶ãšã©ãŒ ãšããŠå¿çããã¿ã€ã㯠H3_FRAME_UNEXPECTED ã§ãªããã°ãªããŸããïŒMUSTïŒã
SETTINGS ãã¬ãŒã 㯠control stream 以å€ã®ã¹ããªãŒã ã§éä¿¡ããŠã¯ãªããŸããïŒMUST NOTïŒããããšã³ããã€ã³ããå¥ã®ã¹ããªãŒã ã§ SETTINGS ãã¬ãŒã ãåä¿¡ããå Žåãåä¿¡è 㯠æ¥ç¶ãšã©ãŒ ãšããŠå¿çããã¿ã€ã㯠H3_FRAME_UNEXPECTED ã§ãªããã°ãªããŸããïŒMUSTïŒã
SETTINGS ãã©ã¡ãŒã¿ã¯ããŽã·ãšãŒãããããã®ã§ã¯ãªããéä¿¡ãã¢ã®ç¹æ§ãåä¿¡ãã¢ã«èšè¿°ããŸãããã ããSETTINGS ã®äœ¿çšã«ãã£ãŠæé»ã®ããŽã·ãšãŒã·ã§ã³ãçºçããããšããããŸãïŒåãã¢ã¯ SETTINGS ã䜿çšããŠãµããŒãããå€ã®éåãåºåããŸãããã®èšå®ã®å®çŸ©ã¯ãã©ã®ããã«ããŠäž¡è ã®éåãçµã¿åãããŠäœ¿çšããéžæãæ±ºå®ããããèšè¿°ããŸããSETTINGS ã¯éžæããã€æå¹ã«ãªãããèå¥ããæ©æ§ãæäŸããŸããã
åããã©ã¡ãŒã¿ã«å¯ŸããŠç°ãªãå€ãåãã¢ãåºåããããšããããŸããäŸãã°ãã¯ã©ã€ã¢ã³ãã¯éåžžã«å€§ããªå¿çãã£ãŒã«ãã»ã¯ã·ã§ã³ãæ¶è²»ããããšãããšããªãäžæ¹ã§ããµãŒãã¯ãªã¯ãšã¹ããµã€ãºã«å¯ŸããŠããæ éã§ãããããããŸããã
åäžã® setting identifier ã SETTINGS ãã¬ãŒã å ã§è€æ°åçŸããŠã¯ãªããŸããïŒMUST NOTïŒãåä¿¡è ã¯éè€ããèå¥åã®ååšã æ¥ç¶ãšã©ãŒ ãšããŠæ±ãããšã MAY ããããã®å Žåã¿ã€ã㯠H3_SETTINGS_ERROR ã§ãã
SETTINGS ãã¬ãŒã ã®ãã€ããŒãã¯ãŒãå以äžã®ãã©ã¡ãŒã¿ã§æ§æãããŸããåãã©ã¡ãŒã¿ã¯èšå®èå¥åãšå€ãããªããäž¡æ¹ãšã QUIC ã®å¯å€é·æŽæ°ãšããŠãšã³ã³ãŒããããŸãã
Setting {
Identifier (i),
Value (i),
}
SETTINGS Frame {
Type (i) = 0x04,
Length (i),
Setting (..) ...,
}
Figure 7: SETTINGS Frame
å®è£ ã¯çè§£ããªãèå¥åãæã€ãã©ã¡ãŒã¿ãç¡èŠããªããã°ãªããŸããïŒMUSTïŒã
7.2.4.1. å®çŸ©ããã SETTINGS ãã©ã¡ãŒã¿
HTTP/3 ã§ã¯ä»¥äžã®èšå®ãå®çŸ©ãããŠããŸãïŒ
- SETTINGS_MAX_FIELD_SECTION_SIZE (0x06):
-
ããã©ã«ãå€ã¯ç¡å¶éã§ããäœ¿çšæ³ã«ã€ããŠã¯ Section 4.2.2 ãåç §ããŠãã ããã
ãã©ãŒããã 0x1f * N + 0x21ïŒéè² æŽæ° NïŒã® setting identifier ã¯ãæªç¥ã®èå¥åãç¡èŠãããèŠä»¶ãè¡äœ¿ããããã«äºçŽãããŠããŸãããã®ãããªèšå®ã«ã¯å®çŸ©ãããæå³ã¯ãããŸããããšã³ããã€ã³ã㯠SETTINGS ãã¬ãŒã ã«å°ãªããšã 1 ã€ãã®ãããªèšå®ãå«ããããšãæšå¥šãããŸãïŒSHOULDïŒãåä¿¡æã«ãã®ãããªèšå®ãæå³ã®ãããã®ãšèŠãªããŠã¯ãªããŸããïŒMUST NOTïŒã
èšå®ã«å®çŸ©ãããæå³ããªãããããã®å€ã¯å®è£ ãéžæããä»»æã®å€ã§æ§ããŸããã
[HTTP/2] ã§å®çŸ©ããã察å¿ãã HTTP/3 èšå®ããªãèšå®èå¥åãäºçŽãããŠããŸãïŒè©³çŽ°ã¯ Section 11.2.2 ãåç §ïŒããããã®äºçŽãããèšå®ã¯éä¿¡ããŠã¯ãªããïŒMUST NOTïŒãåä¿¡ããå Žå㯠æ¥ç¶ãšã©ãŒ ãšããŠæ±ãããã¿ã€ã㯠H3_SETTINGS_ERROR ã§ãªããã°ãªããŸããïŒMUSTïŒã
远å ã®èšå®ã¯ HTTP/3 ã®æ¡åŒµã§å®çŸ©ã§ããŸãïŒè©³çŽ°ã¯ Section 9 ãåç §ããŠãã ããã
7.2.4.2. åæå
HTTP å®è£ ã¯ããã¢ã®çŸåšã®èšå®ã®çè§£ã«åºã¥ããŠç¡å¹ãšãªããã¬ãŒã ããªã¯ãšã¹ããéä¿¡ããŠã¯ãªããŸããïŒMUST NOTïŒã
ãã¹ãŠã®èšå®ã¯åæå€ããå§ãŸããŸãããšã³ããã€ã³ãã¯ããã¢ã® SETTINGS ãã¬ãŒã ãå°çããåã«ãããã®åæå€ã䜿çšããŠã¡ãã»ãŒãžãéä¿¡ããããšã SHOULD ã§ãããªããªã SETTINGS ãéã¶ãã±ããã¯æå€±ãé å»¶ãåãåŸãããã§ããSETTINGS ãã¬ãŒã ãå°çãããšããããªãèšå®ãæ°ããå€ã«å€æŽãããŸãã
ããã«ãã SETTINGS ãã¬ãŒã ãåŸ ã£ãŠã¡ãã»ãŒãžéä¿¡ãé ãããå¿ èŠããªããªããŸãããšã³ããã€ã³ã㯠SETTINGS ãã¬ãŒã ãéä¿¡ããåã«ãã¢ããäœããã®ããŒã¿ãåä¿¡ããããšãèŠæ±ããŠã¯ãªããŸããïŒMUST NOTïŒïŒSETTINGS ã¯ãã©ã³ã¹ããŒããããŒã¿ãéä¿¡ããæºåãã§ã次第éä¿¡ãããªããã°ãªããŸããïŒMUSTïŒã
ãµãŒãã«ãšã£ãŠãåã¯ã©ã€ã¢ã³ãèšå®ã®åæå€ã¯ããã©ã«ãå€ã§ãã
1-RTT QUIC æ¥ç¶ã䜿çšããã¯ã©ã€ã¢ã³ãã«ãšã£ãŠãåãµãŒãèšå®ã®åæå€ã¯ããã©ã«ãå€ã§ãã1-RTT ããŒã¯ããµãŒããå³åº§ã« SETTINGS ãéä¿¡ããŠããSETTINGS ãå«ããã±ããã QUIC ã«ãã£ãŠåŠçãããåã«åžžã«å©çšå¯èœã«ãªããŸããã¯ã©ã€ã¢ã³ã㯠SETTINGS ãå°çããã®ãç¡æéã«åŸ ã€ã¹ãã§ã¯ãããŸããïŒSHOULD NOTïŒããSETTINGS ãéä¿¡åã«åŠçããå¯èœæ§ãé«ããããã«åä¿¡ããããŒã¿ã°ã©ã ãåŠçããããšã SHOULD ã§ãã
0-RTT QUIC æ¥ç¶ã䜿çšãããŠããå ŽåãåãµãŒãèšå®ã®åæå€ã¯ååã®ã»ãã·ã§ã³ã§äœ¿çšãããå€ã§ããã¯ã©ã€ã¢ã³ãã¯ãåéæ å ±ãæäŸããã HTTP/3 æ¥ç¶ã§ãµãŒããæäŸããèšå®ãä¿åããããšã SHOULD ã§ãããç¹å®ã®ã±ãŒã¹ïŒäŸãã°ã»ãã·ã§ã³ãã±ããã SETTINGS ãã¬ãŒã ããå ã«åä¿¡ãããå ŽåïŒã§ã¯ä¿åããªãããšã MAY ãããŸããã¯ã©ã€ã¢ã³ã㯠0-RTT ã詊è¡ããéã«ãä¿åãããèšå®ïŒãŸãã¯ä¿åãããŠããªãå Žåã¯ããã©ã«ãå€ïŒã«åŸããªããã°ãªããŸããïŒMUSTïŒããµãŒããæ°ããèšå®ãæäŸããããã¯ã©ã€ã¢ã³ãã¯ãããã®å€ã«åŸããªããã°ãªããŸããïŒMUSTïŒã
ãµãŒãã¯åºåããèšå®ãèšæ¶ããããå€ã®æŽåæ§ä¿è·ãããã³ããŒããã±ããã«ä¿åã㊠0-RTT ããŒã¿ãåãå ¥ããéã«æ å ±ãå埩ããããšã MAY ãããŸãããµãŒã㯠0-RTT ããŒã¿ãåãå ¥ãããã©ãããæ±ºå®ããéã« HTTP/3 èšå®å€ã䜿çšããŸãããããµãŒããã¯ã©ã€ã¢ã³ããèšæ¶ããŠããèšå®ãçŸåšã®èšå®ãšäºææ§ããããšå€æã§ããªãå ŽåããµãŒã㯠0-RTT ããŒã¿ãåãå ¥ããŠã¯ãªããŸããïŒMUST NOTïŒãèšæ¶ãããèšå®ã¯ãã¯ã©ã€ã¢ã³ãããããã«åŸããªãã°ãµãŒãã®çŸåšã®èšå®ãç Žãããšããªãå Žåã«äºææ§ããããšèŠãªãããŸãã
ãµãŒã㯠0-RTT ãåãå ¥ããããšã MAY ããããã®åŸã« SETTINGS ãã¬ãŒã ã§ç°ãªãèšå®ãæäŸããããšãã§ããŸãããã 0-RTT ããŒã¿ããµãŒãã«ãã£ãŠåãå ¥ããããå ŽåãSETTINGS ãã¬ãŒã ã¯ã¯ã©ã€ã¢ã³ãã® 0-RTT ããŒã¿ã«ãã£ãŠéåãããå¯èœæ§ã®ããå¶éãæžããããå€ã倿ŽããŠã¯ãªããŸããïŒMUST NOTïŒããµãŒãã¯ããã©ã«ãå€ãšç°ãªããã¹ãŠã®èšå®ãå«ããªããã°ãªããŸããïŒMUSTïŒããããµãŒãã 0-RTT ãåãå ¥ãããããã®åŸã«ã¯ã©ã€ã¢ã³ãã以åæå®ããèšå®ãšäºææ§ã®ãªãèšå®ãå«ã SETTINGS ãã¬ãŒã ãéä¿¡ããå Žåããã㯠æ¥ç¶ãšã©ãŒ ãšããŠæ±ãããã¿ã€ã㯠H3_SETTINGS_ERROR ã§ãªããã°ãªããŸããïŒMUSTïŒããããµãŒãã 0-RTT ãåãå ¥ãããããã®åŸã¯ã©ã€ã¢ã³ããçè§£ããïŒäºçŽèå¥åãé€ãïŒä»¥åã«éããã©ã«ãå€ã«èšå®ãããŠããèšå®å€ãçç¥ãã SETTINGS ãã¬ãŒã ãéä¿¡ããå Žåããã㯠æ¥ç¶ãšã©ãŒ ãšããŠæ±ãããã¿ã€ã㯠H3_SETTINGS_ERROR ã§ãªããã°ãªããŸããïŒMUSTïŒã
7.2.5. PUSH_PROMISE
PUSH_PROMISE ãã¬ãŒã ïŒtype=0x05ïŒã¯ããµãŒãããã¯ã©ã€ã¢ã³ããžçŽæããããªã¯ãšã¹ããããã»ã¯ã·ã§ã³ã request stream äžã§éã¶ããã«äœ¿çšãããŸãã
PUSH_PROMISE Frame {
Type (i) = 0x05,
Length (i),
Push ID (i),
Encoded Field Section (..),
}
Figure 8: PUSH_PROMISE Frame
ãã€ããŒãã¯æ¬¡ã®èŠçŽ ã§æ§æãããŸãïŒ
- Push ID:
-
ãµãŒãããã·ã¥æäœãèå¥ããå¯å€é·æŽæ°ãpush ID 㯠push stream ã®ãããïŒSection 4.6ïŒããã³ CANCEL_PUSH ãã¬ãŒã ã§äœ¿çšãããŸãã
- Encoded Field Section:
-
çŽæãããã¬ã¹ãã³ã¹ã®ããã® QPACK ãšã³ã³ãŒãããããªã¯ãšã¹ãããããã£ãŒã«ãã詳现㯠[QPACK] ãåç §ããŠãã ããã
ãµãŒãã¯ã¯ã©ã€ã¢ã³ãã MAX_PUSH_ID ãã¬ãŒã ã§æäŸããå€ãã倧ã㪠push ID ã䜿çšããŠã¯ãªããŸããïŒMUST NOTïŒãã¯ã©ã€ã¢ã³ãã¯åºåããå€ãã倧ã㪠push ID ãå«ã PUSH_PROMISE ãã¬ãŒã ãåä¿¡ããå Žåãããã æ¥ç¶ãšã©ãŒ ãšããŠæ±ããã¿ã€ã㯠H3_ID_ERROR ã§ãªããã°ãªããŸããïŒMUSTïŒã
ãµãŒãã¯åã push ID ãè€æ°ã® PUSH_PROMISE ãã¬ãŒã ã§äœ¿çšããããšã MAY ãããŸãããã®å Žåãå±éããããªã¯ãšã¹ããããã»ããã¯åãé åºã§åããã£ãŒã«ããå«ãŸãªããã°ãªãããåãã£ãŒã«ãã®ååãšå€ã¯å®å šã«äžèŽããªããã°ãªããŸããïŒMUSTïŒãã¯ã©ã€ã¢ã³ãã¯è€æ°åçŽæããããªãœãŒã¹ã®ããã«ãªã¯ãšã¹ããããã»ã¯ã·ã§ã³ãæ¯èŒããããšã SHOULD ã§ããã¯ã©ã€ã¢ã³ãããã§ã«çŽæããã push ID ãåä¿¡ããäžäžèŽãæ€åºããå Žåããã㯠æ¥ç¶ãšã©ãŒ ãšããŠæ±ãããã¿ã€ã㯠H3_GENERAL_PROTOCOL_ERROR ã§ãªããã°ãªããŸããïŒMUSTïŒãå±éããããã£ãŒã«ãã»ã¯ã·ã§ã³ãå®å šã«äžèŽããå Žåãã¯ã©ã€ã¢ã³ã㯠PUSH_PROMISE ãåä¿¡ããåã¹ããªãŒã ã«ããã·ã¥ãããã³ã³ãã³ããé¢é£ä»ããããšã SHOULD ã§ãã
åã push ID ãžã®éè€åç §ãèš±å¯ããäž»ãªç®çã¯ãåæãªã¯ãšã¹ãã«ããéè€ãæžããããšã§ãããµãŒãã¯é·æéã«ããã£ãŠåã push ID ãåå©çšããããšãé¿ããã¹ãã§ãïŒSHOULDïŒãã¯ã©ã€ã¢ã³ãã¯ãµãŒãããã·ã¥ã¬ã¹ãã³ã¹ãæ¶è²»ããæéã®çµéãšãšãã«åå©çšã®ããã«ä¿æããªãå¯èœæ§ãé«ããããã¯ã©ã€ã¢ã³ãããã§ã«æ¶è²»ããŠç Žæ£ãã push ID ã䜿çšãã PUSH_PROMISE ãåä¿¡ããå Žåãã¯ã©ã€ã¢ã³ãã¯ãã®çŽæãç¡èŠããããåŸãŸããã
PUSH_PROMISE ãã¬ãŒã ã control stream äžã§åä¿¡ãããå Žåãã¯ã©ã€ã¢ã³ãã¯ããã æ¥ç¶ãšã©ãŒ ãšããŠæ±ããã¿ã€ã㯠H3_FRAME_UNEXPECTED ã§ãªããã°ãªããŸããïŒMUSTïŒã
ã¯ã©ã€ã¢ã³ã㯠PUSH_PROMISE ãã¬ãŒã ãéä¿¡ããŠã¯ãªããŸããïŒMUST NOTïŒããµãŒã㯠PUSH_PROMISE ãã¬ãŒã ã®åä¿¡ã æ¥ç¶ãšã©ãŒ ãšããŠæ±ããã¿ã€ã㯠H3_FRAME_UNEXPECTED ã§ãªããã°ãªããŸããïŒMUSTïŒã
ãµãŒãããã·ã¥ã®å šäœçãªä»çµã¿ã«ã€ããŠã¯ Section 4.6 ãåç §ããŠãã ããã
7.2.6. GOAWAY
GOAWAY ãã¬ãŒã ïŒtype=0x07ïŒã¯ãããããã®ãšã³ããã€ã³ãã«ãã HTTP/3 æ¥ç¶ã®åªé ãªã·ã£ããããŠã³ãéå§ããããã«äœ¿çšãããŸããGOAWAY ã¯ãšã³ããã€ã³ããæ°ãããªã¯ãšã¹ããããã·ã¥ãåãä»ããã®ã忢ãã€ã€ã以åã«åä¿¡ãããªã¯ãšã¹ããããã·ã¥ã®åŠçãå®äºããããšãå¯èœã«ããŸããããã«ãããµãŒãä¿å®ã®ãããªç®¡çæäœãå¯èœã«ãªããŸããGOAWAY èªäœã¯æ¥ç¶ãéããŸããã
GOAWAY Frame {
Type (i) = 0x07,
Length (i),
Stream ID/Push ID (i),
}
Figure 9: GOAWAY Frame
GOAWAY ãã¬ãŒã ã¯åžžã« control stream äžã§éä¿¡ãããŸãããµãŒãããã¯ã©ã€ã¢ã³ãæ¹åã§ã¯ãããã¯ã¯ã©ã€ã¢ã³ãéå§ã®åæ¹å QUIC ã¹ããªãŒã ã® QUIC ã¹ããªãŒã ID ãå¯å€é·æŽæ°ãšããŠéã³ãŸããã¯ã©ã€ã¢ã³ãã¯ä»»æã®ä»ã®ã¿ã€ãã®ã¹ããªãŒã ID ãå«ã GOAWAY ãã¬ãŒã ãåä¿¡ããå Žåãããã æ¥ç¶ãšã©ãŒ ãšããŠæ±ããã¿ã€ã㯠H3_ID_ERROR ã§ãªããã°ãªããŸããïŒMUSTïŒã
ã¯ã©ã€ã¢ã³ããããµãŒãæ¹åã§ã¯ãGOAWAY ãã¬ãŒã ã¯å¯å€é·æŽæ°ãšããŠãšã³ã³ãŒãããã push ID ãéã³ãŸãã
GOAWAY ãã¬ãŒã ã¯ç¹å®ã®ã¹ããªãŒã ã§ã¯ãªãæ¥ç¶å šäœã«é©çšãããŸããã¯ã©ã€ã¢ã³ã㯠control stream 以å€ã®ã¹ããªãŒã äžã§ GOAWAY ãã¬ãŒã ãåä¿¡ããå Žåãããã æ¥ç¶ãšã©ãŒ ãšããŠæ±ããã¿ã€ã㯠H3_FRAME_UNEXPECTED ã§ãªããã°ãªããŸããïŒMUSTïŒã
GOAWAY ãã¬ãŒã ã®å©çšã«ã€ããŠã¯ Section 5.2 ãåç §ããŠãã ããã
7.2.7. MAX_PUSH_ID
MAX_PUSH_ID ãã¬ãŒã ïŒtype=0x0dïŒã¯ãã¯ã©ã€ã¢ã³ãããµãŒããéå§ã§ãããµãŒãããã·ã¥ã®æ°ãå¶åŸ¡ããããã«äœ¿çšããŸããããã¯ãµãŒãã PUSH_PROMISE ããã³ CANCEL_PUSH ãã¬ãŒã ã§äœ¿çšã§ããæå€§ã® push ID ãèšå®ããŸãããããã£ãŠããã㯠QUIC ãã©ã³ã¹ããŒããç¶æããå¶éã«å ããŠããµãŒããéå§ã§ãã push streams ã®æ°ãå¶éããŸãã
MAX_PUSH_ID ãã¬ãŒã ã¯åžžã« control stream äžã§éä¿¡ãããŸããä»»æã®ä»ã®ã¹ããªãŒã ã§ MAX_PUSH_ID ãã¬ãŒã ãåä¿¡ããå Žåããã㯠æ¥ç¶ãšã©ãŒ ãšããŠæ±ãããã¿ã€ã㯠H3_FRAME_UNEXPECTED ã§ãªããã°ãªããŸããïŒMUSTïŒã
ãµãŒã㯠MAX_PUSH_ID ãã¬ãŒã ãéä¿¡ããŠã¯ãªããŸããïŒMUST NOTïŒãã¯ã©ã€ã¢ã³ã㯠MAX_PUSH_ID ãã¬ãŒã ã®åä¿¡ã æ¥ç¶ãšã©ãŒ ãšããŠæ±ããã¿ã€ã㯠H3_FRAME_UNEXPECTED ã§ãªããã°ãªããŸããïŒMUSTïŒã
HTTP/3 æ¥ç¶ãäœæããããšæå€§ã® push ID ã¯æªèšå®ã«ãªãããµãŒã㯠MAX_PUSH_ID ãã¬ãŒã ãåä¿¡ãããŸã§ããã·ã¥ã§ããŸãããããã·ã¥ã®æ°ã管çãããã¯ã©ã€ã¢ã³ãã¯ããµãŒãããµãŒãããã·ã¥ãå±¥è¡ãŸãã¯ãã£ã³ã»ã«ããã«ã€ã㊠MAX_PUSH_ID ãã¬ãŒã ãéä¿¡ããŠæå€§ã® push ID ãå¢å ãããããšãã§ããŸãã
MAX_PUSH_ID Frame {
Type (i) = 0x0d,
Length (i),
Push ID (i),
}
Figure 10: MAX_PUSH_ID Frame
MAX_PUSH_ID ãã¬ãŒã ã¯ãµãŒãã䜿çšã§ããæå€§ã® push ID ãèå¥ããåäžã®å¯å€é·æŽæ°ãéã³ãŸãïŒSection 4.6 ãåç §ïŒãMAX_PUSH_ID ãã¬ãŒã ã¯æå€§ã® push ID ãæžå°ãããããšã¯ã§ããŸããïŒãã以åã«åä¿¡ããããå°ããå€ãå«ã MAX_PUSH_ID ãã¬ãŒã ãåä¿¡ããå Žåããã㯠æ¥ç¶ãšã©ãŒ ãšããŠæ±ãããã¿ã€ã㯠H3_ID_ERROR ã§ãªããã°ãªããŸããïŒMUSTïŒã
7.2.8. äºçŽæžã¿ãã¬ãŒã ã¿ã€ã
ãã©ãŒããã 0x1f * N + 0x21ïŒéè² æŽæ° NïŒã®ãã¬ãŒã ã¿ã€ãã¯ãæªç¥ã®ã¿ã€ããç¡èŠãããèŠä»¶ãè¡äœ¿ããããã«äºçŽãããŠããŸãïŒSection 9 ãåç §ïŒããããã®ãã¬ãŒã ã«ã¯æå³ããªããä»»æã®ãã¬ãŒã ãèš±å¯ãããã¹ããªãŒã äžã§éä¿¡ããããšã MAY ãããŸããããã«ããã¢ããªã±ãŒã·ã§ã³å±€ã®ããã£ã³ã°ã«äœ¿çšã§ããŸããåä¿¡æã«ãããã®ãã¬ãŒã ãæå³ã®ãããã®ãšèŠãªããŠã¯ãªããŸããïŒMUST NOTïŒã
ãã¬ãŒã ã®ãã€ããŒããšé·ãã¯å®è£ ãéžæããä»»æã®æ¹æ³ã§éžã°ããŸãã
HTTP/2 ã§äœ¿çšããã察å¿ãã HTTP/3 ãã¬ãŒã ããªããã¬ãŒã ã¿ã€ããäºçŽãããŠããŸãïŒè©³çŽ°ã¯ Section 11.2.1 ãåç §ïŒããããã®ãã¬ãŒã ã¿ã€ãã¯éä¿¡ããŠã¯ãªããïŒMUST NOTïŒãåä¿¡ããå Žå㯠æ¥ç¶ãšã©ãŒ ãšããŠæ±ãããã¿ã€ã㯠H3_FRAME_UNEXPECTED ã§ãªããã°ãªããŸããïŒMUSTïŒã
8. ãšã©ãŒåŠç
ã¹ããªãŒã ãæ£åžžã«å®äºã§ããªãå ŽåãQUIC ã¯ã¢ããªã±ãŒã·ã§ã³ããã®ã¹ããªãŒã ãçªç¶çµäºïŒãªã»ããïŒããŠçç±ãäŒããããä»çµã¿ãæäŸããŸãã詳ãã㯠Section 2.4 ãåç §ããŠãã ããïŒ[QUIC-TRANSPORT]ïŒãããã¯ãã¹ããªãŒã ãšã©ãŒããšåŒã°ããŸããHTTP/3 å®è£ 㯠QUIC ã¹ããªãŒã ãéããŠãšã©ãŒã®çš®é¡ãäŒããããšãã§ããŸãããšã©ãŒã³ãŒãã®ã¯ã€ã€ãŒãšã³ã³ãŒãã£ã³ã°ã¯ Section 8.1 ã«å®çŸ©ãããŠããŸããã¹ããªãŒã ãšã©ãŒã¯ããšã©ãŒç¶æ ã瀺ã HTTP ã¹ããŒã¿ã¹ã³ãŒããšã¯åºå¥ãããŸããã¹ããªãŒã ãšã©ãŒã¯éä¿¡è ããªã¯ãšã¹ããŸãã¯ã¬ã¹ãã³ã¹å šäœã転éãŸãã¯æ¶è²»ããªãã£ãããšã瀺ãã®ã«å¯ŸããHTTP ã¹ããŒã¿ã¹ã³ãŒãã¯æ£ããåä¿¡ããããªã¯ãšã¹ãã®çµæã瀺ããŸãã
æ¥ç¶å šäœãçµäºããå¿ èŠãããå ŽåãQUIC ã¯åæ§ã«çç±ãäŒããã¡ã«ããºã ãæäŸããŸãã詳ãã㯠Section 5.3 ãåç §ããŠãã ããïŒ[QUIC-TRANSPORT]ïŒãããã¯ãæ¥ç¶ãšã©ãŒããšåŒã°ããŸããã¹ããªãŒã ãšã©ãŒãšåæ§ã«ãHTTP/3 å®è£ 㯠QUIC æ¥ç¶ãçµäºãããã®çç±ã Section 8.1 ã®ãšã©ãŒã³ãŒãã§äŒããããšãã§ããŸãã
ã¹ããªãŒã ãæ¥ç¶ãéããçç±ãããšã©ãŒããšåŒã°ããŠããŠãããããã®åäœãå¿ ãããæ¥ç¶ãå®è£ ã®åé¡ãæå³ããããã§ã¯ãããŸãããããšãã°ãèŠæ±ããããªãœãŒã¹ããã¯ãäžèŠã«ãªã£ãå Žåã«ã¹ããªãŒã ããªã»ãããããããšããããŸãã
ãšã³ããã€ã³ãã¯ç¹å®ã®ç¶æ³äžã§ã¹ããªãŒã ãšã©ãŒãæ¥ç¶ãšã©ãŒãšããŠæ±ããåäžã¹ããªãŒã ã®ç¶æ ã«å¿ããŠæ¥ç¶å šäœãéããããšãéžæããããšã MAY ãããŸãããã®éžæãè¡ãåã«ãå®è£ ã¯ä¿çäžã®ãªã¯ãšã¹ããžã®åœ±é¿ãèæ ®ããå¿ èŠããããŸãã
æ°ãããšã©ãŒã³ãŒãã¯ããŽã·ãšãŒã·ã§ã³ãªãã«å®çŸ©ããåŸãããïŒSection 9 ãåç §ïŒãäºæããªãæèã§ã®ãšã©ãŒã³ãŒãã®äœ¿çšãæªç¥ã®ãšã©ãŒã³ãŒãã®åä¿¡ã¯ãMUST H3_NO_ERROR ãšåçã«æ±ãããŸãããã ããã¹ããªãŒã ãéããããšã¯ãšã©ãŒã³ãŒãã«ãããããå¥ã®åœ±é¿ãããããããšããããäŸãã° Section 4.1 ãåç §ããŠãã ããã
8.1. HTTP/3 ãšã©ãŒã³ãŒã
次ã®ãšã©ãŒã³ãŒãã¯ãã¹ããªãŒã ã®çªç¶ã®çµäºãã¹ããªãŒã ã®èªã¿åãäžæ¢ããŸã㯠HTTP/3 æ¥ç¶ã®å³æééæã«äœ¿çšããããã«å®çŸ©ãããŠããŸãã
- H3_NO_ERROR (0x0100):
-
ãšã©ãŒãªããæ¥ç¶ãŸãã¯ã¹ããªãŒã ãéããå¿ èŠãããããç¹ã«ç€ºãã¹ããšã©ãŒããªãå Žåã«äœ¿çšãããŸãã
- H3_GENERAL_PROTOCOL_ERROR (0x0101):
-
ãã¢ãããå ·äœçãªãšã©ãŒã³ãŒãã«è©²åœããªã圢ã§ãããã³ã«èŠä»¶ã«éåãããããšã³ããã€ã³ããããå ·äœçãªãšã©ãŒã³ãŒãã䜿çšããªãããšãéžæããå Žåã
- H3_INTERNAL_ERROR (0x0102):
-
HTTP ã¹ã¿ãã¯å ã§å éšãšã©ãŒãçºçããããšã瀺ããŸãã
- H3_STREAM_CREATION_ERROR (0x0103):
-
ãã¢ãäœæããã¹ããªãŒã ãåãå ¥ããªããšæ€åºããããšã瀺ããŸãã
- H3_CLOSED_CRITICAL_STREAM (0x0104):
-
HTTP/3 æ¥ç¶ã§å¿ èŠãšãããã¹ããªãŒã ãéããããããªã»ãããããããšã瀺ããŸãã
- H3_FRAME_UNEXPECTED (0x0105):
-
çŸåšã®ç¶æ ãåœè©²ã¹ããªãŒã ã§èš±å¯ãããŠããªããã¬ãŒã ãåä¿¡ãããããšã瀺ããŸãã
- H3_FRAME_ERROR (0x0106):
-
ã¬ã€ã¢ãŠãèŠä»¶ãæºãããªãããŸãã¯ç¡å¹ãªãµã€ãºã®ãã¬ãŒã ãåä¿¡ãããããšã瀺ããŸãã
- H3_EXCESSIVE_LOAD (0x0107):
-
ãã¢ãé床ã®è² è·ãçºçãããŠããå¯èœæ§ã®ããæåã瀺ããããšãæ€åºããå Žåã«äœ¿çšããŸãã
- H3_ID_ERROR (0x0108):
-
ã¹ããªãŒã ID ã push ID ã誀çšãããïŒäŸãã°äžéãè¶ ãããäžéãäžãããåå©çšãããçïŒå Žåã«äœ¿çšããŸãã
- H3_SETTINGS_ERROR (0x0109):
-
SETTINGS ãã¬ãŒã ã®ãã€ããŒãã«ãšã©ãŒãæ€åºããå Žåã«äœ¿çšããŸãã
- H3_MISSING_SETTINGS (0x010a):
-
SETTINGS ãã¬ãŒã ã control stream ã®éå§æã«åä¿¡ãããªãã£ãããšã瀺ããŸãã
- H3_REQUEST_REJECTED (0x010b):
-
ãµãŒããã¢ããªã±ãŒã·ã§ã³åŠçãäžåè¡ããã«ãªã¯ãšã¹ããæåŠããããšã瀺ããŸãã
- H3_REQUEST_CANCELLED (0x010c):
-
ãªã¯ãšã¹ããŸãã¯ãã®ã¬ã¹ãã³ã¹ïŒããã·ã¥ãããã¬ã¹ãã³ã¹ãå«ãïŒããã£ã³ã»ã«ãããããšã瀺ããŸãã
- H3_REQUEST_INCOMPLETE (0x010d):
-
ã¯ã©ã€ã¢ã³ãã®ã¹ããªãŒã ãå®å šãªãªã¯ãšã¹ããå«ãŸãªããŸãŸçµäºããããšã瀺ããŸãã
- H3_MESSAGE_ERROR (0x010e):
-
HTTP ã¡ãã»ãŒãžã malformed ã§ããåŠçã§ããªãããšã瀺ããŸãã
- H3_CONNECT_ERROR (0x010f):
-
CONNECT ãªã¯ãšã¹ãã«å¿ããŠç¢ºç«ããã TCP æ¥ç¶ããªã»ããããããç°åžžçµäºããããšã瀺ããŸãã
- H3_VERSION_FALLBACK (0x0110):
-
èŠæ±ãããæäœã¯ HTTP/3 ã§ã¯æäŸã§ããŸããããã¢ã¯ HTTP/1.1 ã§å詊è¡ãã¹ãã§ãã
ãšã©ãŒã³ãŒã空éã®ãã¡ 0x1f * N + 0x21ïŒéè² æŽæ° NïŒã®åœ¢åŒã¯ãæªç¥ã®ãšã©ãŒã³ãŒãã H3_NO_ERROR ãšåçã«æ±ãããããšãè¡äœ¿ããããã«äºçŽãããŠããŸãïŒSection 9 ãåç §ïŒãå®è£ 㯠H3_NO_ERROR ãéã代ããã«ããã®ç©ºéãã確ççã«ãšã©ãŒã³ãŒããéžæããããšã SHOULD ãããŸãã
9. HTTP/3 ãžã®æ¡åŒµ
HTTP/3 ã¯ãããã³ã«ã®æ¡åŒµãèš±å¯ããŸããæ¬ç¯ã§èšè¿°ããå¶çŽå ã§ããããã³ã«æ¡åŒµã¯è¿œå ãµãŒãã¹ãæäŸããããããã³ã«ã®ä»»æã®åŽé¢ã倿Žãããããããã«äœ¿çšã§ããŸããæ¡åŒµã¯åäžã® HTTP/3 æ¥ç¶ã®ç¯å²å ã§ã®ã¿æå¹ã§ãã
ããã¯æ¬æžã§å®çŸ©ããããããã³ã«èŠçŽ ã«é©çšãããŸããããã¯ãæ°ããã¡ãœãããã¹ããŒã¿ã¹ã³ãŒãããã£ãŒã«ãã®å®çŸ©ãªã©ã®æ¢åã® HTTP æ¡åŒµãªãã·ã§ã³ã«ã¯åœ±é¿ããŸããã
æ¡åŒµã¯æ°ãããã¬ãŒã ã¿ã€ãïŒSection 7.2ïŒãæ°ããèšå®ïŒSection 7.2.4.1ïŒãæ°ãããšã©ãŒã³ãŒãïŒSection 8ïŒããŸãã¯æ°ããäžæ¹åã¹ããªãŒã ã¿ã€ãïŒSection 6.2ïŒã䜿çšããããšãèš±å¯ãããŸãããããã®æ¡åŒµãã€ã³ãã管çããããã«ä»¥äžã®ã¬ãžã¹ããªãèšããããŠããŸãïŒãã¬ãŒã ã¿ã€ãïŒSection 11.2.1ïŒãèšå®ïŒSection 11.2.2ïŒããšã©ãŒã³ãŒãïŒSection 11.2.3ïŒãããã³ã¹ããªãŒã ã¿ã€ãïŒSection 11.2.4ïŒã
å®è£ ã¯ãã¹ãŠã®æ¡åŒµå¯èœãªãããã³ã«èŠçŽ ã«ãããŠæªç¥ãŸãã¯ãµããŒããããªãå€ãç¡èŠããªããã°ãªããŸããïŒMUSTïŒãå®è£ ã¯æªç¥ãŸãã¯ãµããŒããããªãã¿ã€ãã®äžæ¹åã¹ããªãŒã äžã®ããŒã¿ãç Žæ£ããããèªã¿åããäžæ¢ããªããã°ãªããŸããïŒMUSTïŒãããã¯ããããã®æ¡åŒµãã€ã³ããäºåã®åãæ±ºããããŽã·ãšãŒã·ã§ã³ãªãã«å®å šã«äœ¿çšã§ããããšãæå³ããŸãããã ããæ¢ç¥ã®ãã¬ãŒã ã¿ã€ããç¹å®ã®å Žæã«ããããšãèŠæ±ãããå ŽåïŒäŸãã° SETTINGS ã control stream ã®æåã®ãã¬ãŒã ã§ããããšïŒSection 6.2.1 ãåç §ïŒãªã©ïŒãæªç¥ã®ãã¬ãŒã ã¿ã€ãã¯ãã®èŠä»¶ãæºãããªããããšã©ãŒãšããŠæ±ãããšã SHOULD ã§ãã
æ¢åã®ãããã³ã«ã³ã³ããŒãã³ãã®ã»ãã³ãã£ã¯ã¹ã倿ŽãåŸãæ¡åŒµã¯ã䜿çšåã«äº€æžãããªããã°ãªããŸããïŒMUSTïŒãããšãã°ãHEADERS ãã¬ãŒã ã®ã¬ã€ã¢ãŠãã倿Žããæ¡åŒµã¯ããã¢ãããã蚱容ããç©æ¥µçãªåå³ãäžãããŸã§äœ¿çšã§ããŸããããã®ãããªæ¹èšãããã¬ã€ã¢ãŠãããã€æå¹ã«ãªããã調æŽããããšã¯è€éã«ãªãåŸãŸãããããã£ãŠãæ¢åã®ãããã³ã«èŠçŽ ã®æ°ããå®çŸ©ã®ããã«æ°ããèå¥åãå²ãåœãŠãæ¹ã广çã§ããå¯èœæ§ãé«ãã§ãã
æ¬æžã¯æ¡åŒµã®äœ¿çšäº€æžã®ç¹å®ã®æ¹æ³ã匷å¶ããŸããããèšå®ïŒSection 7.2.4.1ïŒããã®ç®çã«äœ¿çšã§ããããšãææããŸããäž¡ãã¢ãæ¡åŒµã®äœ¿çšã«åæããããšã瀺ãå€ãèšå®ããã°ããã®æ¡åŒµã䜿çšã§ããŸããããèšå®ãæ¡åŒµããŽã·ãšãŒã·ã§ã³ã«äœ¿çšãããå Žåãããã©ã«ãå€ã¯ãã®èšå®ãçç¥ãããå Žåã«æ¡åŒµãç¡å¹ã«ãªãããå®çŸ©ãããã°ãªããŸããïŒMUSTïŒã
10. ã»ãã¥ãªãã£äžã®èæ ®äºé
HTTP/3 ã®ã»ãã¥ãªãã£äžã®èæ ®äºé 㯠TLS ãçšãã HTTP/2 ãšæ¯èŒããŠé¡äŒŒããŠããã¯ãã§ãããã ããSection 10 ã®å€ãã®èæ ®äºé 㯠[QUIC-TRANSPORT] ã«é©çšããããã¡ãã§è°è«ãããŠããŸãã
10.2. ãããã³ã«éæ»æ
TLS ããã³ QUIC ãã³ãã·ã§ã€ã¯ã§ã® ALPN ã®äœ¿çšã«ãããã¢ããªã±ãŒã·ã§ã³å±€ã®ãã€ããåŠçãããåã«ã¿ãŒã²ããã¢ããªã±ãŒã·ã§ã³ãããã³ã«ã確ç«ãããŸããããã«ããããã¢ãåããããã³ã«ã䜿çšããŠãããšãã匷ãä¿èšŒãåŸãããŸãã
ããã¯ãã¹ãŠã®ãããã³ã«éæ»æããã®ä¿è·ãä¿èšŒãããã®ã§ã¯ãããŸãããSection 21.5 ã¯ãQUIC ãã±ããã®å¹³æãèªèšŒãããªããã©ã³ã¹ããŒãã䜿çšãããšã³ããã€ã³ãã«å¯Ÿãããªã¯ãšã¹ãåœé ã«ã©ã®ããã«å©çšããåŸããã説æããŠããŸãïŒ[QUIC-TRANSPORT]ïŒã
10.3. äžéè ã«ãã»ã«åæ»æ
HTTP/3 ã®ãã£ãŒã«ããšã³ã³ãŒãã£ã³ã°ã¯ãHTTP ã®æ§æïŒSection 5.1 ã®å®çŸ©ïŒã§ã¯æå¹ã§ãªãååã衚çŸããããšãèš±ããŸããç¡å¹ãªãã£ãŒã«ãåãå«ããªã¯ãšã¹ããã¬ã¹ãã³ã¹ã¯ MUST malformed ãšããŠæ±ãããŸãããããã£ãŠãäžéè ã¯ç¡å¹ãªãã£ãŒã«ãåãå«ã HTTP/3 ãªã¯ãšã¹ããã¬ã¹ãã³ã¹ã HTTP/1.1 ã¡ãã»ãŒãžã«å€æããããšã¯ã§ããŸããã
åæ§ã«ãHTTP/3 ã¯æå¹ã§ãªããã£ãŒã«ãå€ãéã¶ããšãã§ããŸããå€ãã®ãšã³ã³ãŒãå¯èœãªå€ã¯ãã£ãŒã«ãã®è§£æãå€ããŸãããã埩垰ïŒASCII 0x0dïŒãæ¹è¡ïŒASCII 0x0aïŒãããã³ãã«æåïŒASCII 0x00ïŒã¯ãéèªçã«ç¿»èš³ãããå Žåã«æ»æè ã«æªçšããåŸãŸãããã£ãŒã«ãå€ã§èš±å¯ãããªãæåãå«ããªã¯ãšã¹ããã¬ã¹ãã³ã¹ã¯ MUST malformed ãšããŠæ±ãããŸããæå¹ãªæå㯠Section 5.5 ã® "field-content" ABNF ã«ãŒã«ã§å®çŸ©ãããŠããŸãïŒ[HTTP]ïŒã
10.4. ããã·ã¥ãããã¬ã¹ãã³ã¹ã®ãã£ãã·ã¥å¯èœæ§
ããã·ã¥ãããã¬ã¹ãã³ã¹ã¯ã¯ã©ã€ã¢ã³ãããã®æç€ºçãªãªã¯ãšã¹ããæã¡ãŸããïŒãªã¯ãšã¹ãã¯ãµãŒãã PUSH_PROMISE ãã¬ãŒã ã§æäŸããŸãã
ããã·ã¥ãããã¬ã¹ãã³ã¹ã®ãã£ãã·ã¥ã¯ãCache-Control ããããã£ãŒã«ãã§ãªãªãžã³ãµãŒããæäŸããæéã«åºã¥ããŠå¯èœã§ããããããåäžã®ãµãŒããè€æ°ã®ããã³ãããã¹ãããŠããå Žåã¯åé¡ãåŒãèµ·ããå¯èœæ§ããããŸããäŸãã°ããµãŒããè€æ°ã®ãŠãŒã¶ã«ããããå°ã㪠URI 空éãæäŸããŠããå Žåãªã©ã§ãã
è€æ°ã®ããã³ããåäžãµãŒã空éãå ±æããå Žåããã®ãµãŒãã¯ããã³ããæš©éãæããªããªãœãŒã¹ã®è¡šçŸãããã·ã¥ã§ããªãããã«ããå¿ èŠããããŸãïŒMUSTïŒããããæ ããšãããã³ãããã£ãã·ã¥ããæäŸããã衚çŸãäžæžãããŠããŸãå¯èœæ§ããããŸãã
ã¯ã©ã€ã¢ã³ãã¯ããªãªãžã³ãµãŒããæš©åšããªãããã·ã¥ãããã¬ã¹ãã³ã¹ãæåŠããå¿ èŠããããŸãã詳现㯠Section 4.6 ãåç §ããŠãã ããã
10.5. ãµãŒãã¹æåŠïŒDoSïŒã«é¢ããèæ ®äºé
HTTP/3 æ¥ç¶ã¯ HTTP/1.1 ã HTTP/2 æ¥ç¶ãããéçšã«ããå€ãã®ãªãœãŒã¹ãèŠæ±ããå ŽåããããŸãããã£ãŒã«ãå§çž®ããããŒå¶åŸ¡ã®äœ¿çšã¯ãããå€ãã®ç¶æ ãä¿åããããã®ãªãœãŒã¹ã®ç¢ºä¿ãå¿ èŠãšããŸãããããã®æ©èœã®èšå®ã¯ããããã®æ©èœã«å¯Ÿããã¡ã¢ãªã®ã³ããããå³å¯ã«å¶éããããšãä¿èšŒããŸãã
PUSH_PROMISE ãã¬ãŒã ã®æ°ãåæ§ã«å¶çŽãããŸãããµãŒãããã·ã¥ãåãå ¥ããã¯ã©ã€ã¢ã³ãã¯ãåæã«çºè¡ãã push ID ã®æ°ãå¶éããããšã SHOULD ã§ãã
åŠçèœåïŒprocessing capacityïŒã¯ç¶æ 容éïŒstate capacityïŒã»ã©å¹æçã«å®ãããšãã§ããŸããã
ãã¢ãç¡èŠããããèŠæ±ãããæªå®çŸ©ã®ãããã³ã«èŠçŽ ãéä¿¡ããèœåã¯ããã¢ã«è¿œå ã®åŠçæéãè²»ããããããã«æªçšããåŸãŸããããã¯è€æ°ã®æªå®çŸ© SETTINGS ãã©ã¡ãŒã¿ãæªç¥ã®ãã¬ãŒã ã¿ã€ããæªç¥ã®ã¹ããªãŒã ã¿ã€ããèšå®ããããšã§è¡ããããããããŸããããã ãããªãã·ã§ã³ãšããŠçè§£ãããæ¡åŒµããã©ãã£ãã¯è§£æãžã®æµæãé«ããããã®ããã£ã³ã°ã®ãããªæ£åœãªäœ¿çšãååšããããšã«æ³šæããŠãã ããã
ãã£ãŒã«ãã»ã¯ã·ã§ã³ã®å§çž®ãåŠçè³æºã浪費ããæ©äŒãæäŸããŸãã詳现㯠Section 7 ã® [QPACK] ãåç §ããŠãã ããã
ããããã¹ãŠã®æ©èœââãµãŒãããã·ã¥ãæªç¥ã®ãããã³ã«èŠçŽ ããã£ãŒã«ãå§çž®ââã«ã¯æ£åœãªäœ¿çšæ³ããããŸãããããã®æ©èœã¯ãäžå¿ èŠãŸãã¯é床ã«äœ¿çšãããå Žåã«ã®ã¿è² æ ã«ãªããŸãã
ãã®ãããªæåãç£èŠããªããšã³ããã€ã³ãã¯ãµãŒãã¹æåŠæ»æã®ãªã¹ã¯ã«ãããããŸããå®è£ ã¯ãããã®æ©èœã®äœ¿çšã远跡ãã䜿çšã«å¶éãèšããããšã SHOULD ã§ãããšã³ããã€ã³ãã¯çãããæŽ»åã æ¥ç¶ãšã©ãŒ ãšã㊠H3_EXCESSIVE_LOAD ã®ã¿ã€ãã§æ±ãããšã MAY ãããŸããã誀å€å®ã¯æå¹ãªæ¥ç¶ããªã¯ãšã¹ãã劚ããããšã«ãªããŸãã
10.5.1. ãã£ãŒã«ãã»ã¯ã·ã§ã³ãµã€ãºã®å¶é
倧ããªãã£ãŒã«ãã»ã¯ã·ã§ã³ïŒSection 4.1ïŒã¯ãå®è£ ã«å€§éã®ç¶æ ã確ä¿ãããå¯èœæ§ããããŸããã«ãŒãã£ã³ã°ã«éèŠãªããããã£ãŒã«ãããããã»ã¯ã·ã§ã³ã®æ«å°Ÿã«çŸããããšããããããã«ãããããã»ã¯ã·ã§ã³ãæçµç®çå°ãžã¹ããªãŒãã³ã°ããããšã劚ããããå ŽåããããŸãããã®é åºæ§ããã£ãã·ã¥ã®æ£ç¢ºæ§ã確ä¿ãããªã©ã®çç±ããããšã³ããã€ã³ãã¯ãããã»ã¯ã·ã§ã³å šäœããããã¡ããå¿ èŠãçããããšãå€ãã§ãããã£ãŒã«ãã»ã¯ã·ã§ã³ã®ãµã€ãºã«ããŒããªãããããªããããããã€ãã®ãšã³ããã€ã³ãã¯ããããã£ãŒã«ãã®ããã«å©çšå¯èœãªå€§éã®ã¡ã¢ãªã確ä¿ãããããå¯èœæ§ããããŸãã
ãšã³ããã€ã³ã㯠SETTINGS_MAX_FIELD_SECTION_SIZEïŒSection 4.2.2ïŒ èšå®ã䜿çšããŠããã£ãŒã«ãã»ã¯ã·ã§ã³ã®ãµã€ãºã«é©çšããåŸãå¶éããã¢ã«å©èšããããšãã§ããŸãããã®èšå®ã¯å©èšçãªãã®ã«éããªãããããšã³ããã€ã³ãã¯ãã®éçãè¶ ãããã£ãŒã«ãã»ã¯ã·ã§ã³ãéä¿¡ããããšã MAY ããããã«ãããªã¯ãšã¹ããã¬ã¹ãã³ã¹ã malformed ãšèŠãªããããªã¹ã¯ãè² ããŸãããã®èšå®ã¯ HTTP/3 æ¥ç¶åºæã®ãã®ã§ãããããä»»æã®ãªã¯ãšã¹ããã¬ã¹ãã³ã¹ãããäœãæªç¥ã®å¶éãæã€ãããã«ééããå¯èœæ§ããããŸããã€ã³ã¿ãŒããã£ã¢ãªã¯ç°ãªããã¢ãæç€ºããå€ãæž¡ãããšã§ãã®åé¡ãåé¿ããããšããããšã¯ã§ããŸããããããã矩åã¯ãããŸããã
ãµãŒããèªåã§åŠçã§ãã以äžã®å€§ããã®ãã£ãŒã«ãã»ã¯ã·ã§ã³ãåä¿¡ããå ŽåãHTTP 431 (Request Header Fields Too Large) ã¹ããŒã¿ã¹ã³ãŒããè¿ãããšãã§ããŸãïŒ[RFC6585]ïŒãã¯ã©ã€ã¢ã³ãã¯åŠçã§ããªãã¬ã¹ãã³ã¹ãç Žæ£ããããšãã§ããŸãã
10.5.2. CONNECT ã«é¢ããåé¡
CONNECT ã¡ãœããã¯ãããã·ã«å¯ŸããŠäžåè¡¡ãªè² è·ãçãããåŸãŸãããªããªããã¹ããªãŒã äœæã¯ TCP æ¥ç¶ã®äœæã»ç¶æãšæ¯ã¹ãŠçžå¯Ÿçã«å®äŸ¡ã ããã§ãããã®ãã CONNECT ããµããŒããããããã·ã¯åæã«åãå ¥ãããªã¯ãšã¹ãæ°ã«å¯ŸããŠããæ éã«ãªããããããŸããã
ãããã·ã¯ CONNECT ãªã¯ãšã¹ããéã¶ã¹ããªãŒã ã®ééåŸã TCP æ¥ç¶ã®ããã®ããã€ãã®ãªãœãŒã¹ãä¿æããå ŽåããããŸãããªããªãå€åãã® TCP æ¥ç¶ã TIME_WAIT ç¶æ ã«æ®ãããã§ãããããèæ ®ããŠããããã·ã¯ TCP æ¥ç¶ãçµäºããåŸããã°ãã QUIC ã®ã¹ããªãŒã å¶éãå¢ããã®ãé ãããããšããããŸãã
10.6. å§çž®ã®äœ¿çš
å§çž®ã¯ãæ©å¯ããŒã¿ãæ»æè å¶åŸ¡äžã®ããŒã¿ãšåãã³ã³ããã¹ãã§å§çž®ããããšãã«æ»æè ãæ©å¯ããŒã¿ãå埩ããããšãå¯èœã«ããå ŽåããããŸããHTTP/3 ã¯ãã£ãŒã«ãã®å§çž®ãå¯èœã«ããŸãïŒSection 4.2ïŒã以äžã®æžå¿µã¯ãHTTP ã®å§çž®ã³ã³ãã³ãã³ãŒãã£ã³ã°ã®äœ¿çšã«ãé©çšãããŸãã詳ãã㯠Section 8.4.1 ãåç §ããŠãã ããïŒ[HTTP]ïŒã
Web ã®ç¹æ§ãæªçšããå§çž®ã«å¯Ÿããå®èšŒçãªæ»æãååšããŸãïŒäŸãã° [BREACH]ïŒãæ»æè ã¯ç°ãªããã¬ãŒã³ããã¹ããå«ãè€æ°ã®ãªã¯ãšã¹ããèªçºããããããã®çµæã®æå·æã®é·ãã芳å¯ããŸããç§å¯ã«é¢ããæšæž¬ãæ£ããå Žåã«ã¯çããªãããšãææããã«ããŸãã
ã»ãã¥ã¢ãã£ãã«ã§éä¿¡ããå®è£ ã¯ãæ©å¯ããŒã¿ã𿻿è å¶åŸ¡ã®ããŒã¿ãæ··åšããã³ã³ãã³ãããå¥ã ã®å§çž®ã³ã³ããã¹ãã䜿çšããªãéãå§çž®ããŠã¯ãªããŸããïŒMUST NOTïŒãããŒã¿ã®åºæã確å®ã«å€å¥ã§ããªãå Žåã¯å§çž®ã䜿çšããŠã¯ãªããŸããïŒMUST NOTïŒã
ãã£ãŒã«ãã»ã¯ã·ã§ã³ã®å§çž®ã«é¢ãããããªãèæ ®äºé 㯠[QPACK] ã«èšè¿°ãããŠããŸãã
10.7. ããã£ã³ã°ãšãã©ãã£ãã¯è§£æ
ããã£ã³ã°ã¯ãã¬ãŒã å å®¹ã®æ£ç¢ºãªãµã€ãºãé ãããã«äœ¿çšã§ããå§çž®ã³ã³ãã³ãã«æ»æè å¶åŸ¡ã®å¹³æãšç§å¯ããŒã¿ã®äž¡æ¹ãå«ãŸãããããªæ»æïŒäŸãã° [BREACH]ïŒã«å¯Ÿããç·©åçãšããŠæäŸãããŸãã
HTTP/2 ã PADDING ãã¬ãŒã ãä»ã®ãã¬ãŒã ã® Padding ãã£ãŒã«ããçšããŠãã©ãã£ãã¯è§£æã«å¯Ÿããèæ§ãé«ããã®ã«å¯ŸããHTTP/3 ã¯ãã©ã³ã¹ããŒãå±€ã®ããã£ã³ã°ã«äŸåããããããã㯠7.2.8 ããã³ 6.2.3 ã§è¿°ã¹ãäºçŽæžã¿ãã¬ãŒã ãšã¹ããªãŒã ã¿ã€ããçšããããšãã§ããŸãããããã®ããã£ã³ã°ææ³ã¯ãããã£ã³ã°ã®ç²åºŠãä¿è·å¯Ÿè±¡æ å ±ã«å¯Ÿããããã£ã³ã°ã®é 眮ããã±ããæå€±æã«ããã£ã³ã°ãé©çšããããã©ãããããã³å®è£ ãããã£ã³ã°ãå¶åŸ¡ããæ¹æ³ã«é¢ããŠç°ãªãçµæãçã¿ãŸãã
äºçŽæžã¿ã¹ããªãŒã ã¿ã€ãã¯ãæ¥ç¶ãã¢ã€ãã«ã§ãã£ãŠããã©ãã£ãã¯ãéä¿¡ããŠããããã«èŠããããããã«äœ¿çšã§ããŸããHTTP ãã©ãã£ãã¯ã¯ãã°ãã°ããŒã¹ãã§çºçãããããèŠããäžã®ãã©ãã£ãã¯ã¯ãã®ããŒã¹ãã®ã¿ã€ãã³ã°ãæç¶æéãé ãã®ã«äœ¿ããããšããããŸãããšã¯ããããã®ãããªãã©ãã£ãã¯ãåä¿¡è ã«ãã£ãŠãããŒå¶åŸ¡ããããããåä¿¡è ãè¿ éã«ãããã®ã¹ããªãŒã ãæ¶è²»ããŠè¿œå ã®ãããŒå¶åŸ¡ã¯ã¬ãžãããäžããªããšãéä¿¡è ã®å®ãã©ãã£ãã¯éä¿¡èœåãå¶éããŠããŸãå¯èœæ§ããããŸãã
å§çž®ã«äŸåããæ»æãç·©åããããã«ã¯ãããã£ã³ã°ãããå§çž®ãç¡å¹åãŸãã¯å¶éããæ¹ãæãŸããå ŽåããããŸãã
ããã£ã³ã°ã®äœ¿çšã¯çŽæçã«æåŸ ãããã»ã©ã®ä¿è·ãæäŸããªãå ŽåããããŸããåé·ãªããã£ã³ã°ã¯éã«æå®³ã«ãªãå¯èœæ§ãããããŸããæå€§ã§ããããã£ã³ã°ã¯èгå¯ãã¹ããã¬ãŒã æ°ãå¢ããããšã§æ»æè ãé·ãæ å ±ãæšæž¬ããã®ãå°é£ã«ããã«éããŸãããäžé©åã«å®è£ ãããããã£ã³ã°ã¹ããŒã ã¯å®¹æã«ç ŽãããŸããç¹ã«ãäºæž¬å¯èœãªååžãæã€ä¹±æ°ããã£ã³ã°ã¯ã»ãšãã©ä¿è·ãæäŸããŸãããåæ§ã«ãåºå®ãµã€ãºã«ãã€ããŒããããã£ã³ã°ããããšã¯ãæ»æè ããã¬ãŒã³ããã¹ããå¶åŸ¡ã§ããå Žåã«åºå®å¢çãè¶ãããšæ å ±ãæŽé²ããŸãã
10.8. ãã¬ãŒã è§£æ
ããã€ãã®ãããã³ã«èŠçŽ ã¯ãã¹ããããé·ãèŠçŽ ãå«ã¿ãéåžžã¯å¯å€é·æŽæ°ãå«ãæç€ºçãªé·ããæã€ãã¬ãŒã ã®åœ¢ãåããŸããããã¯äžæ³šæãªå®è£ è ã«ãšã£ãŠã»ãã¥ãªãã£ãªã¹ã¯ãããããå¯èœæ§ããããŸããå®è£ ã¯ãã¬ãŒã ã®é·ãããã®ãã¬ãŒã ãå«ããã£ãŒã«ãã®é·ããšæ£ç¢ºã«äžèŽããããšã MUST 確ä¿ããªããã°ãªããŸããã
10.9. æ©æããŒã¿
HTTP/3 ã§ã® 0-RTT ã®äœ¿çšã¯ãªãã¬ã€æ»æã®å±éºæ§ãçããããŸãã0-RTT ã HTTP/3 ã§äœ¿çšããå Žåã¯ã[HTTP-REPLAY] ã«èšè¿°ãããã¢ã³ããªãã¬ã€å¯Ÿçã MUST é©çšããå¿ èŠããããŸããHTTP/3 ã«å¯Ÿã㊠[HTTP-REPLAY] ãé©çšããéãTLS å±€ãžã®åç §ã¯ QUIC å ã§è¡ããããã³ãã·ã§ã€ã¯ãæããã¢ããªã±ãŒã·ã§ã³ããŒã¿ãžã®åç §ã¯ã¹ããªãŒã ã®å 容ãæããŸãã
10.10. ç§»è¡
ç¹å®ã® HTTP å®è£ ã¯ãã°èšé²ãã¢ã¯ã»ã¹å¶åŸ¡ã®ç®çã§ã¯ã©ã€ã¢ã³ãã¢ãã¬ã¹ã䜿çšããŸããQUIC ã¯ã©ã€ã¢ã³ãã®ã¢ãã¬ã¹ã¯æ¥ç¶äžã«å€ããå¯èœæ§ãããïŒå°æ¥ã®ããŒãžã§ã³ã§ã¯è€æ°ã®ã¢ãã¬ã¹ãåæäœ¿çšããããšããµããŒããããããããªãïŒããããã®ãããªå®è£ ã¯é¢é£æã«ã¯ã©ã€ã¢ã³ãã®çŸåšã®ã¢ãã¬ã¹ãèœåçã«ååŸããããå ã®ã¢ãã¬ã¹ãå€ããå¯èœæ§ãæç€ºçã«åãå ¥ããå¿ èŠããããŸãã
10.11. ãã©ã€ãã·ãŒã«é¢ããèæ ®äºé
HTTP/3 ã®ããã€ãã®ç¹æ§ã¯ã芳枬è ã«åäžã®ã¯ã©ã€ã¢ã³ããŸãã¯ãµãŒãã®åäœãæéãéããŠçžé¢ãããæ©äŒãäžããå¯èœæ§ããããŸããããã«ã¯èšå®å€ãåºæ¿ã«å¯Ÿããåå¿ã®ã¿ã€ãã³ã°ãããã³èšå®ã§å¶åŸ¡ãããæ©èœã®æ±ããå«ãŸããŸãã
ããããæ¯ãèãã«èгå¯å¯èœãªå·®ç°ãçããããéãããããã¯ç¹å®ã®ã¯ã©ã€ã¢ã³ãã®ãã£ã³ã¬ãŒããªã³ããäœæããåºç€ãšããŠäœ¿çšããåŸãŸãã
HTTP/3 ãåäžã® QUIC æ¥ç¶ã®äœ¿çšã奜ãããšã¯ããµã€ãäžã§ã®ãŠãŒã¶ã®æŽ»åã®çžé¢ãå¯èœã«ããŸããç°ãªããªãªãžã³ã«å¯ŸããŠæ¥ç¶ãåå©çšããããšã¯ããããã®ãªãªãžã³éã§ã®æŽ»åã®çžé¢ãèš±ããŸãã
QUIC ã®ããã€ãã®æ©èœã¯å³æã®å¿çãèŠæ±ãããšã³ããã€ã³ãããã¢ãžã®é å»¶ãæž¬å®ããããã«äœ¿çšããããšãã§ããŸããããã¯ç¹å®ã®ã·ããªãªã§ãã©ã€ãã·ãŒäžã®åœ±é¿ãæã¡åŸãŸãã
11. IANA ã«é¢ããèæ ®äºé
ãã®ææžã¯æ°ãã ALPN ãããã³ã«èå¥åãç»é²ããŸãïŒSection 11.1ïŒããã³ HTTP/3 ã«ãããã³ãŒããã€ã³ãã®å²ãåœãŠã管çããæ°ããã¬ãžã¹ããªãäœæããŸãã
11.1. HTTP/3 è奿ååã®ç»é²
ãã®ææžã¯ã"TLS Application-Layer Protocol Negotiation (ALPN) Protocol IDs" ã¬ãžã¹ããªïŒ[RFC7301]ïŒã«ããã HTTP/3 ã®èå¥ã®ããã®æ°ããç»é²ãäœæããŸãã
"h3" ãšããæåå㯠HTTP/3 ãèå¥ããŸãïŒ
- Protocol:
-
HTTP/3
- Identification Sequence:
-
0x68 0x33 ("h3")
- Specification:
-
æ¬æž
11.2. æ°ããã¬ãžã¹ããª
æ¬æžã§äœæãããæ°ããã¬ãžã¹ããªã¯ãSection 22.1 ã® QUIC ç»é²ããªã·ãŒã«åŸã£ãŠéçšãããŸãïŒ[QUIC-TRANSPORT]ïŒããããã®ã¬ãžã¹ããªã¯ãã¹ãŠãSection 22.1.1 ã«èšèŒãããå ±éãã£ãŒã«ã矀ãå«ã¿ãŸãïŒ[QUIC-TRANSPORT]ïŒããããã®ã¬ãžã¹ããªã¯ "Hypertext Transfer Protocol version 3 (HTTP/3)" èŠåºãã®äžã«åéãããŸãã
ãããã®ã¬ãžã¹ããªã®åæå²åœã¯ãã¹ãŠæä¹ çãªã¹ããŒã¿ã¹ãšããŠå²ãåœãŠããã倿Žç®¡çè ãšã㊠IETFãããã³é£çµ¡å ãšã㊠HTTP ã¯ãŒãã³ã°ã°ã«ãŒãïŒietf-http-wg@w3.orgïŒãèšèŒãããŠããŸãã
11.2.1. ãã¬ãŒã ã¿ã€ã
æ¬æžã¯ HTTP/3 ãã¬ãŒã ã¿ã€ãã³ãŒãã®ããã®ã¬ãžã¹ããªã確ç«ããŸãã"HTTP/3 Frame Types" ã¬ãžã¹ããªã¯ 62 ããã空éã管çããŸãããã®ã¬ãžã¹ããªã¯ QUIC ã®ã¬ãžã¹ããªããªã·ãŒã«åŸããŸãïŒè©³çŽ°ã¯ Section 11.2 ãåç §ããŠãã ãããæä¹ çç»é²ã¯ Specification Required ããªã·ãŒãçšããŠå²ãåœãŠãããŸãïŒ[RFC8126]ïŒããã ã 0x00 ãã 0x3fïŒ16 é²ã䞡端å«ãïŒãŸã§ã®å€ã¯ Section 4.9 ããã³ 4.10 ã«å®çŸ©ããã Standards Action ãŸã㯠IESG æ¿èªã«ãã£ãŠå²ãåœãŠãããŸãïŒ4.9ã4.10 ãåç §ïŒã
ãã®ã¬ãžã¹ããªã¯ [HTTP/2] ã§å®çŸ©ããã "HTTP/2 Frame Type" ã¬ãžã¹ããªãšã¯å¥ã§ãããã³ãŒã空éãéãªãå Žåã«ã¯å²ãåœãŠã䞊è¡ããããšãæãŸããã§ããããã¬ãžã¹ããªã«ã®ã¿ååšãããšã³ããªã«ã€ããŠã¯ã察å¿ããå€ãç¡é¢ä¿ãªæäœã«å²ãåœãŠãªãããæå€§éã®åªåïŒSHOULDïŒãæãããã¹ãã§ãããšãã¹ããŒãã¬ãã¥ã¯ã¯ã察å¿ããã¬ãžã¹ããªã®åãå€ãšè¡çªããç¡é¢ä¿ãªç»é²ãæåŠããããšã MAY ãããŸãã
Section 11.2 ã«èšèŒãããå ±éãã£ãŒã«ãã«å ããŠããã®ã¬ãžã¹ããªã®æä¹ çç»é²ã¯æ¬¡ã®ãã£ãŒã«ããå«ãŸãªããã°ãªããŸããïŒMUSTïŒïŒ
- Frame Type:
-
ãã¬ãŒã ã¿ã€ãã®ååãŸãã¯ã©ãã«ã
ãã¬ãŒã ã¿ã€ãã®ä»æ§ã¯ããã¬ãŒã ã®ã¬ã€ã¢ãŠããšãã®ã»ãã³ãã£ã¯ã¹ïŒæ¡ä»¶ä»ãã§ååšããéšåãå«ãïŒã«ã€ããŠã®èšè¿°ãå«ãŸãªããã°ãªããŸããïŒMUSTïŒã
Table 2 ã®ãšã³ããªã¯æ¬æžã«ãã£ãŠç»é²ãããŸãã
| Frame Type | Value | Specification |
|---|---|---|
| DATA | 0x00 | Section 7.2.1 |
| HEADERS | 0x01 | Section 7.2.2 |
| Reserved | 0x02 | This document |
| CANCEL_PUSH | 0x03 | Section 7.2.3 |
| SETTINGS | 0x04 | Section 7.2.4 |
| PUSH_PROMISE | 0x05 | Section 7.2.5 |
| Reserved | 0x06 | This document |
| GOAWAY | 0x07 | Section 7.2.6 |
| Reserved | 0x08 | This document |
| Reserved | 0x09 | This document |
| MAX_PUSH_ID | 0x0d | Section 7.2.7 |
åœ¢åŒ 0x1f * N + 0x21ïŒéè² æŽæ° NïŒã«ãããåã³ãŒãïŒäŸïŒ0x21, 0x40, ... ãã 0x3ffffffffffffffe ãŸã§ïŒã¯ IANA ã«ãã£ãŠå²ãåœãŠãããŠã¯ãªããïŒMUST NOTïŒãå²ãåœãŠæžã¿å€ã®äžèЧã«çŸããŠã¯ãªããŸããïŒMUST NOTïŒã
11.2.2. èšå®ãã©ã¡ãŒã¿
æ¬æžã¯ HTTP/3 èšå®ã®ããã®ã¬ãžã¹ããªã確ç«ããŸãã"HTTP/3 Settings" ã¬ãžã¹ããªã¯ 62 ããã空éã管çããŸãããã®ã¬ãžã¹ããªã¯ QUIC ã®ã¬ãžã¹ããªããªã·ãŒã«åŸããŸãïŒè©³çŽ°ã¯ Section 11.2 ãåç §ããŠãã ãããæä¹ çç»é²ã¯ Specification Required ããªã·ãŒã§å²ãåœãŠãããŸãïŒ[RFC8126]ïŒããã ã 0x00 ãã 0x3fïŒ16 é²ã䞡端å«ãïŒãŸã§ã®å€ã¯ Standards Action ãŸã㯠IESG æ¿èªã«ãã£ãŠå²ãåœãŠãããŸãïŒé¢é£ã»ã¯ã·ã§ã³åç §ïŒã
ãã®ã¬ãžã¹ããªã¯ [HTTP/2] ã® "HTTP/2 Settings" ã¬ãžã¹ããªãšã¯å¥ã§ãããå²ãåœãŠã¯äžŠè¡ããããšãæãŸããã§ããããã¬ãžã¹ããªã«ã®ã¿ååšãããšã³ããªã«ã€ããŠã¯ã察å¿ããå€ãç¡é¢ä¿ãªæäœã«å²ãåœãŠãªãããæå€§éã®åªåïŒSHOULDïŒãæãããã¹ãã§ãããšãã¹ããŒãã¬ãã¥ã¯ã¯ç«¶åããç»é²ãæåŠããããšã MAY ãããŸãã
Section 11.2 ã«èšèŒãããå ±éãã£ãŒã«ãã«å ããŠããã®ã¬ãžã¹ããªã®æä¹ çç»é²ã¯æ¬¡ã®ãã£ãŒã«ããå«ãŸãªããã°ãªããŸããïŒMUSTïŒïŒ
- Setting Name:
-
èšå®ã®è±¡åŸŽçãªååãèšå®åã®æå®ã¯ä»»æã§ãã
- Default:
-
ç¹ã«ç€ºãããªãéãèšå®ã®å€ãããã©ã«ãã¯å¯èœãªéãæãå¶éçãªå€ã§ããããšã SHOULD ã§ãã
Table 3 ã®ãšã³ããªã¯æ¬æžã«ãã£ãŠç»é²ãããŸãã
| Setting Name | Value | Specification | Default |
|---|---|---|---|
| Reserved | 0x00 | This document | N/A |
| Reserved | 0x02 | This document | N/A |
| Reserved | 0x03 | This document | N/A |
| Reserved | 0x04 | This document | N/A |
| Reserved | 0x05 | This document | N/A |
| MAX_FIELD_SECTION_SIZE | 0x06 | Section 7.2.4.1 | Unlimited |
衚瀺äžã®çç±ãããèšå®å㯠'SETTINGS_' ãã¬ãã£ãã¯ã¹ãé€å»ããŠççž®ããããšãã§ããŸãã
åœ¢åŒ 0x1f * N + 0x21ïŒéè² æŽæ° NïŒã«ãããåã³ãŒãïŒäŸïŒ0x21, 0x40, ... ãã 0x3ffffffffffffffe ãŸã§ïŒã¯ IANA ã«ãã£ãŠå²ãåœãŠãããŠã¯ãªããïŒMUST NOTïŒãå²ãåœãŠæžã¿å€ã®äžèЧã«çŸããŠã¯ãªããŸããïŒMUST NOTïŒã
11.2.3. ãšã©ãŒã³ãŒã
æ¬æžã¯ HTTP/3 ãšã©ãŒã³ãŒãã®ããã®ã¬ãžã¹ããªã確ç«ããŸãã"HTTP/3 Error Codes" ã¬ãžã¹ããªã¯ 62 ããã空éã管çããŸãããã®ã¬ãžã¹ããªã¯ QUIC ã®ã¬ãžã¹ããªããªã·ãŒã«åŸããŸãïŒè©³çŽ°ã¯ Section 11.2 ãåç §ããŠãã ãããæä¹ çç»é²ã¯ Specification Required ããªã·ãŒã§å²ãåœãŠãããŸãïŒ[RFC8126]ïŒããã ã 0x00 ãã 0x3fïŒ16 é²ã䞡端å«ãïŒãŸã§ã®å€ã¯ Standards Action ãŸã㯠IESG æ¿èªã«ãã£ãŠå²ãåœãŠãããŸãã
ãšã©ãŒã³ãŒãã®ç»é²ã«ã¯ãšã©ãŒã³ãŒãã®èª¬æãå«ããããšãèŠæ±ãããŸãããšãã¹ããŒãã¬ãã¥ã¯ã¯æ¢åã®ãšã©ãŒã³ãŒããšã®éè€ã®å¯èœæ§ãæ€èšããããå§ããããŸããæ¢åã®ç»é²ã®äœ¿çšã¯å¥šå±ãããŸããã匷å¶ãããŸããã"HTTP/2 Error Code" ã¬ãžã¹ããªã«ç»é²ãããå€ã®äœ¿çšã¯æšå¥šãããããšãã¹ããŒãã¬ãã¥ã¯ã¯ãã®ãããªç»é²ãæåŠããããšã MAY ãããŸãã
Section 11.2 ã«èšèŒãããå ±éãã£ãŒã«ãã«å ããŠããã®ã¬ãžã¹ããªã¯ 2 ã€ã®è¿œå ãã£ãŒã«ããå«ã¿ãŸããæä¹ çç»é²ã¯æ¬¡ã®ãã£ãŒã«ããå«ãŸãªããã°ãªããŸããïŒMUSTïŒïŒ
- Name:
-
ãšã©ãŒã³ãŒãã®ååã
- Description:
-
ãšã©ãŒã³ãŒãã®ã»ãã³ãã£ã¯ã¹ã®ç°¡æœãªèª¬æã
Table 4 ã®ãšã³ããªã¯æ¬æžã«ãã£ãŠç»é²ãããŸãããããã®ãšã©ãŒã³ãŒã㯠HTTP/2 ã®ãšã©ãŒã³ãŒããšè¡çªããªããã Specification Required ããªã·ãŒã®ç¯å²ããéžæãããŠããŸãã
| Name | Value | Description | Specification |
|---|---|---|---|
| H3_NO_ERROR | 0x0100 | ãšã©ãŒãªã | Section 8.1 |
| H3_GENERAL_PROTOCOL_ERROR | 0x0101 | äžè¬çãªãããã³ã«ãšã©ãŒ | Section 8.1 |
| H3_INTERNAL_ERROR | 0x0102 | å éšãšã©ãŒ | Section 8.1 |
| H3_STREAM_CREATION_ERROR | 0x0103 | ã¹ããªãŒã äœæãšã©ãŒ | Section 8.1 |
| H3_CLOSED_CRITICAL_STREAM | 0x0104 | éèŠãªã¹ããªãŒã ãéãããã | Section 8.1 |
| H3_FRAME_UNEXPECTED | 0x0105 | çŸåšã®ç¶æ ã§èš±å¯ãããªããã¬ãŒã | Section 8.1 |
| H3_FRAME_ERROR | 0x0106 | ãã¬ãŒã ãã¬ã€ã¢ãŠããŸãã¯ãµã€ãºèŠåã«éå | Section 8.1 |
| H3_EXCESSIVE_LOAD | 0x0107 | é床ã®è² è·ãçæããã㢠| Section 8.1 |
| H3_ID_ERROR | 0x0108 | èå¥åã誀çšããã | Section 8.1 |
| H3_SETTINGS_ERROR | 0x0109 | SETTINGS ãã¬ãŒã ãç¡å¹ãªå€ãå«ãã§ãã | Section 8.1 |
| H3_MISSING_SETTINGS | 0x010a | SETTINGS ãã¬ãŒã ãåä¿¡ãããªãã£ã | Section 8.1 |
| H3_REQUEST_REJECTED | 0x010b | ãªã¯ãšã¹ããåŠçãããªãã£ã | Section 8.1 |
| H3_REQUEST_CANCELLED | 0x010c | ããŒã¿ããã¯ãäžèŠ | Section 8.1 |
| H3_REQUEST_INCOMPLETE | 0x010d | ã¹ããªãŒã ãæ©æçµäº | Section 8.1 |
| H3_MESSAGE_ERROR | 0x010e | ã¡ãã»ãŒãžã malformed | Section 8.1 |
| H3_CONNECT_ERROR | 0x010f | CONNECT ãªã¯ãšã¹ãã® TCP ãªã»ãããŸãã¯ãšã©ãŒ | Section 8.1 |
| H3_VERSION_FALLBACK | 0x0110 | HTTP/1.1 ã§åè©Šè¡ | Section 8.1 |
åœ¢åŒ 0x1f * N + 0x21ïŒéè² æŽæ° NïŒã«ãããåã³ãŒãïŒäŸïŒ0x21, 0x40, ... ãã 0x3ffffffffffffffe ãŸã§ïŒã¯ IANA ã«ãã£ãŠå²ãåœãŠãããŠã¯ãªããïŒMUST NOTïŒãå²ãåœãŠæžã¿å€ã®äžèЧã«çŸããŠã¯ãªããŸããïŒMUST NOTïŒã
11.2.4. ã¹ããªãŒã ã¿ã€ã
æ¬æžã¯ HTTP/3 ã®äžæ¹åã¹ããªãŒã ã¿ã€ãã®ããã®ã¬ãžã¹ããªã確ç«ããŸãã"HTTP/3 Stream Types" ã¬ãžã¹ããªã¯ 62 ããã空éã管çããŸãããã®ã¬ãžã¹ããªã¯ QUIC ã®ã¬ãžã¹ããªããªã·ãŒã«åŸããŸãïŒè©³çŽ°ã¯ Section 11.2 ãåç §ããŠãã ãããæä¹ çç»é²ã¯ Specification Required ããªã·ãŒã§å²ãåœãŠãããŸãïŒ[RFC8126]ïŒããã ã 0x00 ãã 0x3fïŒ16 é²ã䞡端å«ãïŒãŸã§ã®å€ã¯ Standards Action ãŸã㯠IESG æ¿èªã«ãã£ãŠå²ãåœãŠãããŸãã
Section 11.2 ã«èšèŒãããå ±éãã£ãŒã«ãã«å ããŠããã®ã¬ãžã¹ããªã®æä¹ çç»é²ã¯æ¬¡ã®ãã£ãŒã«ããå«ãŸãªããã°ãªããŸããïŒMUSTïŒïŒ
- Stream Type:
-
ã¹ããªãŒã ã¿ã€ãã®ååãŸãã¯ã©ãã«ã
- Sender:
-
ã©ã®ãšã³ããã€ã³ãããã®ã¿ã€ãã®ã¹ããªãŒã ãéå§ã§ããããå€ã¯ "Client"ã"Server"ããŸã㯠"Both"ã
æä¹ çç»é²ã®ä»æ§ã¯ãã¹ããªãŒã ã¿ã€ãã®èª¬æïŒã¹ããªãŒã å 容ã®ã¬ã€ã¢ãŠããšã»ãã³ãã£ã¯ã¹ãå«ãïŒãå«ãŸãªããã°ãªããŸããïŒMUSTïŒã
Table 5 ã®ãšã³ããªã¯æ¬æžã«ãã£ãŠç»é²ãããŸãã
| Stream Type | Value | Specification | Sender |
|---|---|---|---|
| Control Stream | 0x00 | Section 6.2.1 | Both |
| Push Stream | 0x01 | Section 4.6 | Server |
åœ¢åŒ 0x1f * N + 0x21ïŒéè² æŽæ° NïŒã«ãããåã³ãŒãïŒäŸïŒ0x21, 0x40, ... ãã 0x3ffffffffffffffe ãŸã§ïŒã¯ IANA ã«ãã£ãŠå²ãåœãŠãããŠã¯ãªããïŒMUST NOTïŒãå²ãåœãŠæžã¿å€ã®äžèЧã«çŸããŠã¯ãªããŸããïŒMUST NOTïŒã
12. åèæç®
12.1. èŠç¯çåç §
- [ALTSVC]
- Nottingham, M., McManus, P., and J. Reschke, âHTTP Alternative Servicesâ, RFC 7838, DOI 10.17487/RFC7838, April 2016, <https://www.rfc-editor.org/info/rfc7838>.
- [COOKIES]
- Barth, A., âHTTP State Management Mechanismâ, RFC 6265, DOI 10.17487/RFC6265, 2011幎4æ, <https://www.rfc-editor.org/info/rfc6265>.
- [HTTP-CACHING]
- Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, Ed., âHTTP Cachingâ, STD 98, RFC 9111, DOI 10.17487/RFC9111, 2022幎6æ, <https://www.rfc-editor.org/info/rfc9111>.
- [HTTP-REPLAY]
- Thomson, M., Nottingham, M., and W. Tarreau, âUsing Early Data in HTTPâ, RFC 8470, DOI 10.17487/RFC8470, 2018幎9æ, <https://www.rfc-editor.org/info/rfc8470>.
- [HTTP]
- Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, Ed., âHTTP Semanticsâ, STD 97, RFC 9110, DOI 10.17487/RFC9110, 2022幎6æ, <https://www.rfc-editor.org/info/rfc9110>.
- [QPACK]
- Krasic, C., Bishop, M., and A. Frindell, Ed., âQPACK: Field Compression for HTTP/3â, RFC 9204, DOI 10.17487/RFC9204, 2022幎6æ, <https://www.rfc-editor.org/info/rfc9204>.
- [QUIC-TRANSPORT]
- Iyengar, J., Ed. and M. Thomson, Ed., âQUIC: A UDP-Based Multiplexed and Secure Transportâ, RFC 9000, DOI 10.17487/RFC9000, 2021幎5æ, <https://www.rfc-editor.org/info/rfc9000>.
- [RFC0793]
- Postel, J., âTransmission Control Protocolâ, STD 7, RFC 793, DOI 10.17487/RFC0793, 1981幎9æ, <https://www.rfc-editor.org/info/rfc793>.
- [RFC2119]
- Bradner, S., âKey words for use in RFCs to Indicate Requirement Levelsâ, BCP 14, RFC 2119, DOI 10.17487/RFC2119, 1997幎3æ, <https://www.rfc-editor.org/info/rfc2119>.
- [RFC6066]
- Eastlake 3rd, D., âTransport Layer Security (TLS) Extensions: Extension Definitionsâ, RFC 6066, DOI 10.17487/RFC6066, 2011幎1æ, <https://www.rfc-editor.org/info/rfc6066>.
- [RFC7301]
- Friedl, S., Popov, A., Langley, A., and E. Stephan, âTransport Layer Security (TLS) Application-Layer Protocol Negotiation Extensionâ, RFC 7301, DOI 10.17487/RFC7301, 2014幎7æ, <https://www.rfc-editor.org/info/rfc7301>.
- [RFC8126]
- Cotton, M., Leiba, B., and T. Narten, âGuidelines for Writing an IANA Considerations Section in RFCsâ, BCP 26, RFC 8126, DOI 10.17487/RFC8126, 2017幎6æ, <https://www.rfc-editor.org/info/rfc8126>.
- [RFC8174]
- Leiba, B., âAmbiguity of Uppercase vs Lowercase in RFC 2119 Key Wordsâ, BCP 14, RFC 8174, DOI 10.17487/RFC8174, 2017幎5æ, <https://www.rfc-editor.org/info/rfc8174>.
- [URI]
- Berners-Lee, T., Fielding, R., and L. Masinter, âUniform Resource Identifier (URI): Generic Syntaxâ, STD 66, RFC 3986, DOI 10.17487/RFC3986, 2005幎1æ, <https://www.rfc-editor.org/info/rfc3986>.
12.2. æ å ±çåç §
- [BREACH]
- Gluck, Y., Harris, N., and A. Prado, âBREACH: Reviving the CRIME Attackâ, 2013幎7æ, <http://breachattack.com/resources/BREACH%20-%20SSL,%20gone%20in%2030%20seconds.pdf>.
- [DNS-TERMS]
- Hoffman, P., Sullivan, A., and K. Fujiwara, âDNS Terminologyâ, BCP 219, RFC 8499, DOI 10.17487/RFC8499, 2019幎1æ, <https://www.rfc-editor.org/info/rfc8499>.
- [HPACK]
- Peon, R. and H. Ruellan, âHPACK: Header Compression for HTTP/2â, RFC 7541, DOI 10.17487/RFC7541, 2015幎5æ, <https://www.rfc-editor.org/info/rfc7541>.
- [HTTP/1.1]
- Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, Ed., âHTTP/1.1â, STD 99, RFC 9112, DOI 10.17487/RFC9112, 2022幎6æ, <https://www.rfc-editor.org/info/rfc9112>.
- [HTTP/2]
- Thomson, M., Ed. and C. Benfield, Ed., âHTTP/2â, RFC 9113, DOI 10.17487/RFC9113, 2022幎6æ, <https://www.rfc-editor.org/info/rfc9113>.
- [RFC6585]
- Nottingham, M. and R. Fielding, âAdditional HTTP Status Codesâ, RFC 6585, DOI 10.17487/RFC6585, 2012幎4æ, <https://www.rfc-editor.org/info/rfc6585>.
- [RFC8164]
- Nottingham, M. and M. Thomson, âOpportunistic Security for HTTP/2â, RFC 8164, DOI 10.17487/RFC8164, 2017幎5æ, <https://www.rfc-editor.org/info/rfc8164>.
- [TFO]
- Cheng, Y., Chu, J., Radhakrishnan, S., and A. Jain, âTCP Fast Openâ, RFC 7413, DOI 10.17487/RFC7413, 2014幎12æ, <https://www.rfc-editor.org/info/rfc7413>.
- [TLS]
- Rescorla, E., âThe Transport Layer Security (TLS) Protocol Version 1.3â, RFC 8446, DOI 10.17487/RFC8446, 2018幎8æ, <https://www.rfc-editor.org/info/rfc8446>.
Appendix A. HTTP/2 ããã®ç§»è¡ã«é¢ããèæ ®äºé
HTTP/3 㯠HTTP/2 ã«å€§ãã圱é¿ãåããŠãããå€ãã®é¡äŒŒç¹ãæã¡ãŸããæ¬ç¯ã§ã¯ HTTP/3 ã®èšèšæ¹éã説æããHTTP/2 ãšã®éèŠãªçžéç¹ãææããHTTP/2 ã®æ¡åŒµã HTTP/3 ã«ãããããæ¹æ³ãè¿°ã¹ãŸãã
HTTP/3 㯠HTTP/2 ãšé¡äŒŒããŠããããšãæãŸãããšããåæããå§ãŸããŸãããããã¯çµ¶å¯ŸçãªèŠä»¶ã§ã¯ãããŸãããQUIC ã TCP ãšç°ãªãç¹ã«ãããŠãHTTP/3 㯠QUIC ã®ç¹åŸŽïŒã¹ããªãŒã çïŒã掻ãããããéèŠãªæ¬ ç¹ïŒç·é åºã®æ¬ åŠãªã©ïŒã«å¯ŸåŠããããã« HTTP/2 ããéžè±ããŸãããªã¯ãšã¹ããšã¬ã¹ãã³ã¹ã®ã¹ããªãŒã ãžã®é¢é£ãªã©ã®äž»èŠãªç¹ã§ã¯ HTTP/3 㯠HTTP/2 ã«äŒŒãŠããŸãããèšèšã®è©³çްã¯å€§ããç°ãªããŸãã
ããã§ã¯ããã€ãã®éèŠãªçžéç¹ã瀺ããŸãã
A.1. ã¹ããªãŒã
HTTP/3 㯠HTTP/2 ãããå€ãã®ã¹ããªãŒã ïŒ262-1ïŒã䜿çšå¯èœã«ããŸããã¹ããªãŒã èå¥å空éã®æ¯æžã«é¢ããåæ§ã®èæ ®äºé ã¯é©çšãããŸããããã®ç©ºéã¯ã¯ããã«å€§ãããããæ¥ç¶ãããŒå¶åŸ¡ãŠã£ã³ããŠã®äžéãªã© QUIC ã®ä»ã®å¶éã«å ã«å°éããå¯èœæ§ãé«ããªããŸãã
HTTP/2 ãšå¯Ÿç §çã«ãHTTP/3 ã®ã¹ããªãŒã ã®åææ§ã¯ QUIC ã«ãã£ãŠç®¡çãããŸããQUIC ã¯ãã¹ãŠã®ããŒã¿ãåä¿¡ããéä¿¡ããŒã¿ããã¢ã«ãã£ãŠç¢ºèªå¿çããããšã¹ããªãŒã ãéãããããšèŠãªããŸããHTTP/2 㯠END_STREAM ããããå«ããã¬ãŒã ããã©ã³ã¹ããŒãã«ã³ãããããããšãã«ã¹ããªãŒã ãéãããããšèŠãªããŸãããã®çµæãåçã®äº€æã®ããã®ã¹ããªãŒã ãããé·ãæéãã¢ã¯ãã£ããã®ãŸãŸã«ãªãå¯èœæ§ããããŸããHTTP/3 ãµãŒãã¯ãæåŸ ããã䜿çšãã¿ãŒã³ã«å¿ã㊠HTTP/2 ãšåçã®äžŠåæ§ãéæããããã«ãã¯ã©ã€ã¢ã³ãéå§ã®åæ¹åã¹ããªãŒã ã®ãã倧ããªæ°ãèš±å¯ããããšãéžæãããããããŸããã
HTTP/2 ã§ã¯ããªã¯ãšã¹ãããã³ã¬ã¹ãã³ã¹æ¬äœïŒDATA ãã¬ãŒã ã®ãã€ããŒãïŒã®ã¿ããããŒå¶åŸ¡ã®å¯Ÿè±¡ã§ãããHTTP/3 ã§ã¯ãã¹ãŠã® HTTP/3 ãã¬ãŒã ã QUIC ã¹ããªãŒã äžã§éä¿¡ãããããããã¹ãŠã®ã¹ããªãŒã äžã®ãã¹ãŠã®ãã¬ãŒã ããããŒå¶åŸ¡ã®å¯Ÿè±¡ãšãªããŸãã
ä»ã®äžæ¹åã¹ããªãŒã ã¿ã€ããååšãããããHTTP/3 ã¯çºçäžã®ããã·ã¥ã®æ°ãå¶åŸ¡ããããã«äžæ¹åã¹ããªãŒã ã®æ°ã ãã«äŸåããŸããã代ããã«ãHTTP/3 ã¯ã©ã€ã¢ã³ã㯠MAX_PUSH_ID ãã¬ãŒã ã䜿çšããŠãµãŒããéä¿¡ããããã·ã¥ã®æ°ãå¶åŸ¡ããŸãã
A.2. HTTP ãã¬ãŒã ã¿ã€ã
å€ãã®ãã¬ãŒãã³ã°æŠå¿µã¯ QUIC äžã§ã¯çç¥å¯èœã§ãããã¬ãŒã ã¯ãã§ã«ã¹ããªãŒã äžã«ãããããã¹ããªãŒã çªå·ãçç¥ã§ããŸãããã¬ãŒã ã¯å€éåã劚ããªãããïŒQUIC ã®å€éåã¯ãã®å±€ã®äžã§è¡ãããïŒãå¯å€æå€§é·ãã±ããã®ãµããŒããåãé€ããŸããã¹ããªãŒã çµäºã¯ QUIC ã«ãã£ãŠåŠçããããããEND_STREAM ãã©ã°ã¯äžèŠã§ããããã«ããäžè¬çãªãã¬ãŒã ã¬ã€ã¢ãŠããã Flags ãã£ãŒã«ããåé€ã§ããŸãã
ãã¬ãŒã ãã€ããŒãã¯äž»ã« [HTTP/2] ããåãããŠããŸãããã ããQUIC ã¯ãããŒå¶åŸ¡çå€ãã®æ©èœãå«ã¿ãããã㯠HTTP/3 ã§åå®è£ ãããŠããŸããããã®çµæãHTTP/2 ã®ããã€ãã®ãã¬ãŒã ã¿ã€ã㯠HTTP/3 ã§ã¯äžèŠãšãªã£ãŠããŸããHTTP/2 ã§å®çŸ©ããããã¬ãŒã ããã¯ã䜿ãããªãå Žåããã®ãã¬ãŒã ID ã¯äºææ§ãé«ããããã«äºçŽãããŠããŸããããããäž¡æ¹ã«åºçŸãããã¬ãŒã ã¿ã€ãã§ãæå³è«ã¯å¿ ãããåäžã§ã¯ãããŸããã
å€ãã®éãã¯ãHTTP/2 ããã¹ãŠã®ã¹ããªãŒã ã«è·šããã¬ãŒã éã®çµ¶å¯Ÿçãªé åºä»ããæäŸããã®ã«å¯ŸããQUIC ã¯åã¹ããªãŒã ããšã«ã®ã¿ãã®ä¿èšŒãæäŸããäºå®ã«èµ·å ããŸãããã®ããããããã¬ãŒã ã¿ã€ããç°ãªãã¹ããªãŒã ããã®ãã¬ãŒã ãéä¿¡é ã«åä¿¡ããããšããä»®å®ãè¡ã£ãŠããå ŽåãHTTP/3 ã§ã¯ããã厩ããŸãã
以äžã«æ©èœé©å¿ã®ããã€ãã®äŸãšãHTTP/2 ã®æ¡åŒµã HTTP/3 ã«å€æããæ¡åŒµãã¬ãŒã å®è£ è ãžã®äžè¬çãªæéã瀺ããŸãã
A.2.1. åªå é äœä»ãã®éã
HTTP/2 㯠PRIORITY ãã¬ãŒã ãïŒãªãã·ã§ã³ã§ïŒHEADERS ãã¬ãŒã ã§åªå é äœãæå®ããŸããHTTP/3 ã«ã¯åªå é äœãä¿¡å·ããææ®µã¯æäŸãããŠããŸããã
æç€ºçãªåªå é äœã·ã°ããªã³ã°ããªããããšãã£ãŠãæ§èœåäžã®ããã«åªå é äœä»ããéèŠã§ãªããšããããã§ã¯ãããŸããã
A.2.2. ãã£ãŒã«ãå§çž®ã®çžé
HPACK ã¯é åºéãã®é ä¿¡ãåæã«èšèšãããŠããŸãããšã³ã³ãŒãããããã£ãŒã«ãã»ã¯ã·ã§ã³ã®åã¯ããšã³ã³ãŒããããé åºãšåãé åºã§å°çïŒããã³ãã³ãŒãïŒããªããã°ãªããŸãããããã«ãã䞡端ã®åçç¶æ ãåæãããŸãã
QUIC ããã®ç·é åºãæäŸããªããããHTTP/3 㯠HPACK ãä¿®æ£ãã QPACK ãçšããŸããQPACK ã¯åçããŒãã«ã®ãã¹ãŠã®å€æŽãè¡ãããã«åäžã®äžæ¹åã¹ããªãŒã ã䜿çšããæŽæ°ã®ç·é åºãä¿èšŒããŸãããšã³ã³ãŒãããããã£ãŒã«ããå«ããã¹ãŠã®ãã¬ãŒã ã¯ãããŒãã«ç¶æ ãåç §ããã ãã§å€æŽã¯è¡ããŸããã
[QPACK] ã«è©³çްããããŸãã
A.2.3. ãããŒå¶åŸ¡ã®éã
HTTP/2 ã¯ã¹ããªãŒã ãããŒå¶åŸ¡æ©æ§ãèŠå®ããŸãããã¹ãŠã® HTTP/2 ãã¬ãŒã ã¯ã¹ããªãŒã äžã§é ä¿¡ãããŸããããããŒå¶åŸ¡ã®å¯Ÿè±¡ã¯ DATA ãã¬ãŒã ã®ãã€ããŒãã®ã¿ã§ãããQUIC ã¯ã¹ããªãŒã ããŒã¿ã«å¯ŸããŠãããŒå¶åŸ¡ãæäŸããæ¬æžã§å®çŸ©ããããã¹ãŠã® HTTP/3 ãã¬ãŒã ã¿ã€ãã¯ã¹ããªãŒã äžã§éä¿¡ãããŸãããããã£ãŠããã¹ãŠã®ãã¬ãŒã ããããšãã€ããŒãããããŒå¶åŸ¡ã®å¯Ÿè±¡ãšãªããŸãã
A.2.4. æ°èŠãã¬ãŒã ã¿ã€ãå®çŸ©ã®ããã®æé
HTTP/3 ã®ãã¬ãŒã ã¿ã€ãå®çŸ©ã¯ãã°ãã° QUIC ã®å¯å€é·æŽæ°ãšã³ã³ãŒãã£ã³ã°ã䜿çšããŸããç¹ã«ãã¹ããªãŒã ID ã¯ãã®ãšã³ã³ãŒãã£ã³ã°ã䜿çšããHTTP/2 ã§äœ¿ããããšã³ã³ãŒãã£ã³ã°ãããåºãå€ã®ç¯å²ã蚱容ããŸããHTTP/3 ã®äžéšãã¬ãŒã ã¯ã¹ããªãŒã ID 以å€ã®èå¥åïŒäŸãã° push IDïŒã䜿çšããŸããæ¡åŒµãã¬ãŒã ã¿ã€ãã®ãšã³ã³ãŒãã£ã³ã°ãã¹ããªãŒã ID ãå«ãå Žåããã®ãšã³ã³ãŒãã£ã³ã°ã®åå®çŸ©ãå¿ èŠãããããŸããã
äžè¬ç㪠HTTP/3 ãã¬ãŒã ã«ã¯ Flags ãã£ãŒã«ããååšããªãããããã©ã°ã®ååšã«äŸåãããã¬ãŒã ã¯ãã¬ãŒã ãã€ããŒãå ã«ãã©ã°é åã確ä¿ããå¿ èŠããããŸãã
ãããã®åé¡ãé€ãã°ãHTTP/2 ã®ãã¬ãŒã ã¿ã€ãæ¡åŒµã¯ãHTTP/2 ã® stream 0 ã HTTP/3 ã® control stream ã«çœ®ãæããã ãã§æŠãç§»æ€å¯èœã§ããHTTP/3 æ¡åŒµã¯é åºãä»®å®ããŸããããé åºããã£ãŠã害ã¯ãªããHTTP/2 ãžã®ç§»æ€æ§ãæåŸ ãããŸãã
A.2.5. HTTP/2 ãš HTTP/3 ã®ãã¬ãŒã ã¿ã€ãã®æ¯èŒ
- DATA (0x00) :
-
HTTP/3 ãã¬ãŒã ã§ã¯ããã£ã³ã°ã¯å®çŸ©ãããŠããŸãããSection 7.2.1 ãåç §ããŠãã ããã
- HEADERS (0x01):
-
HEADERS ã® PRIORITY é å㯠HTTP/3 ãã¬ãŒã ã§ã¯å®çŸ©ãããŠããŸãããããã£ã³ã°ãå®çŸ©ãããŠããŸãããSection 7.2.2 ãåç §ããŠãã ããã
- PRIORITY (0x02):
-
Appendix A.2.1 ã§è¿°ã¹ããšãããHTTP/3 ã¯åªå é äœãä¿¡å·ããææ®µãæäŸããŸããã
- RST_STREAM (0x03):
-
RST_STREAM ãã¬ãŒã 㯠HTTP/3 ã«ã¯ååšããŸãããQUIC ãã¹ããªãŒã ã©ã€ããµã€ã¯ã«ç®¡çãæäŸããããã§ããåãã³ãŒããã€ã³ã㯠CANCEL_PUSH ãã¬ãŒã ã«äœ¿çšãããŠããŸãïŒSection 7.2.3ïŒã
- SETTINGS (0x04):
-
SETTINGS ãã¬ãŒã ã¯æ¥ç¶ã®éå§æã«ã®ã¿éä¿¡ãããŸããSection 7.2.4 ããã³ Appendix A.3 ãåç §ããŠãã ããã
- PUSH_PROMISE (0x05):
-
PUSH_PROMISE ãã¬ãŒã ã¯ã¹ããªãŒã ãåç §ããŸããã代ããã«ãpush stream ã PUSH_PROMISE ãã¬ãŒã ã push ID ãçšããŠåç §ããŸããSection 7.2.5 ãåç §ããŠãã ããã
- PING (0x06):
-
PING ãã¬ãŒã 㯠HTTP/3 ã«ã¯ååšããŸãããQUIC ãåçã®æ©èœãæäŸããŸãã
- GOAWAY (0x07):
-
GOAWAY ã¯ãšã©ãŒã³ãŒããå«ã¿ãŸãããã¯ã©ã€ã¢ã³ãâãµãŒãæ¹åã§ã¯ããµãŒãèµ·ç¹ã®ã¹ããªãŒã ID ã®ä»£ããã« push ID ãéã³ãŸããSection 7.2.6 ãåç §ããŠãã ããã
- WINDOW_UPDATE (0x08):
-
WINDOW_UPDATE ãã¬ãŒã 㯠HTTP/3 ã«ã¯ååšããŸãããQUIC ããããŒå¶åŸ¡ãæäŸããããã§ãã
- CONTINUATION (0x09):
-
CONTINUATION ãã¬ãŒã 㯠HTTP/3 ã«ã¯ååšããŸããã代ããã«ãHTTP/2 ãã倧ã㪠HEADERS / PUSH_PROMISE ãã¬ãŒã ãèš±å¯ãããŸãã
HTTP/2 ã®æ¡åŒµã§å®çŸ©ããããã¬ãŒã ã¿ã€ãã¯ã該åœããå Žå㯠HTTP/3 çšã«å¥éç»é²ããå¿ èŠããããŸãã[HTTP/2] ã§å®çŸ©ããããã¬ãŒã ã® ID ã¯åçŽåã®ããã«äºçŽãããŠããŸããHTTP/3 ã®ãã¬ãŒã ã¿ã€ã空éã¯å€§å¹ ã«å€§ããïŒ62 ããã察 8 ãããïŒãããå€ãã® HTTP/3 ãã¬ãŒã ã¿ã€ãã«ã¯å¯Ÿå¿ãã HTTP/2 ã®ã³ãŒããã€ã³ããååšããŸãããSection 11.2.1 ãåç §ããŠãã ããã
A.3. HTTP/2 SETTINGS ãã©ã¡ãŒã¿
HTTP/2 ãšã®éèŠãªçžéç¹ã®äžã€ã¯ãèšå®ã control stream ã®æåã®ãã¬ãŒã ãšããŠäžåºŠã ãéä¿¡ããããã以éã¯å€æŽã§ããªãããšã§ããããã«ãã倿Žã®åæã«é¢ããå€ãã®ã³ãŒããŒã±ãŒã¹ãæé€ãããŸãã
HTTP/2 ã SETTINGS ãã¬ãŒã ã§æå®ããããã€ãã®ãã©ã³ã¹ããŒãã¬ãã«ã®ãªãã·ã§ã³ã¯ãHTTP/3 ã§ã¯ QUIC ãã©ã³ã¹ããŒããã©ã¡ãŒã¿ã«ãã£ãŠçœ®ãæããããŸããHTTP/3 ã«æ®ããã HTTP ã¬ãã«ã®èšå®ã¯ HTTP/2 ãšåãå€ãæã¡ãŸãã眮ãæããããèšå®ã¯äºçŽããããã®åä¿¡ã¯ãšã©ãŒã§ããä¿æããã³äºçŽãããå€ã®è°è«ã«ã€ããŠã¯ Section 7.2.4.1 ãåç §ããŠãã ããã
以äžã¯å HTTP/2 ã® SETTINGS ãã©ã¡ãŒã¿ãã©ã®ããã«ãããããããã®äžèЧã§ãïŒ
- SETTINGS_HEADER_TABLE_SIZE (0x01):
-
詳现㯠[QPACK] ãåç §ããŠãã ããã
- SETTINGS_ENABLE_PUSH (0x02):
-
ãã㯠MAX_PUSH_ID ãã¬ãŒã ã«çœ®ãæãããããµãŒãããã·ã¥ã«å¯Ÿãããã詳现ãªå¶åŸ¡ãæäŸããŸããHTTP/3 ã® SETTINGS ãã¬ãŒã ã§èå¥å 0x02 ã®èšå®ïŒSETTINGS_ENABLE_PUSH ã«å¯Ÿå¿ïŒãæå®ããããšã¯ãšã©ãŒã§ãã
- SETTINGS_MAX_CONCURRENT_STREAMS (0x03):
-
æå€§ãªãŒãã³ã¹ããªãŒã 㯠QUIC ããããŒå¶åŸ¡ããžãã¯ã®äžéšãšããŠå¶åŸ¡ããŸããHTTP/3 ã® SETTINGS ãã¬ãŒã ã§èå¥å 0x03 ã®èšå®ïŒSETTINGS_MAX_CONCURRENT_STREAMS ã«å¯Ÿå¿ïŒãæå®ããããšã¯ãšã©ãŒã§ãã
- SETTINGS_INITIAL_WINDOW_SIZE (0x04):
-
QUIC ã¯åæãã©ã³ã¹ããŒããã³ãã·ã§ã€ã¯ã§ã¹ããªãŒã ããã³æ¥ç¶ãããŒå¶åŸ¡ãŠã£ã³ããŠãµã€ãºã®äž¡æ¹ãæå®ããå¿ èŠããããŸããHTTP/3 ã® SETTINGS ãã¬ãŒã ã§èå¥å 0x04ïŒSETTINGS_INITIAL_WINDOW_SIZE ã«å¯Ÿå¿ïŒãæå®ããããšã¯ãšã©ãŒã§ãã
- SETTINGS_MAX_FRAME_SIZE (0x05):
-
ãã®èšå®ã¯ HTTP/3 ã«å¯Ÿå¿ãããã®ããããŸãããHTTP/3 ã® SETTINGS ãã¬ãŒã ã§èå¥å 0x05ïŒSETTINGS_MAX_FRAME_SIZE ã«å¯Ÿå¿ïŒãæå®ããããšã¯ãšã©ãŒã§ãã
- SETTINGS_MAX_HEADER_LIST_SIZE (0x06):
-
ãã®èšå®èå¥å㯠SETTINGS_MAX_FIELD_SECTION_SIZE ãšæ¹åãããŸããã
HTTP/3 ã§ã¯èšå®å€ã¯å¯å€é·æŽæ°ïŒ6, 14, 30, ãŸã㯠62 ãããïŒã§ãããHTTP/2 ã®åºå®é· 32 ããããã£ãŒã«ããšã¯ç°ãªããŸããããã«ããå€ãã®å Žåãšã³ã³ãŒãã£ã³ã°ãçããªããŸãããå š 32 ããã空éã䜿çšããèšå®ã§ã¯é·ããªãããšããããŸããHTTP/2 ããç§»æ€ãããèšå®ã¯ãããå¹ççãªãšã³ã³ãŒãã£ã³ã°ã®ããã«å€ã 30 ãããã«éå®ãããã30 ããããè¶ ããå¿ èŠãããå Žå㯠62 ããã空éãå©çšããããåå®çŸ©ããããšãã§ããŸãã
èšå®ã¯ HTTP/2 ãš HTTP/3 ã§å¥ã ã«å®çŸ©ãããå¿ èŠããããŸãã[HTTP/2] ã§å®çŸ©ãããèšå®ã® ID ã¯ç°¡æœãã®ããã«äºçŽãããŠããŸããHTTP/3 ã®èšå®èå¥å空éã¯å€§å¹ ã«å€§ããïŒ62 ããã察 16 ãããïŒãããå€ãã® HTTP/3 èšå®ã«ã¯å¯Ÿå¿ãã HTTP/2 ã®ã³ãŒããã€ã³ããååšããŸãããSection 11.2.2 ãåç §ããŠãã ããã
QUIC ã¹ããªãŒã ã¯é åºå€ã«å°çããå¯èœæ§ãããããããã¢ã®èšå®å°çãåŸ ã£ãŠä»ã¹ããªãŒã ã«å¿çããããšã¯é¿ããã¹ãã§ããSection 7.2.4.2 ãåç §ããŠãã ããã
A.4. HTTP/2 ãšã©ãŒã³ãŒã
QUIC ã«ã¯ HTTP/2 ãæäŸãããã¹ããªãŒã ãããã³ãæ¥ç¶ããšã©ãŒã®æŠå¿µãååšããŸããããããHTTP/2 ãš HTTP/3 ã®éãã«ããããšã©ãŒã³ãŒãã¯çŽæ¥ç§»æ€ã§ããŸããã
Section 7 ã§å®çŸ©ããã HTTP/2 ã®ãšã©ãŒã³ãŒãã¯ãè«ççã«ã¯ä»¥äžã®ããã« HTTP/3 ã®ãšã©ãŒã³ãŒãã«ããããããŸãïŒ
- NO_ERROR (0x00):
-
H3_NO_ERROR ïŒSection 8.1ïŒã
- PROTOCOL_ERROR (0x01):
-
ããã¯ãããå ·äœçãªãšã©ãŒã³ãŒããå®çŸ©ãããŠããå Žåãé€ããH3_GENERAL_PROTOCOL_ERROR ã«ããããããŸããå ·äœäŸã«ã¯ H3_FRAME_UNEXPECTEDãH3_MESSAGE_ERRORãããã³ H3_CLOSED_CRITICAL_STREAMïŒSection 8.1 ã«å®çŸ©ïŒãªã©ããããŸãã
- INTERNAL_ERROR (0x02):
-
H3_INTERNAL_ERRORïŒSection 8.1ïŒã
- FLOW_CONTROL_ERROR (0x03):
-
該åœããŸãããQUIC ããããŒå¶åŸ¡ãåŠçããããã§ãã
- SETTINGS_TIMEOUT (0x04):
-
該åœããŸãããSETTINGS ã®ç¢ºèªå¿çã¯å®çŸ©ãããŠããŸããã
- STREAM_CLOSED (0x05):
-
該åœããŸãããQUIC ãã¹ããªãŒã 管çãåŠçããããã§ãã
- FRAME_SIZE_ERROR (0x06):
-
H3_FRAME_ERRORïŒSection 8.1 ã«å®çŸ©ïŒã
- REFUSED_STREAM (0x07):
-
H3_REQUEST_REJECTEDïŒSection 8.1ïŒã¯ãªã¯ãšã¹ããåŠçãããªãã£ãããšã瀺ãããã«äœ¿çšãããŸãããã以å€ã§ã¯ QUIC ãã¹ããªãŒã 管çãåŠçãããã該åœããŸããã
- CANCEL (0x08):
-
H3_REQUEST_CANCELLEDïŒSection 8.1ïŒã
- COMPRESSION_ERROR (0x09):
-
è€æ°ã®ãšã©ãŒã³ãŒãã [QPACK] ã«å®çŸ©ãããŠããŸãã
- CONNECT_ERROR (0x0a):
-
H3_CONNECT_ERRORïŒSection 8.1ïŒã
- ENHANCE_YOUR_CALM (0x0b):
-
H3_EXCESSIVE_LOADïŒSection 8.1ïŒã
- INADEQUATE_SECURITY (0x0c):
-
該åœããŸãããQUIC ã¯ãã¹ãŠã®æ¥ç¶ã«ååãªã»ãã¥ãªãã£ãæäŸãããšæ³å®ãããŠããŸãã
- HTTP_1_1_REQUIRED (0x0d):
-
H3_VERSION_FALLBACKïŒSection 8.1ïŒã
ãšã©ãŒã³ãŒã㯠HTTP/2 ãš HTTP/3 ã§å¥ã ã«å®çŸ©ããå¿ èŠããããŸããSection 11.2.3 ãåç §ããŠãã ããã
A.4.1. HTTP/2 ãš HTTP/3 éã®ãšã©ãŒã®ãããã³ã°
HTTP/2 ãš HTTP/3 ã®éã§å€æãè¡ãã€ã³ã¿ãŒããã£ã¢ãªã¯ãäžæµããã®ãšã©ãŒæ¡ä»¶ã«ééããããšããããŸããäžæµã«ãšã©ãŒã®çºçãäŒããããšã¯æçšã§ããããšã©ãŒã³ãŒãã¯å€§æµæ¥ç¶ããŒã«ã«ãªåé¡ãåæ ããŠããããã®ãŸãŸäŒæãããããšãæå³ãæããªãå Žåãå€ãã§ãã
äžæµãªãªãžã³ããã®ãšã©ãŒã«ééããã€ã³ã¿ãŒããã£ã¢ãªã¯ã502 (Bad Gateway) ã®ãã㪠HTTP ã¹ããŒã¿ã¹ã³ãŒããè¿ãããšã§ããã瀺ãããšãã§ããŸããããã¯åºãç¯å²ã®ãšã©ãŒã«é©ããŠããŸãã
çšã§ã¯ãããŸãããæãè¿ãåä¿¡è åãã®ãšã©ãŒã¿ã€ãã«ãããããŠäŒæããããšãæçãªå ŽåããããŸããäŸãã°ãã€ã³ã¿ãŒããã£ã¢ãªãäžæµãã REFUSED_STREAM åã® HTTP/2 ã¹ããªãŒã ãšã©ãŒ ãåãåã£ãå Žåããã®ãªã¯ãšã¹ãã¯åŠçãããŠãããå詊è¡ãå®å šã§ãããšããæç¢ºãªã·ã°ãã«ããããŸãããã®ãšã©ãŒç¶æ ãã¯ã©ã€ã¢ã³ãã« HTTP/3 ã®ã¹ããªãŒã ãšã©ãŒ H3_REQUEST_REJECTED ãšããŠäŒããããšã«ãããã¯ã©ã€ã¢ã³ãã¯é©åãªæªçœ®ãåãããšãã§ããŸããéæ¹åã§ã¯ãã€ã³ã¿ãŒããã£ã¢ãªã¯ã¹ããªãŒã ã H3_REQUEST_CANCELLED ã§çµäºãããããšã§ç€ºãããã¯ã©ã€ã¢ã³ãã®ãªã¯ãšã¹ããã£ã³ã»ã«ãäŒããããšãæçãšå€æãããããããŸããïŒè©³çŽ°ã¯ Section 4.1.1 ãåç §ããŠãã ããã
ãšã©ãŒéã®å€æã¯è«çãããã³ã°ã§èª¬æãããŠããŸãããšã©ãŒã³ãŒãã¯ã¿ãŒã²ããããŒãžã§ã³ã§äžé©åãŸãã¯æªç¥ã®ãšã©ãŒã³ãŒãã誀ã£ãŠäœ¿çšãããããšãé²ãããã«éè€ããªã空éã§å®çŸ©ãããŠããŸããã€ã³ã¿ãŒããã£ã¢ãªã¯ã¹ããªãŒã ãšã©ãŒãæ¥ç¶ãšã©ãŒã«ææ Œãããããšãèš±å¯ãããŸãããäžæçãŸãã¯æç¶çãªãšã©ãŒã®ããã« HTTP/3 æ¥ç¶å šäœã«ã³ã¹ãã課ãããšã«ãªãç¹ã«æ³šæããã¹ãã§ãã
è¬èŸ
Robbie Shade ãš Mike Warres ã¯ããã®ææžã®å身ã§ãã draft-shade-quic-http2-mapping ã®èè ã§ããã
IETF QUIC ã¯ãŒãã³ã°ã°ã«ãŒãã¯å€ãã®æ¹ã ãã倧ããªæ¯æŽãåããŸããããã®äžã§ãã以äžã®æ¹ã ãæ¬æžã«å€§ããªè²¢ç®ãããŠãã ãããŸããïŒ
-
Bence Beky
-
Daan De Meyer
-
Martin Duke
-
Roy Fielding
-
Alan Frindell
-
Alessandro Ghedini
-
Nick Harper
-
Ryan Hamilton
-
Christian Huitema
-
Subodh Iyengar
-
Robin Marx
-
Patrick McManus
-
Luca Niccolini
-
奥 äžç© (Kazuho Oku)
-
Lucas Pardue
-
Roberto Peon
-
Julian Reschke
-
Eric Rescorla
-
Martin Seemann
-
Ben Schwartz
-
Ian Swett
-
Willy Taureau
-
Martin Thomson
-
Dmitri Tikhonov
-
Tatsuhiro Tsujikawa
Mike Bishop ã®è²¢ç®ã®äžéšã¯ã圌ã Microsoft ã«åšè·ããŠããæéã« Microsoft ã«ãã£ãŠæ¯æŽãããŸããã
玢åŒ
- C
- CANCEL_PUSH 2, 4.6, 4.6, 7, 7.2.3, 7.2.5, 7.2.7, 11.2.1, A.2.5
- æ¥ç¶ãšã©ãŒ 2.2, 4.1, 4.1, 4.4, 4.4, 4.6, 5.2, 6.1, 6.2, 6.2.1, 6.2.1, 6.2.1, 6.2.2, 6.2.2, 7.1, 7.1, 7.2.1, 7.2.2, 7.2.3, 7.2.3, 7.2.3, 7.2.4, 7.2.4, 7.2.4, 7.2.4.1, 7.2.4.2, 7.2.4.2, 7.2.5, 7.2.5, 7.2.5, 7.2.5, 7.2.6, 7.2.6, 7.2.7, 7.2.7, 7.2.7, 7.2.8, 8, 10.5, A.4.1
- å¶åŸ¡ã¹ããªãŒã 2, 3.2, 6.2, 6.2, 6.2, 6.2.1, 7, 7.2.1, 7.2.2, 7.2.3, 7.2.3, 7.2.4, 7.2.4, 7.2.4, 7.2.5, 7.2.6, 7.2.6, 7.2.7, 8.1, 9, A.2.4, A.3
- D
- G
- H
- H3_CLOSED_CRITICAL_STREAM 6.2.1, 8.1, 11.2.3, A.4
- H3_CONNECT_ERROR 4.4, 8.1, 11.2.3, A.4
- H3_EXCESSIVE_LOAD 8.1, 10.5, 11.2.3, A.4
- H3_FRAME_ERROR 7.1, 7.1, 8.1, 11.2.3, A.4
- H3_FRAME_UNEXPECTED 4.1, 4.1, 4.4, 7.2.1, 7.2.2, 7.2.3, 7.2.4, 7.2.4, 7.2.5, 7.2.5, 7.2.6, 7.2.7, 7.2.7, 7.2.8, 8.1, 11.2.3, A.4
- H3_GENERAL_PROTOCOL_ERROR 7.2.5, 8.1, 11.2.3, A.4
- H3_ID_ERROR 4.6, 5.2, 6.2.2, 7.2.3, 7.2.3, 7.2.5, 7.2.6, 7.2.7, 8.1, 11.2.3
- H3_INTERNAL_ERROR 8.1, 11.2.3, A.4
- H3_MESSAGE_ERROR 4.1.2, 8.1, 11.2.3, A.4
- H3_MISSING_SETTINGS 6.2.1, 8.1, 11.2.3
- H3_NO_ERROR 4.1, 5.2, 6.2.3, 8, 8.1, 8.1, 8.1, 11.2.3, A.4
- H3_REQUEST_CANCELLED 4.1.1, 4.1.1, 4.6, 7.2.3, 7.2.3, 8.1, 11.2.3, A.4, A.4.1
- H3_REQUEST_INCOMPLETE 4.1, 8.1, 11.2.3
- H3_REQUEST_REJECTED 4.1.1, 4.1.1, 4.1.1, 4.1.1, 8.1, 11.2.3, A.4, A.4.1
- H3_SETTINGS_ERROR 7.2.4, 7.2.4.1, 7.2.4.2, 7.2.4.2, 8.1, 11.2.3
- H3_STREAM_CREATION_ERROR 6.1, 6.2, 6.2.1, 6.2.2, 8.1, 11.2.3
- H3_VERSION_FALLBACK 8.1, 11.2.3, A.4
- HEADERS 2, 4.1, 4.1, 4.1, 4.1, 4.1, 4.1, 4.4, 4.6, 7, 7.2.2, 9, 11.2.1, A.2.1, A.2.5, A.2.5, A.2.5
- M
- P
- push ID 4.6, 5.2, 5.2, 5.2, 6.2.2, 6.2.2, 6.2.2, 7.2.3, 7.2.3, 7.2.3, 7.2.3, 7.2.3, 7.2.5, 7.2.5, 7.2.5, 7.2.5, 7.2.5, 7.2.5, 7.2.5, 7.2.5, 7.2.6, 7.2.7, 7.2.7, 7.2.7, 7.2.7, 7.2.7, 8.1, A.2.5, A.2.5
- push stream 4.1, 4.1, 4.6, 4.6, 4.6, 4.6, 4.6, 4.6, 6.2, 6.2.2, 7, 7.2.2, 7.2.3, 7.2.3, 7.2.3, 7.2.3, 7.2.3, 7.2.3, 7.2.3, 7.2.3, 7.2.3, 7.2.5, 7.2.7, A.2.5
- PUSH_PROMISE 2, 4.1, 4.1, 4.1, 4.1, 4.1, 4.6, 4.6, 4.6, 4.6, 4.6, 4.6, 4.6, 4.6, 4.6, 7, 7.2.3, 7.2.3, 7.2.5, 7.2.7, 10.4, 10.5, 11.2.1, A.2.5, A.2.5, A.2.5, A.2.5
- R
- S