тестирование http2 утилитой h2spec

Илья Шипицин chipitsine на gmail.com
Сб Сен 28 08:42:49 UTC 2019


привет!

если проверять 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
      × 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)
      ✔ 3: Sends a large size HEADERS frame that exceeds the
SETTINGS_MAX_FRAME_SIZE

    4.3. Header Compression and Decompression
      ✔ 1: Sends invalid header block fragment
      ✔ 2: Sends a PRIORITY frame while sending the header blocks
      ✔ 3: Sends a HEADERS frame to another stream while sending the header
blocks

  5. Streams and Multiplexing
    5.1. Stream States
      × 1: idle: Sends a DATA frame
        -> The endpoint MUST treat this as a connection error of type
PROTOCOL_ERROR.
           Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
                     Connection closed
             Actual: Timeout
      × 2: idle: Sends a RST_STREAM frame
        -> The endpoint MUST treat this as a connection error of type
PROTOCOL_ERROR.
           Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
                     Connection closed
             Actual: Timeout
      × 3: idle: Sends a WINDOW_UPDATE frame
        -> The endpoint MUST treat this as a connection error of type
PROTOCOL_ERROR.
           Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
                     Connection closed
             Actual: Timeout
      ✔ 4: idle: Sends a CONTINUATION frame
      ✔ 5: half closed (remote): Sends a DATA frame
      ✔ 6: half closed (remote): Sends a HEADERS frame
      ✔ 7: half closed (remote): Sends a CONTINUATION frame
      × 8: closed: Sends a DATA frame after sending RST_STREAM frame
        -> The endpoint MUST treat this as a stream error of type
STREAM_CLOSED.
           Expected: GOAWAY Frame (Error Code: STREAM_CLOSED)
                     RST_STREAM Frame (Error Code: STREAM_CLOSED)
                     Connection closed
             Actual: WINDOW_UPDATE Frame (length:4, flags:0x00, stream_id:1)
      ✔ 9: closed: Sends a HEADERS frame after sending RST_STREAM frame
      ✔ 10: closed: Sends a CONTINUATION frame after sending RST_STREAM
frame
      × 11: closed: Sends a DATA frame
        -> The endpoint MUST treat this as a connection error of type
STREAM_CLOSED.
           Expected: GOAWAY Frame (Error Code: STREAM_CLOSED)
                     RST_STREAM Frame (Error Code: STREAM_CLOSED)
                     Connection closed
             Actual: Timeout
      ✔ 12: closed: Sends a HEADERS frame
      ✔ 13: closed: Sends a CONTINUATION frame

      5.1.1. Stream Identifiers
        ✔ 1: Sends even-numbered stream identifier
        ✔ 2: Sends stream identifier that is numerically smaller than
previous

      5.1.2. Stream Concurrency
        ✔ 1: Sends HEADERS frames that causes their advertised concurrent
stream limit to be exceeded

    5.3. Stream Priority
      5.3.1. Stream Dependencies
        ✔ 1: Sends HEADERS frame that depend on itself
        ✔ 2: Sends PRIORITY frame that depend on itself

    5.4. Error Handling
      5.4.1. Connection Error Handling
        × 1: Sends an invalid PING frame for connection close
          -> The endpoint MUST close the TCP connection
             Expected: Connection closed
               Actual: PING Frame (length:8, flags:0x01, stream_id:0)

    5.5. Extending HTTP/2
      ✔ 1: Sends an unknown extension frame
      ✔ 2: Sends an unknown extension frame in the middle of a header block

  6. Frame Definitions
    6.1. DATA
      × 1: Sends a DATA frame with 0x0 stream identifier
        -> The endpoint MUST respond with a connection error of type
PROTOCOL_ERROR.
           Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
                     Connection closed
             Actual: Timeout
      ✔ 2: Sends a DATA frame on the stream that is not in "open" or
"half-closed (local)" state
      ✔ 3: Sends a DATA frame with invalid pad length

    6.2. HEADERS
      ✔ 1: Sends a HEADERS frame without the END_HEADERS flag, and a
PRIORITY frame
      ✔ 2: Sends a HEADERS frame to another stream while sending a HEADERS
