Jump to content

HTTP/3

This is a fully translated article. Click here for more information.
From DawoumWiki, the free Mathematics self-learning
HTTP/3
International standardBishop, Mike; Akamai. "RFC 9114: HTTP/3". rfc-editor. Retrieved 2022-06-06. (HTTP/3 also uses the completed QUIC protocol described in RFC 9000 and related RFCs such as RFC 9001)
Developed byIETF
IntroducedRFC 9114

HTTP/3은 널리 배포된 HTTP/1.1HTTP/2를 보완하는 World Wide Web에서 정보를 교환하는 데 사용되는 하이퍼텍스트 전송 프로토콜(Hypertext Transfer Protocol)의 세 번째 주요 버전입니다. 잘-설립된 TCP (1974년 발행)에 의존했던 이전 버전과 달리,[1] HTTP/3은 UDP 위에 구축된 다중화된 전송 프로토콜, QUIC을 사용합니다.[2] 2022년 6월 6일에, IETF는 HTTP/3를 RFC 9114제안 표준으로 게시했습니다.[3]

HTTP/1Transport Layer SecurityTransmission Control ProtocolHTTP/2TLS 1.2Transmission Control ProtocolHTTP/3TLS 1.3QUICUser Datagram ProtocolInternet Protocol
Protocol Stack of HTTP/3 compared to HTTP/1.1 and HTTP/2

HTTP/3는 같은 요청 방법, 상태 코드, 및 메시지 필드를 포함하여 프로토콜의 이전 개정판과 유사한 의미론 체계를 사용하지만, 그것들을 인코딩하고 세션 상태를 다르게 유지합니다. 어쨌든, 부분적으로 QUIC의 프로토콜의 채택으로 인해, HTTP/3은 이전 버전과 비교할 때 실제 사용 시 대기 시간이 더 짧고 로드가 더 빠릅니다: 경우에 따라 HTTP/1.1보다 3배 이상 빠릅니다 (HTTP1.1은 많은 웹사이트에 의해 배포되는 유일한 HTTP으로 남아 있습니다).[4][5]

HTTP/3는 웹 브라우저의 75% (및 "추적 데스크톱" 웹 브라우저의 83%)에 의해 지원되고,[6] 상위 1,000만 개 웹사이트의 26%에 의해 지원됩니다.[7] 그것은 2020년 4월부터 크로미엄 (및 구글 크롬, 마이크로소프트 엣지, 삼성 인터넷 및 오페라를 포함한 파생 프로젝트)과[8] 2021년 5월부터 모질라 파이어폭스에 의해 지원되었습니다.[6][9] 사파리 14 (macOS Big Sur 및 iOS 14)는 프로토콜을 구현했지만 기본적으로 비활성화된 상태로 남아 있습니다.[10]

History

HTTP/3는 QUIC 작업 그룹에서 채택한 인터넷 초안에서 시작되었습니다. 원래 제안은 "HTTP/2 Semantics Using The QUIC Transport Protocol"로 이름-지었고,[11] 나중에 "Hypertext Transfer Protocol (HTTP) over QUIC"으로 다시-변경되었습니다.[12]

2018년 10월 28일 메일링 리스트 토론에서, IETF HTTP 및 QUIC 작업 그룹의 의장, Mark Nottingham은 HTTP-over-QUIC를 HTTP/3으로 다음의 이유로 이름을 바꾸자고 제안했습니다: "유선 프로토콜에 대한 HTTP 의미론의 또 다른 바인딩으로 명확하게 식별하기 위해 [...] 그래서 사람들은 QUIC과의 분리를 이해할 것입니다."[13] Nottingham의 제안은 며칠 후 동료 IETF 회원들에 의해 승인되었습니다. HTTP 작업 그룹은 HTTP/3 설계 중에 QUIC 작업 그룹을 지원하고 게시 후 유지 관리를 담당하도록 승인되었습니다.[14]

HTTP/3에 대한 지원이 2019년 9월 크롬 (카나리아 빌드)에 추가된 후 결국 안정적인 빌드에 도달했지만 기능 플래그에 의해 비활성화되어 있었습니다. 그것은 2020년 4월에 기본적으로 활성화되었습니다.[15] 파이어폭스는 2019년 11월에 기능 플래그를 통해 HTTP/3에 대한 지원을 추가했고[6][16][17] 2021년 4월 Firefox 88에서 기본적으로 활성화하기 시작했습니다.[6][9] HTTP/3에 대한 실험적 지원이 2020년 4월 8일 Safari Technology Preview에 추가되었고[18] iOS 14 및 macOS 11과 함께 제공되는 Safari 14에 포함되었지만,[10][19] Safari 16부터 기본적으로 macOS와 iOS 모두에서 비활성화되어 있습니다. [인용 필요]

Comparison with HTTP/1.1 and HTTP/2

