Какова строка запроса для HTTP/2?
Для HTTP/0.9:
GET /
Для HTTP/1.0:
GET / HTTP/1.0
Для HTTP/1.1:
GET / HTTP/1.1
Host: example.com
Какова строка запроса для HTTP/2? Это что-то вроде:
GET / HTTP/2.0
Или HTTP/2?
1 ответ
Ни один; такой строки запроса нет, поскольку HTTP/2 (RFC 7540) для связи использует не строки, а кадры (раздел 4 ).Внутри этих кадров обмен заголовками осуществляется с использованием полей заголовка HTTP (раздел 8.1.2).
Клиент сначала должен узнать, поддерживает ли сервер HTTP/2.
Для HTTP (раздел 3.2) это делается с помощью
Upgrade: h2c
заголовки:> GET / HTTP/1.1 > Host: server.example.com > Connection: Upgrade, HTTP2-Settings > Upgrade: h2c > HTTP2-Settings: <base64url encoding of HTTP/2 SETTINGS payload> > < HTTP/1.1 101 Switching Protocols < Connection: Upgrade < Upgrade: h2c < [ HTTP/2 connection ...
Для HTTPS (раздел 3.3)
h2
используется идентификатор протокола в TLS-ALPN (RFC 7301 ).Сразу же начните с предисловия к соединению HTTP/2 , учитывая предварительные знания (раздел 3.4).
Теперь предисловие к клиентскому соединению HTTP/2 (раздел 3.5) может быть эквивалентом, который вы ищете, поскольку связь всегда начинается с последовательности из 24 октетов:
0x505249202a20485454502f322e300d0a0d0a534d0d0a0d0a
т.е.
PRI *m HTTP/2.0\r\n\r\nSM\r\n\r\n
После этого в кадрах происходит обмен полями заголовка, используя сжатие заголовка (раздел 4.3):
Списки заголовков представляют собой коллекции из нуля или более полей заголовков. При передаче по соединению список заголовков сериализуется в блок заголовков с использованием сжатия заголовков HTTP [COMPRESSION]. Затем сериализованный блок заголовка делится на одну или несколько последовательностей октетов, называемых фрагментами блока заголовка, и передается в составе полезной нагрузки
HEADERS
(раздел 6.2),PUSH_PROMISE
(раздел 6.6) илиCONTINUATION
(раздел 6.10) кадры.
Эквиваленты HTTP/2 для нескольких запросов и ответов HTTP/1.1 проиллюстрированы в примерах раздела 8.1.3, например
GET /resource HTTP/1.1 HEADERS Host: example.org ==> + END_STREAM Accept: image/jpeg + END_HEADERS :method = GET :scheme = https :path = /resource host = example.org accept = image/jpeg