<div dir="ltr"><div>привет!</div><div><br></div><div>если проверять nginx-1.17.4 вот этой утилитой <a href="https://github.com/summerwind/h2spec">https://github.com/summerwind/h2spec</a></div><div>то несколько десятков тестов фейлятся. можете прокомментировать ?</div><div><br></div><div>[ilia@localhost h2spec]$ ./h2spec -p 443 -h <a href="http://xxx.xxx.ru">xxx.xxx.ru</a> -t http2 <br>Hypertext Transfer Protocol Version 2 (HTTP/2)<br>  3. Starting HTTP/2<br>    3.5. HTTP/2 Connection Preface<br>      ✔ 1: Sends client connection preface<br>      ✔ 2: Sends invalid connection preface<br><br>  4. HTTP Frames<br>    4.1. Frame Format<br>      ✔ 1: Sends a frame with unknown type<br>      ✔ 2: Sends a frame with undefined flag<br>      ✔ 3: Sends a frame with reserved field bit<br><br>    4.2. Frame Size<br>      ✔ 1: Sends a DATA frame with 2^14 octets in length<br>      × 2: Sends a large size DATA frame that exceeds the SETTINGS_MAX_FRAME_SIZE<br>        -> The endpoint MUST send an error code of FRAME_SIZE_ERROR.<br>           Expected: GOAWAY Frame (Error Code: FRAME_SIZE_ERROR)<br>                     RST_STREAM Frame (Error Code: FRAME_SIZE_ERROR)<br>                     Connection closed<br>             Actual: WINDOW_UPDATE Frame (length:4, flags:0x00, stream_id:1)<br>      ✔ 3: Sends a large size HEADERS frame that exceeds the SETTINGS_MAX_FRAME_SIZE<br><br>    4.3. Header Compression and Decompression<br>      ✔ 1: Sends invalid header block fragment<br>      ✔ 2: Sends a PRIORITY frame while sending the header blocks<br>      ✔ 3: Sends a HEADERS frame to another stream while sending the header blocks<br><br>  5. Streams and Multiplexing<br>    5.1. Stream States<br>      × 1: idle: Sends a DATA frame<br>        -> The endpoint MUST treat this as a connection error of type PROTOCOL_ERROR.<br>           Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)<br>                     Connection closed<br>             Actual: Timeout<br>      × 2: idle: Sends a RST_STREAM frame<br>        -> The endpoint MUST treat this as a connection error of type PROTOCOL_ERROR.<br>           Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)<br>                     Connection closed<br>             Actual: Timeout<br>      × 3: idle: Sends a WINDOW_UPDATE frame<br>        -> The endpoint MUST treat this as a connection error of type PROTOCOL_ERROR.<br>           Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)<br>                     Connection closed<br>             Actual: Timeout<br>      ✔ 4: idle: Sends a CONTINUATION frame<br>      ✔ 5: half closed (remote): Sends a DATA frame<br>      ✔ 6: half closed (remote): Sends a HEADERS frame<br>      ✔ 7: half closed (remote): Sends a CONTINUATION frame<br>      × 8: closed: Sends a DATA frame after sending RST_STREAM frame<br>        -> The endpoint MUST treat this as a stream error of type STREAM_CLOSED.<br>           Expected: GOAWAY Frame (Error Code: STREAM_CLOSED)<br>                     RST_STREAM Frame (Error Code: STREAM_CLOSED)<br>                     Connection closed<br>             Actual: WINDOW_UPDATE Frame (length:4, flags:0x00, stream_id:1)<br>      ✔ 9: closed: Sends a HEADERS frame after sending RST_STREAM frame<br>      ✔ 10: closed: Sends a CONTINUATION frame after sending RST_STREAM frame<br>      × 11: closed: Sends a DATA frame<br>        -> The endpoint MUST treat this as a connection error of type STREAM_CLOSED.<br>           Expected: GOAWAY Frame (Error Code: STREAM_CLOSED)<br>                     RST_STREAM Frame (Error Code: STREAM_CLOSED)<br>                     Connection closed<br>             Actual: Timeout<br>      ✔ 12: closed: Sends a HEADERS frame<br>      ✔ 13: closed: Sends a CONTINUATION frame<br><br>      5.1.1. Stream Identifiers<br>        ✔ 1: Sends even-numbered stream identifier<br>        ✔ 2: Sends stream identifier that is numerically smaller than previous<br><br>      5.1.2. Stream Concurrency<br>        ✔ 1: Sends HEADERS frames that causes their advertised concurrent stream limit to be exceeded<br><br>    5.3. Stream Priority<br>      5.3.1. Stream Dependencies<br>        ✔ 1: Sends HEADERS frame that depend on itself<br>        ✔ 2: Sends PRIORITY frame that depend on itself<br><br>    5.4. Error Handling<br>      5.4.1. Connection Error Handling<br>        × 1: Sends an invalid PING frame for connection close<br>          -> The endpoint MUST close the TCP connection<br>             Expected: Connection closed<br>               Actual: PING Frame (length:8, flags:0x01, stream_id:0)<br><br>    5.5. Extending HTTP/2<br>      ✔ 1: Sends an unknown extension frame<br>      ✔ 2: Sends an unknown extension frame in the middle of a header block<br><br>  6. Frame Definitions<br>    6.1. DATA<br>      × 1: Sends a DATA frame with 0x0 stream identifier<br>        -> The endpoint MUST respond with a connection error of type PROTOCOL_ERROR.<br>           Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)<br>                     Connection closed<br>             Actual: Timeout<br>      ✔ 2: Sends a DATA frame on the stream that is not in "open" or "half-closed (local)" state<br>      ✔ 3: Sends a DATA frame with invalid pad length<br><br>    6.2. HEADERS<br>      ✔ 1: Sends a HEADERS frame without the END_HEADERS flag, and a PRIORITY frame<br>      ✔ 2: Sends a HEADERS frame to another stream while sending a HEADERS frame<br>      ✔ 3: Sends a HEADERS frame with 0x0 stream identifier<br>      ✔ 4: Sends a HEADERS frame with invalid pad length<br><br>    6.3. PRIORITY<br>      ✔ 1: Sends a PRIORITY frame with 0x0 stream identifier<br>      ✔ 2: Sends a PRIORITY frame with a length other than 5 octets<br><br>    6.4. RST_STREAM<br>      ✔ 1: Sends a RST_STREAM frame with 0x0 stream identifier<br>      × 2: Sends a RST_STREAM frame on a idle stream<br>        -> The endpoint MUST respond with a connection error of type PROTOCOL_ERROR.<br>           Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)<br>                     Connection closed<br>             Actual: Timeout<br>      ✔ 3: Sends a RST_STREAM frame with a length other than 4 octets<br><br>    6.5. SETTINGS<br>      ✔ 1: Sends a SETTINGS frame with ACK flag and payload<br>      × 2: Sends a SETTINGS frame with a stream identifier other than 0x0<br>        -> The endpoint MUST respond with a connection error of type PROTOCOL_ERROR.<br>           Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)<br>                     Connection closed<br>             Actual: SETTINGS Frame (length:0, flags:0x01, stream_id:0)<br>      ✔ 3: Sends a SETTINGS frame with a length other than a multiple of 6 octets<br><br>      6.5.2. Defined SETTINGS Parameters<br>        ✔ 1: SETTINGS_ENABLE_PUSH (0x2): Sends the value other than 0 or 1<br>        ✔ 2: SETTINGS_INITIAL_WINDOW_SIZE (0x4): Sends the value above the maximum flow control window size<br>        ✔ 3: SETTINGS_MAX_FRAME_SIZE (0x5): Sends the value below the initial value<br>        ✔ 4: SETTINGS_MAX_FRAME_SIZE (0x5): Sends the value above the maximum allowed frame size<br>        ✔ 5: Sends a SETTINGS frame with unknown identifier<br><br>      6.5.3. Settings Synchronization<br>        ✔ 1: Sends multiple values of SETTINGS_INITIAL_WINDOW_SIZE<br>        ✔ 2: Sends a SETTINGS frame without ACK flag<br><br>    6.7. PING<br>      ✔ 1: Sends a PING frame<br>      ✔ 2: Sends a PING frame with ACK<br>      × 3: Sends a PING frame with a stream identifier field value other than 0x0<br>        -> The endpoint MUST respond with a connection error of type PROTOCOL_ERROR.<br>           Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)<br>                     Connection closed<br>             Actual: PING Frame (length:8, flags:0x01, stream_id:0)<br>      ✔ 4: Sends a PING frame with a length field value other than 8<br><br>    6.8. GOAWAY<br>      × 1: Sends a GOAWAY frame with a stream identifier other than 0x0<br>        -> The endpoint MUST treat this as a connection error of type PROTOCOL_ERROR.<br>           Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)<br>                     Connection closed<br>             Actual: Timeout<br><br>    6.9. WINDOW_UPDATE<br>      ✔ 1: Sends a WINDOW_UPDATE frame with a flow control window increment of 0<br>      ✔ 2: Sends a WINDOW_UPDATE frame with a flow control window increment of 0 on a stream<br>      ✔ 3: Sends a WINDOW_UPDATE frame with a length other than 4 octets<br><br>      6.9.1. The Flow-Control Window<br>        ✔ 1: Sends SETTINGS frame to set the initial window size to 1 and sends HEADERS frame<br>        ✔ 2: Sends multiple WINDOW_UPDATE frames increasing the flow control window to above 2^31-1<br>        ✔ 3: Sends multiple WINDOW_UPDATE frames increasing the flow control window to above 2^31-1 on a stream<br><br>      6.9.2. Initial Flow-Control Window Size<br>        ✔ 1: Changes SETTINGS_INITIAL_WINDOW_SIZE after sending HEADERS frame<br>        ✔ 2: Sends a SETTINGS frame for window size to be negative<br>        ✔ 3: Sends a SETTINGS_INITIAL_WINDOW_SIZE settings with an exceeded maximum window size value<br><br>    6.10. CONTINUATION<br>      ✔ 1: Sends multiple CONTINUATION frames preceded by a HEADERS frame<br>      ✔ 2: Sends a CONTINUATION frame followed by any frame other than CONTINUATION<br>      ✔ 3: Sends a CONTINUATION frame with 0x0 stream identifier<br>      ✔ 4: Sends a CONTINUATION frame preceded by a HEADERS frame with END_HEADERS flag<br>      ✔ 5: Sends a CONTINUATION frame preceded by a CONTINUATION frame with END_HEADERS flag<br>      ✔ 6: Sends a CONTINUATION frame preceded by a DATA frame<br><br>  7. Error Codes<br>    ✔ 1: Sends a GOAWAY frame with unknown error code<br>    ✔ 2: Sends a RST_STREAM frame with unknown error code<br><br>  8. HTTP Message Exchanges<br>    8.1. HTTP Request/Response Exchange<br>      ✔ 1: Sends a second HEADERS frame without the END_STREAM flag<br><br>      8.1.2. HTTP Header Fields<br>        ✔ 1: Sends a HEADERS frame that contains the header field name in uppercase letters<br><br>        8.1.2.1. Pseudo-Header Fields<br>          × 1: Sends a HEADERS frame that contains a unknown pseudo-header field<br>            -> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR.<br>               Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)<br>                         RST_STREAM Frame (Error Code: PROTOCOL_ERROR)<br>                         Connection closed<br>                 Actual: DATA Frame (length:150, flags:0x01, stream_id:1)<br>          × 2: Sends a HEADERS frame that contains the pseudo-header field defined for response<br>            -> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR.<br>               Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)<br>                         RST_STREAM Frame (Error Code: PROTOCOL_ERROR)<br>                         Connection closed<br>                 Actual: DATA Frame (length:150, flags:0x01, stream_id:1)<br>          ✔ 3: Sends a HEADERS frame that contains a pseudo-header field as trailers<br>          × 4: Sends a HEADERS frame that contains a pseudo-header field that appears in a header block after a regular header field<br>            -> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR.<br>               Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)<br>                         RST_STREAM Frame (Error Code: PROTOCOL_ERROR)<br>                         Connection closed<br>                 Actual: DATA Frame (length:0, flags:0x01, stream_id:1)<br><br>        8.1.2.2. Connection-Specific Header Fields<br>          × 1: Sends a HEADERS frame that contains the connection-specific header field<br>            -> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR.<br>               Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)<br>                         RST_STREAM Frame (Error Code: PROTOCOL_ERROR)<br>                         Connection closed<br>                 Actual: DATA Frame (length:0, flags:0x01, stream_id:1)<br>          × 2: Sends a HEADERS frame that contains the TE header field with any value other than "trailers"<br>            -> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR.<br>               Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)<br>                         RST_STREAM Frame (Error Code: PROTOCOL_ERROR)<br>                         Connection closed<br>                 Actual: DATA Frame (length:0, flags:0x01, stream_id:1)<br><br>        8.1.2.3. Request Pseudo-Header Fields<br>          × 1: Sends a HEADERS frame with empty ":path" pseudo-header field<br>            -> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR.<br>               Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)<br>                         RST_STREAM Frame (Error Code: PROTOCOL_ERROR)<br>                         Connection closed<br>                 Actual: DATA Frame (length:150, flags:0x01, stream_id:1)<br>          × 2: Sends a HEADERS frame that omits ":method" pseudo-header field<br>            -> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR.<br>               Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)<br>                         RST_STREAM Frame (Error Code: PROTOCOL_ERROR)<br>                         Connection closed<br>                 Actual: DATA Frame (length:150, flags:0x01, stream_id:1)<br>          × 3: Sends a HEADERS frame that omits ":scheme" pseudo-header field<br>            -> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR.<br>               Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)<br>                         RST_STREAM Frame (Error Code: PROTOCOL_ERROR)<br>                         Connection closed<br>                 Actual: DATA Frame (length:150, flags:0x01, stream_id:1)<br>          × 4: Sends a HEADERS frame that omits ":path" pseudo-header field<br>            -> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR.<br>               Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)<br>                         RST_STREAM Frame (Error Code: PROTOCOL_ERROR)<br>                         Connection closed<br>                 Actual: DATA Frame (length:150, flags:0x01, stream_id:1)<br>          × 5: Sends a HEADERS frame with duplicated ":method" pseudo-header field<br>            -> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR.<br>               Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)<br>                         RST_STREAM Frame (Error Code: PROTOCOL_ERROR)<br>                         Connection closed<br>                 Actual: DATA Frame (length:150, flags:0x01, stream_id:1)<br>          × 6: Sends a HEADERS frame with duplicated ":scheme" pseudo-header field<br>            -> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR.<br>               Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)<br>                         RST_STREAM Frame (Error Code: PROTOCOL_ERROR)<br>                         Connection closed<br>                 Actual: DATA Frame (length:150, flags:0x01, stream_id:1)<br>          × 7: Sends a HEADERS frame with duplicated ":path" pseudo-header field<br>            -> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR.<br>               Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)<br>                         RST_STREAM Frame (Error Code: PROTOCOL_ERROR)<br>                         Connection closed<br>                 Actual: DATA Frame (length:150, flags:0x01, stream_id:1)<br><br>        8.1.2.6. Malformed Requests and Responses<br>          × 1: Sends a HEADERS frame with the "content-length" header field which does not equal the DATA frame payload length<br>            -> The endpoint MUST treat this as a stream error of type PROTOCOL_ERROR.<br>               Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)<br>                         RST_STREAM Frame (Error Code: PROTOCOL_ERROR)<br>                         Connection closed<br>                 Actual: DATA Frame (length:150, flags:0x01, stream_id:1)<br>          × 2: Sends a HEADERS frame with the "content-length" header field which does not equal the sum of the multiple DATA frames payload length<br>            -> The endpoint MUST treat this as a stream error of type PROTOCOL_ERROR.<br>               Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)<br>                         RST_STREAM Frame (Error Code: PROTOCOL_ERROR)<br>                         Connection closed<br>                 Actual: DATA Frame (length:150, flags:0x01, stream_id:1)<br><br>    8.2. Server Push<br>      ✔ 1: Sends a PUSH_PROMISE frame<br><br>Failures: <br><br>Hypertext Transfer Protocol Version 2 (HTTP/2)<br>  4. HTTP Frames<br>    4.2. Frame Size<br>      × 2: Sends a large size DATA frame that exceeds the SETTINGS_MAX_FRAME_SIZE<br>        -> The endpoint MUST send an error code of FRAME_SIZE_ERROR.<br>           Expected: GOAWAY Frame (Error Code: FRAME_SIZE_ERROR)<br>                     RST_STREAM Frame (Error Code: FRAME_SIZE_ERROR)<br>                     Connection closed<br>             Actual: WINDOW_UPDATE Frame (length:4, flags:0x00, stream_id:1)<br><br>  5. Streams and Multiplexing<br>    5.1. Stream States<br>      × 1: idle: Sends a DATA frame<br>        -> The endpoint MUST treat this as a connection error of type PROTOCOL_ERROR.<br>           Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)<br>                     Connection closed<br>             Actual: Timeout<br>      × 2: idle: Sends a RST_STREAM frame<br>        -> The endpoint MUST treat this as a connection error of type PROTOCOL_ERROR.<br>           Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)<br>                     Connection closed<br>             Actual: Timeout<br>      × 3: idle: Sends a WINDOW_UPDATE frame<br>        -> The endpoint MUST treat this as a connection error of type PROTOCOL_ERROR.<br>           Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)<br>                     Connection closed<br>             Actual: Timeout<br>      × 8: closed: Sends a DATA frame after sending RST_STREAM frame<br>        -> The endpoint MUST treat this as a stream error of type STREAM_CLOSED.<br>           Expected: GOAWAY Frame (Error Code: STREAM_CLOSED)<br>                     RST_STREAM Frame (Error Code: STREAM_CLOSED)<br>                     Connection closed<br>             Actual: WINDOW_UPDATE Frame (length:4, flags:0x00, stream_id:1)<br>      × 11: closed: Sends a DATA frame<br>        -> The endpoint MUST treat this as a connection error of type STREAM_CLOSED.<br>           Expected: GOAWAY Frame (Error Code: STREAM_CLOSED)<br>                     RST_STREAM Frame (Error Code: STREAM_CLOSED)<br>                     Connection closed<br>             Actual: Timeout<br><br>    5.4. Error Handling<br>      5.4.1. Connection Error Handling<br>        × 1: Sends an invalid PING frame for connection close<br>          -> The endpoint MUST close the TCP connection<br>             Expected: Connection closed<br>               Actual: PING Frame (length:8, flags:0x01, stream_id:0)<br><br>  6. Frame Definitions<br>    6.1. DATA<br>      × 1: Sends a DATA frame with 0x0 stream identifier<br>        -> The endpoint MUST respond with a connection error of type PROTOCOL_ERROR.<br>           Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)<br>                     Connection closed<br>             Actual: Timeout<br><br>    6.4. RST_STREAM<br>      × 2: Sends a RST_STREAM frame on a idle stream<br>        -> The endpoint MUST respond with a connection error of type PROTOCOL_ERROR.<br>           Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)<br>                     Connection closed<br>             Actual: Timeout<br><br>    6.5. SETTINGS<br>      × 2: Sends a SETTINGS frame with a stream identifier other than 0x0<br>        -> The endpoint MUST respond with a connection error of type PROTOCOL_ERROR.<br>           Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)<br>                     Connection closed<br>             Actual: SETTINGS Frame (length:0, flags:0x01, stream_id:0)<br><br>    6.7. PING<br>      × 3: Sends a PING frame with a stream identifier field value other than 0x0<br>        -> The endpoint MUST respond with a connection error of type PROTOCOL_ERROR.<br>           Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)<br>                     Connection closed<br>             Actual: PING Frame (length:8, flags:0x01, stream_id:0)<br><br>    6.8. GOAWAY<br>      × 1: Sends a GOAWAY frame with a stream identifier other than 0x0<br>        -> The endpoint MUST treat this as a connection error of type PROTOCOL_ERROR.<br>           Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)<br>                     Connection closed<br>             Actual: Timeout<br><br>  8. HTTP Message Exchanges<br>    8.1. HTTP Request/Response Exchange<br>      8.1.2. HTTP Header Fields<br>        8.1.2.1. Pseudo-Header Fields<br>          × 1: Sends a HEADERS frame that contains a unknown pseudo-header field<br>            -> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR.<br>               Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)<br>                         RST_STREAM Frame (Error Code: PROTOCOL_ERROR)<br>                         Connection closed<br>                 Actual: DATA Frame (length:150, flags:0x01, stream_id:1)<br>          × 2: Sends a HEADERS frame that contains the pseudo-header field defined for response<br>            -> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR.<br>               Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)<br>                         RST_STREAM Frame (Error Code: PROTOCOL_ERROR)<br>                         Connection closed<br>                 Actual: DATA Frame (length:150, flags:0x01, stream_id:1)<br>          × 4: Sends a HEADERS frame that contains a pseudo-header field that appears in a header block after a regular header field<br>            -> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR.<br>               Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)<br>                         RST_STREAM Frame (Error Code: PROTOCOL_ERROR)<br>                         Connection closed<br>                 Actual: DATA Frame (length:0, flags:0x01, stream_id:1)<br><br>        8.1.2.2. Connection-Specific Header Fields<br>          × 1: Sends a HEADERS frame that contains the connection-specific header field<br>            -> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR.<br>               Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)<br>                         RST_STREAM Frame (Error Code: PROTOCOL_ERROR)<br>                         Connection closed<br>                 Actual: DATA Frame (length:0, flags:0x01, stream_id:1)<br>          × 2: Sends a HEADERS frame that contains the TE header field with any value other than "trailers"<br>            -> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR.<br>               Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)<br>                         RST_STREAM Frame (Error Code: PROTOCOL_ERROR)<br>                         Connection closed<br>                 Actual: DATA Frame (length:0, flags:0x01, stream_id:1)<br><br>        8.1.2.3. Request Pseudo-Header Fields<br>          × 1: Sends a HEADERS frame with empty ":path" pseudo-header field<br>            -> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR.<br>               Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)<br>                         RST_STREAM Frame (Error Code: PROTOCOL_ERROR)<br>                         Connection closed<br>                 Actual: DATA Frame (length:150, flags:0x01, stream_id:1)<br>          × 2: Sends a HEADERS frame that omits ":method" pseudo-header field<br>            -> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR.<br>               Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)<br>                         RST_STREAM Frame (Error Code: PROTOCOL_ERROR)<br>                         Connection closed<br>                 Actual: DATA Frame (length:150, flags:0x01, stream_id:1)<br>          × 3: Sends a HEADERS frame that omits ":scheme" pseudo-header field<br>            -> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR.<br>               Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)<br>                         RST_STREAM Frame (Error Code: PROTOCOL_ERROR)<br>                         Connection closed<br>                 Actual: DATA Frame (length:150, flags:0x01, stream_id:1)<br>          × 4: Sends a HEADERS frame that omits ":path" pseudo-header field<br>            -> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR.<br>               Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)<br>                         RST_STREAM Frame (Error Code: PROTOCOL_ERROR)<br>                         Connection closed<br>                 Actual: DATA Frame (length:150, flags:0x01, stream_id:1)<br>          × 5: Sends a HEADERS frame with duplicated ":method" pseudo-header field<br>            -> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR.<br>               Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)<br>                         RST_STREAM Frame (Error Code: PROTOCOL_ERROR)<br>                         Connection closed<br>                 Actual: DATA Frame (length:150, flags:0x01, stream_id:1)<br>          × 6: Sends a HEADERS frame with duplicated ":scheme" pseudo-header field<br>            -> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR.<br>               Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)<br>                         RST_STREAM Frame (Error Code: PROTOCOL_ERROR)<br>                         Connection closed<br>                 Actual: DATA Frame (length:150, flags:0x01, stream_id:1)<br>          × 7: Sends a HEADERS frame with duplicated ":path" pseudo-header field<br>            -> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR.<br>               Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)<br>                         RST_STREAM Frame (Error Code: PROTOCOL_ERROR)<br>                         Connection closed<br>                 Actual: DATA Frame (length:150, flags:0x01, stream_id:1)<br><br>        8.1.2.6. Malformed Requests and Responses<br>          × 1: Sends a HEADERS frame with the "content-length" header field which does not equal the DATA frame payload length<br>            -> The endpoint MUST treat this as a stream error of type PROTOCOL_ERROR.<br>               Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)<br>                         RST_STREAM Frame (Error Code: PROTOCOL_ERROR)<br>                         Connection closed<br>                 Actual: DATA Frame (length:150, flags:0x01, stream_id:1)<br>          × 2: Sends a HEADERS frame with the "content-length" header field which does not equal the sum of the multiple DATA frames payload length<br>            -> The endpoint MUST treat this as a stream error of type PROTOCOL_ERROR.<br>               Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)<br>                         RST_STREAM Frame (Error Code: PROTOCOL_ERROR)<br>                         Connection closed<br>                 Actual: DATA Frame (length:150, flags:0x01, stream_id:1)<br><br>Finished in 72.3573 seconds<br>94 tests, 68 passed, 0 skipped, 26 failed<br>[ilia@localhost h2spec]$ <br><br></div></div>