HTTP 의미론 체계는 버전 사이에 일관성이 있습니다: 같은 요청 방법, 상태 코드, 및 메시지 필드는 전형적으로 모든 버전에 적용할 수 있습니다. 차이점은 이러한 의미론을 놓여있는 전송에 매핑하는 것입니다. HTTP/1.1HTTP/2 모두 TCP를 전송 수단으로 사용합니다. HTTP/3은 사용자 데이터그램 프로토콜(User Datagram Protocol, UDP)을 통한 사용자 공간 혼잡 제어를 사용하는 전송 계층 네트워크 프로토콜, QUIC를 사용합니다. QUIC으로의 전환은 "HOL 차단(head-of-line blocking)"이라고 하는 HTTP/2의 주요 문제를 수정하는 것을 목표로 합니다: HTTP/2 다중화의 병렬 본성이 TCP의 손실 복구 메커니즘에 표시되지 않기 때문에, 손실 패킷 또는 재정렬된 패킷은 해당 트랜잭션이 손실된 패킷의 영향을 받았는지 여부에 관계없이 모든 활성 트랜잭션을 중단하는 원인이 됩니다. QUIC은 기본 다중화를 제공하기 때문에 손실된 패킷은 데이터가 손실된 스트림에만 영향을 미칩니다.

제안된 DNS 자원 레코드 SVCB (서비스 바인딩)과 HTTPS는 이전 HTTP 버전을 통해 Alt-Svc 헤더를 먼저 수신하지 않고 연결을 허용하므로, TCP 핸드셰이크의 1 RTT를 제거합니다.[20][21] 파이어폭스 92, iOS 14, 보고된 Safari 14 지원 이후 HTTPS 자원 레코드에 대한 클라이언트 지원이 있고, 크로미엄은 플래그 뒤에서 그것을 지원합니다.[22][23][24]

Implementations

Client

Browser

Browser support for HTTP/3
Browser Version implemented (disabled by default) Version shipped (enabled by default) Comment
Chrome Stable build (79) December 2019 87[6] April 2020[25] Earlier versions implemented other drafts of QUIC
Edge Stable build (79) December 2019 87 April 2020 Edge 79 was the first version based on Chromium
Firefox Stable build (72.0.1) January 2020 88[9] April 2021[26]
Safari Safari Technology Preview 104 April 2020  –  –

Libraries

QUIC 및 HTTP/3에 대한 클라이언트 또는 서버 논리를 구현하는 오픈-소스 라이브러리는 다음을 포함합니다[27]

Libraries implementing HTTP/3
Name Client Server Programming language Company Repository
lsquic Yes Yes C LiteSpeed https://github.com/litespeedtech/lsquic
nghttp3 Yes Yes C https://github.com/ngtcp2/nghttp3
h2o No Yes C https://github.com/h2o/h2o
libcurl[28][29] Yes No C https://github.com/curl/curl
MsQuic[30] Yes Yes C Microsoft https://github.com/microsoft/msquic
proxygen Yes Yes C++ Facebook https://github.com/facebook/proxygen#quic-and-http3
Cronet Yes Yes C++ Google https://github.com/chromium/chromium/tree/main/net/quic
.NET[31] Yes Yes C# (using MsQuic)[32] Microsoft https://github.com/dotnet
quic-go Yes Yes Go https://github.com/quic-go/quic-go
http3 Yes Yes Haskell https://github.com/kazu-yamamoto/http3
Kwik Yes Yes Java https://github.com/ptrd/kwik
Flupke Yes Yes Java https://bitbucket.org/pjtr/flupke
aioquic Yes Yes Python https://github.com/aiortc/aioquic
quiche Yes Yes Rust Cloudflare https://github.com/cloudflare/quiche
neqo Yes Yes Rust Mozilla https://github.com/mozilla/neqo
quinn Yes Yes Rust https://github.com/quinn-rs/quinn
s2n-quic Yes Yes Rust Amazon Web Services https://github.com/aws/s2n-quic

Server

  • 2021년 6월 7일에, LiteSpeed 웹 서버 (및 OpenLiteSpeed) 6.0.2가 출시되었고 기본적으로 HTTP/3를 활성화하는 첫 번째 버전이 되었습니다.[33]
  • Caddy 웹 서버 v2.6.0 (2022년 9월 20일 출시)는 기본적으로 HTTP/3가 활성화되어 있습니다.[34]
  • HTTP/3에 대한 Nginx 지원이 작업 중입니다. HTTP/3을 지원하는 nginx의 기술 미리보기가 2020년 6월에 출시되었습니다.[35]
  • Cloudflare는 quiche HTTP/3 라이브러리를 통합하는 nginx에 대한 패치를 배포합니다.[36]
  • HTTP/3에 대한 Microsoft IIS 지원은 Windows Server 2022/Windows 11에서 기본적으로 활성화됩니다.[37]

See also