frame
      ✔ 3: Sends a HEADERS frame with 0x0 stream identifier
      ✔ 4: Sends a HEADERS frame with invalid pad length

    6.3. PRIORITY
      ✔ 1: Sends a PRIORITY frame with 0x0 stream identifier
      ✔ 2: Sends a PRIORITY frame with a length other than 5 octets

    6.4. RST_STREAM
      ✔ 1: Sends a RST_STREAM frame with 0x0 stream identifier
      × 2: Sends a RST_STREAM frame on a idle stream
        -> The endpoint MUST respond with a connection error of type
PROTOCOL_ERROR.
           Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
                     Connection closed
             Actual: Timeout
      ✔ 3: Sends a RST_STREAM frame with a length other than 4 octets

    6.5. SETTINGS
      ✔ 1: Sends a SETTINGS frame with ACK flag and payload
      × 2: Sends a SETTINGS frame with a stream identifier other than 0x0
        -> The endpoint MUST respond with a connection error of type
PROTOCOL_ERROR.
           Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
                     Connection closed
             Actual: SETTINGS Frame (length:0, flags:0x01, stream_id:0)
      ✔ 3: Sends a SETTINGS frame with a length other than a multiple of 6
octets

      6.5.2. Defined SETTINGS Parameters
        ✔ 1: SETTINGS_ENABLE_PUSH (0x2): Sends the value other than 0 or 1
        ✔ 2: SETTINGS_INITIAL_WINDOW_SIZE (0x4): Sends the value above the
maximum flow control window size
        ✔ 3: SETTINGS_MAX_FRAME_SIZE (0x5): Sends the value below the
initial value
        ✔ 4: SETTINGS_MAX_FRAME_SIZE (0x5): Sends the value above the
maximum allowed frame size
        ✔ 5: Sends a SETTINGS frame with unknown identifier

      6.5.3. Settings Synchronization
        ✔ 1: Sends multiple values of SETTINGS_INITIAL_WINDOW_SIZE
        ✔ 2: Sends a SETTINGS frame without ACK flag

    6.7. PING
      ✔ 1: Sends a PING frame
      ✔ 2: Sends a PING frame with ACK
      × 3: Sends a PING frame with a stream identifier field value other
than 0x0
        -> The endpoint MUST respond with a connection error of type
PROTOCOL_ERROR.
           Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
                     Connection closed
             Actual: PING Frame (length:8, flags:0x01, stream_id:0)
      ✔ 4: Sends a PING frame with a length field value other than 8

    6.8. GOAWAY
      × 1: Sends a GOAWAY frame with a stream identifier other than 0x0
        -> The endpoint MUST treat this as a connection error of type
PROTOCOL_ERROR.
           Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
                     Connection closed
             Actual: Timeout

    6.9. WINDOW_UPDATE
      ✔ 1: Sends a WINDOW_UPDATE frame with a flow control window increment
of 0
      ✔ 2: Sends a WINDOW_UPDATE frame with a flow control window increment
of 0 on a stream
      ✔ 3: Sends a WINDOW_UPDATE frame with a length other than 4 octets

      6.9.1. The Flow-Control Window
        ✔ 1: Sends SETTINGS frame to set the initial window size to 1 and
sends HEADERS frame
        ✔ 2: Sends multiple WINDOW_UPDATE frames increasing the flow
control window to above 2^31-1
        ✔ 3: Sends multiple WINDOW_UPDATE frames increasing the flow
control window to above 2^31-1 on a stream

      6.9.2. Initial Flow-Control Window Size
        ✔ 1: Changes SETTINGS_INITIAL_WINDOW_SIZE after sending HEADERS
frame
        ✔ 2: Sends a SETTINGS frame for window size to be negative
        ✔ 3: Sends a SETTINGS_INITIAL_WINDOW_SIZE settings with an exceeded
maximum window size value

    6.10. CONTINUATION
      ✔ 1: Sends multiple CONTINUATION frames preceded by a HEADERS frame
      ✔ 2: Sends a CONTINUATION frame followed by any frame other than
CONTINUATION
      ✔ 3: Sends a CONTINUATION frame with 0x0 stream identifier
      ✔ 4: Sends a CONTINUATION frame preceded by a HEADERS frame with
END_HEADERS flag
      ✔ 5: Sends a CONTINUATION frame preceded by a CONTINUATION frame with
