2019.08.17
Jalex Chang
- Backend Engineer @ Umbo Computer Vision
- Taiwan Data Engineering Association Member
- Golang Taiwan Member
Contact:
- jalex.cpc @ Gmail
- jalex.chang @ Facebook
- JalexChang @ GitHub
References
[1] HTTP/3 explained, https://http3-explained.haxx.se/en/
[2] QUIC-GO, https://github.com/lucas-clemente/quic-go
[3] Draft-ietf-quic-http-22 (HTTP/3 draft-22), https://tools.ietf.org/html/draft-ietf-quic-http-22
[4] Draft-ietf-quic-transport-22 (QUIC draft-22), https://tools.ietf.org/html/draft-ietf-quic-transport-22
[5] RFC-8446 (TLS 1.3) , https://tools.ietf.org/html/rfc8446
The Hypertext Transfer Protocol (HTTP) is an application protocol for distributed, collaborative, hypermedia information systems. HTTP is the foundation of data communication for the World Wide Web. - Wikipedia
With HTTP/2, browsers do parallel transfers over a single TCP connection.
Through stream multiplexing
HTTP/2 eliminates HOL blocking at the application layer
But HOL blocking still exists in the transport layer.
If a single packet is dropped
The entire TCP connection is brought to a halt while the lost packet is re-transmitted.
A new-generation HTTP protocol
Born to solve the transport HOL blocking issue.
It remains the same paradigms and concepts like HTTP/2.
The most difference between HTTP/2 and HTTP/3
How to send bits during peer communication (TCP -> UDP).
The specification of HTTP/3 is still in progress.
The latest version is draft-22 (Jul. 2019 ).
HTTP/2 | HTTP/3 | |
---|---|---|
Data Transfers | TCP | QUIC (UDP) |
Connections | ✔️ | ✔️ |
Connection Migration | ✔️ | |
Streams | Application layer | Transport layer |
Stream Multiplexing | ✔️ | ✔️ |
Stream Prioritization | ✔️ | ✔️ |
Flow Control | ✔️ | ✔️ |
Secure | Optional | ✔️ (TLS 1.3) |
Transport Handshake | 2/3-RTT | 1-RTT |
Fast Handshake | ✔️ (TCP fast open) | ✔️ (TLS 1.3) |
Server Push | ✔️ | ✔️ |
Header Compression | ✔️ (HPACK) | ✔️ (QPACK) |
Connection ID
Stream ID
Stream prioritization
TLS 1.3
Requirements
The client has a previous connection to the server.
The secret of the connection has been cached in both of them.
The server has enabled the 0-RTT handshake (accept early data).
Unfortunately, there is no standard API for QUIC.
QUIC is typically implemented in user-space.
No OS kernels support QUIC right now.
Discussion Issues in net/http
A list of implementations
In this tech sharing, we have introduced HTTP/3 and QUIC.
Goals of HTTP/3 are reducing latency and solving HOL blocking in the transport layer.
HTTP/3 and QUIC are more likely designed for the next decade.