HTTP/3:修订间差异
第54行: | 第54行: | ||
autoreconf -fi | autoreconf -fi | ||
./configure --enable-lib-only | ./configure --enable-lib-only | ||
make && sudo make install | |||
</syntaxhighlight> | |||
Build OpenSSL: | |||
<syntaxhighlight lang="bash"> | |||
wget https://www.openssl.org/source/openssl-3.2.0.tar.gz | |||
cd openssl | |||
./config enable-tls1_3 | |||
make && sudo make install | make && sudo make install | ||
</syntaxhighlight> | </syntaxhighlight> |
2024年1月23日 (二) 07:16的版本
HTTP/3 is the third major version of the Hypertext Transfer Protocol used to exchange information on the World Wide Web, complementing the widely-deployed HTTP/1.1 and HTTP/2. Unlike previous versions which relied on the well-established TCP (published in 1974), HTTP/3 uses QUIC, a multiplexed transport protocol built on UDP. On 6 June 2022, IETF published HTTP/3 as a Proposed Standard in RFC 9114.
Overview
HTTP/2 vs HTTP/3
One of the main touted advantages of HTTP/3 is increased performance, specifically around fetching multiple objects simultaneously. With HTTP/2, any interruption (packet loss) in the TCP connection blocks all streams (Head of line blocking). Because HTTP/3 is UDP-based, if a packet gets dropped that only interrupts that one stream, not all of them.
In addition, HTTP/3 offers 0-RTT support, which means that subsequent connections can start up much faster by eliminating the TLS acknowledgement from the server when setting up the connection. This means the client can start requesting data much faster than with a full TLS negotiation, meaning the website starts loading earlier.[2]
Performance
cURL with HTTP3
Install build tools
wget http://ftp.gnu.org/gnu/m4/m4-latest.tar.gz
wget http://ftp.gnu.org/gnu/autoconf/autoconf-latest.tar.gz
wget https://ftp.gnu.org/gnu/automake/automake-1.16.5.tar.gz
wget https://ftpmirror.gnu.org/libtool/libtool-2.4.7.tar.gz
cd m4-*
./configure
make && sudo make install
wget https://pkg-config.freedesktop.org/releases/pkg-config-0.29.2.tar.gz
./configure --with-internal-glib
Build curl
Ref: https://github.com/curl/curl/blob/master/docs/HTTP3.md Build quictls:
git clone --depth 1 -b openssl-3.1.4+quic https://github.com/quictls/openssl
cd openssl
./config enable-tls1_3
make
make install
Build nghttp3:
git clone -b v1.1.0 https://github.com/ngtcp2/ngtcp2
cd ngtcp2
autoreconf -fi
./configure --enable-lib-only
make && sudo make install
Build OpenSSL:
wget https://www.openssl.org/source/openssl-3.2.0.tar.gz
cd openssl
./config enable-tls1_3
make && sudo make install
Build curl:
git clone https://github.com/curl/curl
cd curl
autoreconf -fi
./configure --with-openssl=<somewhere1> --with-nghttp3=<somewhere2> --with-ngtcp2=<somewhere3>
FAQ
Is HTTP/3 using UDP more reliable than HTTP/2 (etc.) using TCP?
It isn’t more reliable.
It has quite different performance properties in some ways, mostly lower latency for HTTP requests, and much lower latency for HTTPS session setup.
But the reliability is the same or lower. That’s not the point.[4]
Why is encryption significant in HTTP/3?
HTTP/3 encrypts connections by default at the transport layer, offering improved security. This differs from previous versions, where encryption occurred separately at the application layer. Encrypting by default helps protect user data, reduces latency, and ensures a safer browsing experience.