END_HEADERS flag
      ✔ 6: Sends a CONTINUATION frame preceded by a DATA frame

  7. Error Codes
    ✔ 1: Sends a GOAWAY frame with unknown error code
    ✔ 2: Sends a RST_STREAM frame with unknown error code

  8. HTTP Message Exchanges
    8.1. HTTP Request/Response Exchange
      ✔ 1: Sends a second HEADERS frame without the END_STREAM flag

      8.1.2. HTTP Header Fields
        ✔ 1: Sends a HEADERS frame that contains the header field name in
uppercase letters

        8.1.2.1. Pseudo-Header Fields
          × 1: Sends a HEADERS frame that contains a unknown pseudo-header
field
            -> The endpoint MUST respond with a stream error of type
PROTOCOL_ERROR.
               Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
                         RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
                         Connection closed
                 Actual: DATA Frame (length:150, flags:0x01, stream_id:1)
          × 2: Sends a HEADERS frame that contains the pseudo-header field
defined for response
            -> The endpoint MUST respond with a stream error of type
PROTOCOL_ERROR.
               Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
                         RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
                         Connection closed
                 Actual: DATA Frame (length:150, flags:0x01, stream_id:1)
          ✔ 3: Sends a HEADERS frame that contains a pseudo-header field as
trailers
          × 4: Sends a HEADERS frame that contains a pseudo-header field
that appears in a header block after a regular header field
            -> The endpoint MUST respond with a stream error of type
PROTOCOL_ERROR.
               Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
                         RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
                         Connection closed
                 Actual: DATA Frame (length:0, flags:0x01, stream_id:1)

        8.1.2.2. Connection-Specific Header Fields
          × 1: Sends a HEADERS frame that contains the connection-specific
header field
            -> The endpoint MUST respond with a stream error of type
PROTOCOL_ERROR.
               Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
                         RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
                         Connection closed
                 Actual: DATA Frame (length:0, flags:0x01, stream_id:1)
          × 2: Sends a HEADERS frame that contains the TE header field with
any value other than "trailers"
            -> The endpoint MUST respond with a stream error of type
PROTOCOL_ERROR.
               Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
                         RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
                         Connection closed
                 Actual: DATA Frame (length:0, flags:0x01, stream_id:1)

        8.1.2.3. Request Pseudo-Header Fields
          × 1: Sends a HEADERS frame with empty ":path" pseudo-header field
            -> The endpoint MUST respond with a stream error of type
PROTOCOL_ERROR.
               Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
                         RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
                         Connection closed
                 Actual: DATA Frame (length:150, flags:0x01, stream_id:1)
          × 2: Sends a HEADERS frame that omits ":method" pseudo-header
field
            -> The endpoint MUST respond with a stream error of type
PROTOCOL_ERROR.
               Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
                         RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
                         Connection closed
                 Actual: DATA Frame (length:150, flags:0x01, stream_id:1)
          × 3: Sends a HEADERS frame that omits ":scheme" pseudo-header
field
            -> The endpoint MUST respond with a stream error of type
PROTOCOL_ERROR.
               Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
                         RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
                         Connection closed
                 Actual: DATA Frame (length:150, flags:0x01, stream_id:1)
          × 4: Sends a HEADERS frame that omits ":path" pseudo-header field
            -> The endpoint MUST respond with a stream error of type
PROTOCOL_ERROR.
               Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
                         RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
                         Connection closed
                 Actual: DATA Frame (length:150, flags:0x01, stream_id:1)
          × 5: Sends a HEADERS frame with duplicated ":method"
pseudo-header field
            -> The endpoint MUST respond with a stream error of type
PROTOCOL_ERROR.
               Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
                         RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
                         Connection closed
                 Actual: DATA Frame (length:150, flags:0x01, stream_id:1)
          × 6: Sends a HEADERS frame with duplicated ":scheme"
pseudo-header field
            -> The endpoint MUST respond with a stream error of type
PROTOCOL_ERROR.
               Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
                         RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
                         Connection closed
                 Actual: DATA Frame (length:150, flags:0x01, stream_id:1)
          × 7: Sends a HEADERS frame with duplicated ":path" pseudo-header
field
            -> The endpoint MUST respond with a stream error of type
PROTOCOL_ERROR.
               Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
                         RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
                         Connection closed
                 Actual: DATA Frame (length:150, flags:0x01, stream_id:1)

        8.1.2.6. Malformed Requests and Responses
          × 1: Sends a HEADERS frame with the "content-length" header field
