Какова строка запроса для 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
Другие вопросы по тегам