Re: тестирование http2 утилитой h2spec
Sergey Kandaurov
pluknet на nginx.com
Пн Сен 30 17:20:52 UTC 2019
> On 28 Sep 2019, at 11:42, Илья Шипицин <chipitsine на gmail.com> wrote:
>
> привет!
>
> если проверять nginx-1.17.4 вот этой утилитой https://github.com/summerwind/h2spec
> то несколько десятков тестов фейлятся. можете прокомментировать ?
>
> [ilia на localhost h2spec]$ ./h2spec -p 443 -h xxx.xxx.ru -t http2
> Hypertext Transfer Protocol Version 2 (HTTP/2)
> 3. Starting HTTP/2
> 3.5. HTTP/2 Connection Preface
> ✔ 1: Sends client connection preface
> ✔ 2: Sends invalid connection preface
>
> 4. HTTP Frames
> 4.1. Frame Format
> ✔ 1: Sends a frame with unknown type
> ✔ 2: Sends a frame with undefined flag
> ✔ 3: Sends a frame with reserved field bit
>
> 4.2. Frame Size
> ✔ 1: Sends a DATA frame with 2^14 octets in length
Здесь тестируется что-то другое.
Тест не проверяет, что мы отправляем максимальный SETTINGS_MAX_FRAME_SIZE,
либо проверяет, но тогда описание не соответствует тому, что тестируется,
т.к. согласно данным объективного контроля DATA имеет длину 16777215 байт.
Далее, если тест наступит на client_max_body_size (по умолчанию 1m)
и nginx вернёт HTTP 413, не дочитав собственно тело,
тест всё равно будет признан успешным, т.к. получен HEADERS.
Поэтому вопрос, что здесь тестируется.
> × 2: Sends a large size DATA frame that exceeds the SETTINGS_MAX_FRAME_SIZE
> -> The endpoint MUST send an error code of FRAME_SIZE_ERROR.
> Expected: GOAWAY Frame (Error Code: FRAME_SIZE_ERROR)
> RST_STREAM Frame (Error Code: FRAME_SIZE_ERROR)
> Connection closed
> Actual: WINDOW_UPDATE Frame (length:4, flags:0x00, stream_id:1)
Вопреки описанию, тест закрывает соединение по собственной инициативе
через две с небольшим секунды после отправки HEADERS.
> ✔ 3: Sends a large size HEADERS frame that exceeds the SETTINGS_MAX_FRAME_SIZE
Здесь тестируется что-то другое, см. выше по SETTINGS_MAX_FRAME_SIZE.
Тест отправляет HEADERS длиной > SETTINGS_MAX_FRAME_SIZE по умолчанию
и проверяет получение GOAWAY, который приходит, но по другой причине
(и с другим кодом). А именно - в следствие достижения собственного лимита
в nginx, который настраивается директивой http2_max_header_size.
Дальше не смотрел.
--
Sergey Kandaurov
Подробная информация о списке рассылки nginx-ru