which does not equal the DATA frame payload length
            -> The endpoint MUST treat this as a stream error of type
PROTOCOL_ERROR.
               Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
                         RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
                         Connection closed
                 Actual: DATA Frame (length:150, flags:0x01, stream_id:1)
          × 2: Sends a HEADERS frame with the "content-length" header field
which does not equal the sum of the multiple DATA frames payload length
            -> The endpoint MUST treat this as a stream error of type
PROTOCOL_ERROR.
               Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
                         RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
                         Connection closed
                 Actual: DATA Frame (length:150, flags:0x01, stream_id:1)

    8.2. Server Push
      ✔ 1: Sends a PUSH_PROMISE frame

Failures:

Hypertext Transfer Protocol Version 2 (HTTP/2)
  4. HTTP Frames
    4.2. Frame Size
      × 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)

  5. Streams and Multiplexing
    5.1. Stream States
      × 1: idle: Sends a DATA frame
        -> The endpoint MUST treat this as a connection error of type
PROTOCOL_ERROR.
           Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
                     Connection closed
             Actual: Timeout
      × 2: idle: Sends a RST_STREAM frame
        -> The endpoint MUST treat this as a connection error of type
PROTOCOL_ERROR.
           Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
                     Connection closed
             Actual: Timeout
      × 3: idle: Sends a WINDOW_UPDATE frame
        -> The endpoint MUST treat this as a connection error of type
PROTOCOL_ERROR.
           Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
                     Connection closed
             Actual: Timeout
      × 8: closed: Sends a DATA frame after sending RST_STREAM frame
        -> The endpoint MUST treat this as a stream error of type
STREAM_CLOSED.
           Expected: GOAWAY Frame (Error Code: STREAM_CLOSED)
                     RST_STREAM Frame (Error Code: STREAM_CLOSED)
                     Connection closed
             Actual: WINDOW_UPDATE Frame (length:4, flags:0x00, stream_id:1)
      × 11: closed: Sends a DATA frame
        -> The endpoint MUST treat this as a connection error of type
STREAM_CLOSED.
           Expected: GOAWAY Frame (Error Code: STREAM_CLOSED)
                     RST_STREAM Frame (Error Code: STREAM_CLOSED)
                     Connection closed
             Actual: Timeout

    5.4. Error Handling
      5.4.1. Connection Error Handling
        × 1: Sends an invalid PING frame for connection close
          -> The endpoint MUST close the TCP connection
             Expected: Connection closed
               Actual: PING Frame (length:8, flags:0x01, stream_id:0)

  6. Frame Definitions
    6.1. DATA
      × 1: Sends a DATA frame with 0x0 stream identifier
        -> The endpoint MUST respond with a connection error of type
PROTOCOL_ERROR.
           Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
                     Connection closed
             Actual: Timeout

    6.4. RST_STREAM
      × 2: Sends a RST_STREAM frame on a idle stream
        -> The endpoint MUST respond with a connection error of type
PROTOCOL_ERROR.
           Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
                     Connection closed
             Actual: Timeout

    6.5. SETTINGS
      × 2: Sends a SETTINGS frame with a stream identifier other than 0x0
        -> The endpoint MUST respond with a connection error of type
PROTOCOL_ERROR.
           Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
                     Connection closed
             Actual: SETTINGS Frame (length:0, flags:0x01, stream_id:0)

    6.7. PING
      × 3: Sends a PING frame with a stream identifier field value other
than 0x0
        -> The endpoint MUST respond with a connection error of type
PROTOCOL_ERROR.
           Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
                     Connection closed
             Actual: PING Frame (length:8, flags:0x01, stream_id:0)

    6.8. GOAWAY
      × 1: Sends a GOAWAY frame with a stream identifier other than 0x0
        -> The endpoint MUST treat this as a connection error of type
PROTOCOL_ERROR.
           Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
                     Connection closed
             Actual: Timeout

  8. HTTP Message Exchanges
    8.1. HTTP Request/Response Exchange
      8.1.2. HTTP Header Fields
        8.1.2.1. Pseudo-Header Fields
          × 1: Sends a HEADERS frame that contains a unknown pseudo-header
field
            -> The endpoint MUST respond with a stream error of type
PROTOCOL_ERROR.
               Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
                         RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
                         Connection closed
                 Actual: DATA Frame (length:150, flags:0x01, stream_id:1)
          × 2: Sends a HEADERS frame that contains the pseudo-header field