References

  1. ^ Cerf, V.; Dalal, Y.; Sunshine, C. (December 1974). "Specification of Internet Transmission Control Program". IETF: RFC0675. doi:10.17487/rfc0675.
  2. ^ "What is HTTP/3?". Cloudflare. Archived from the original on 4 July 2022. Retrieved 12 July 2022.
  3. ^ "HTTP/3". Retrieved 2022-06-06.
  4. ^ Perna, Gianluca; Trevisan, Martino; Giordano, Danilo; Drago, Idilio (2022-04-01). "A first look at HTTP/3 adoption and performance". Computer Communications. 187: 115–124. doi:10.1016/j.comcom.2022.02.005. ISSN 0140-3664.
  5. ^ "HTTP/3 is Fast". Request Metrics. Retrieved 2022-07-01.
  6. ^ a b c d e "Can I use... Support tables for HTML5, CSS3, etc". caniuse.com. Retrieved 2022-07-31.
  7. ^ "Usage of HTTP/3 for websites". World Wide Web Technology Surveys. W3Techs. Retrieved 31 July 2022.
  8. ^ "Enabling QUIC in tip-of-tree". groups.google.com. Retrieved 2021-04-08.
  9. ^ a b c Damjanovic, Dragana (16 April 2021). "QUIC and HTTP/3 Support now in Firefox Nightly and Beta". Mozilla Hacks – the Web developer blog. Retrieved 2021-04-17.{{cite web}}: CS1 maint: url-status (link)
  10. ^ a b "Safari 14 Release Notes". developer.apple.com. Retrieved 4 December 2020.
  11. ^ Shade, Robbie (8 July 2016). HTTP/2 Semantics Using The QUIC Transport Protocol. IETF. I-D draft-shade-quic-http2-mapping.
  12. ^ Cimpanu, Catalin (12 November 2018). "HTTP-over-QUIC to be renamed HTTP/3 | ZDNet". ZDNet. Retrieved 12 November 2018.
  13. ^ Nottingham, Mark (28 October 2018). "Identifying our deliverables". IETF Mail Archive.
  14. ^ "Hypertext Transfer Protocol Charter". ietf.org. Retrieved 2020-09-02.
  15. ^ "Enabling QUIC in tip-of-tree". groups.google.com. Retrieved 2021-04-08.
  16. ^ Daniel, Stenberg. "Daniel Stenberg announces HTTP/3 support in Firefox Nightly". Twitter. Retrieved 5 November 2019.
  17. ^ Cimpanu, Catalin (26 September 2019). "Cloudflare, Google Chrome, and Firefox add HTTP/3 support". ZDNet. Retrieved 27 September 2019.
  18. ^ "Release Notes for Safari Technology Preview 104". webkit.org. 8 April 2020. Retrieved 7 August 2020.
  19. ^ Ng, Gary (23 June 2020). "Apple's Safari Adds Support for HTTP3 in iOS 14 and macOS 11". iphoneincanada.ca. Retrieved 25 June 2021.
  20. ^ "HTTPS RR". MDN. Mozilla. Retrieved 2022-10-25.
  21. ^ Schwartz, Benjamin M.; Bishop, Mike; Nygren, Erik (2020-06-12). Service binding and parameter specification via the DNS. IETF. I-D draft-ietf-dnsop-svcb-https.
  22. ^ "Firefox 92 for developers". Mozilla Corporation. 7 September 2021. Retrieved 2022-10-25.
  23. ^ "Feature: HTTP->HTTPS redirect for HTTPS DNS records". Google Inc. Retrieved 2022-10-25.
  24. ^ Patrick Mevzek (24 August 2021). "What's the use case of SVCB (type 65 , service binding) RR". Stack Exchange Inc. Retrieved 2022-10-25.
  25. ^ "Enabling QUIC in tip-of-tree". groups.google.com. Retrieved 2021-04-09.
  26. ^ "Firefox Release Owners - MozillaWiki". wiki.mozilla.org. Retrieved 2021-04-09.
  27. ^ "QUIC Implementations". GitHub. Retrieved 2021-04-08.{{cite web}}: CS1 maint: url-status (link)
  28. ^ "First HTTP/3 with curl". Daniel Stenberg. August 5, 2019. Retrieved October 2, 2019.
  29. ^ "cURL HTTP3 wiki". Daniel Stenberg. September 26, 2019. Retrieved October 2, 2019.
  30. ^ "MsQuic is Open Source". April 28, 2020. Retrieved April 28, 2020.
  31. ^ "HTTP/3 support in .NET 6". September 17, 2021. Retrieved September 17, 2021.
  32. ^ "HTTP/3 support in .NET 6". .NET Blog. 2021-09-17. Retrieved 2022-01-12.
  33. ^ "LiteSpeed Web Server Release Log - LiteSpeed Technologies". www.litespeedtech.com. Retrieved 2022-02-12. Enable HTTP/3 v1 by default.
  34. ^ "Release 2.6.0 · caddyserver/caddy". Github. 2022-09-22. Retrieved 2022-09-20.
  35. ^ "Introducing a Technology Preview of NGINX Support for QUIC and HTTP/3". NGINX. 2020-06-10. Retrieved 2020-06-11.
  36. ^ "Experiment with HTTP/3 using NGINX and quiche". The Cloudflare Blog. 2019-10-17. Retrieved 2019-11-09.
  37. ^ Tratcher. "Use ASP.NET Core with HTTP/3 on IIS". docs.microsoft.com. Retrieved 2022-04-29.

External links