defined for response
            -> The endpoint MUST respond with a stream error of type
PROTOCOL_ERROR.
               Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
                         RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
                         Connection closed
                 Actual: DATA Frame (length:150, flags:0x01, stream_id:1)
          × 4: Sends a HEADERS frame that contains a pseudo-header field
that appears in a header block after a regular header field
            -> The endpoint MUST respond with a stream error of type
PROTOCOL_ERROR.
               Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
                         RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
                         Connection closed
                 Actual: DATA Frame (length:0, flags:0x01, stream_id:1)

        8.1.2.2. Connection-Specific Header Fields
          × 1: Sends a HEADERS frame that contains the connection-specific
header field
            -> The endpoint MUST respond with a stream error of type
PROTOCOL_ERROR.
               Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
                         RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
                         Connection closed
                 Actual: DATA Frame (length:0, flags:0x01, stream_id:1)
          × 2: Sends a HEADERS frame that contains the TE header field with
any value other than "trailers"
            -> The endpoint MUST respond with a stream error of type
PROTOCOL_ERROR.
               Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
                         RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
                         Connection closed
                 Actual: DATA Frame (length:0, flags:0x01, stream_id:1)

        8.1.2.3. Request Pseudo-Header Fields
          × 1: Sends a HEADERS frame with empty ":path" pseudo-header field
            -> The endpoint MUST respond with a stream error of type
PROTOCOL_ERROR.
               Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
                         RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
                         Connection closed
                 Actual: DATA Frame (length:150, flags:0x01, stream_id:1)
          × 2: Sends a HEADERS frame that omits ":method" pseudo-header
field
            -> The endpoint MUST respond with a stream error of type
PROTOCOL_ERROR.
               Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
                         RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
                         Connection closed
                 Actual: DATA Frame (length:150, flags:0x01, stream_id:1)
          × 3: Sends a HEADERS frame that omits ":scheme" pseudo-header
field
            -> The endpoint MUST respond with a stream error of type
PROTOCOL_ERROR.
               Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
                         RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
                         Connection closed
                 Actual: DATA Frame (length:150, flags:0x01, stream_id:1)
          × 4: Sends a HEADERS frame that omits ":path" pseudo-header field
            -> The endpoint MUST respond with a stream error of type
PROTOCOL_ERROR.
               Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
                         RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
                         Connection closed
                 Actual: DATA Frame (length:150, flags:0x01, stream_id:1)
          × 5: Sends a HEADERS frame with duplicated ":method"
pseudo-header field
            -> The endpoint MUST respond with a stream error of type
PROTOCOL_ERROR.
               Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
                         RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
                         Connection closed
                 Actual: DATA Frame (length:150, flags:0x01, stream_id:1)
          × 6: Sends a HEADERS frame with duplicated ":scheme"
pseudo-header field
            -> The endpoint MUST respond with a stream error of type
PROTOCOL_ERROR.
               Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
                         RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
                         Connection closed
                 Actual: DATA Frame (length:150, flags:0x01, stream_id:1)
          × 7: Sends a HEADERS frame with duplicated ":path" pseudo-header
field
            -> The endpoint MUST respond with a stream error of type
PROTOCOL_ERROR.
               Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
                         RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
                         Connection closed
                 Actual: DATA Frame (length:150, flags:0x01, stream_id:1)

        8.1.2.6. Malformed Requests and Responses
          × 1: Sends a HEADERS frame with the "content-length" header field
which does not equal the DATA frame payload length
            -> The endpoint MUST treat this as a stream error of type
PROTOCOL_ERROR.
               Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
                         RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
                         Connection closed
                 Actual: DATA Frame (length:150, flags:0x01, stream_id:1)
          × 2: Sends a HEADERS frame with the "content-length" header field
which does not equal the sum of the multiple DATA frames payload length
            -> The endpoint MUST treat this as a stream error of type
PROTOCOL_ERROR.
               Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
                         RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
                         Connection closed
                 Actual: DATA Frame (length:150, flags:0x01, stream_id:1)

Finished in 72.3573 seconds
94 tests, 68 passed, 0 skipped, 26 failed
[ilia на localhost h2spec]$
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mailman.nginx.org/pipermail/nginx-ru/attachments/20190928/76c12a4b/attachment-0001.htm>


Подробная информация о списке рассылки nginx-ru