Uploaded image for project: 'Undertow'
  1. Undertow
  2. UNDERTOW-997

http2 implementation in Undertow fails some RFC compliancy checks

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Done
    • Icon: Major Major
    • 2.0.0.Beta1, 1.4.11.Final
    • None
    • None
    • None
    • Hide

      Execute compiled testsuite e.g. like:

      ./h2spec -h localhost -t -k -p 8443
      
      Show
      Execute compiled testsuite e.g. like: ./h2spec -h localhost -t -k -p 8443

      There have been added some new tests into this third-party HTTP2 testsuite and some of them are failing with current HTTP2 implementation in Undertow, namely:

      Generic tests for HTTP/2 server
        5. HPACK
          × 1: Sends a indexed header field representation
            -> The endpoint MUST accept indexed header field representation
               Expected: HEADERS Frame (stream_id:1)
                 Actual: Connection closed
      
      Hypertext Transfer Protocol Version 2 (HTTP/2)
        4. HTTP Frames
          4.2. Frame Size
            × 3: Sends a large size HEADERS frame that exceeds the SETTINGS_MAX_FRAME_SIZE
              -> The endpoint MUST respond with a connection error of type FRAME_SIZE_ERROR.
                 Expected: GOAWAY Frame (Error Code: FRAME_SIZE_ERROR)
                           Connection closed
                   Actual: DATA Frame (length:1517, flags:0x01, stream_id:1)
      
        5. Streams and Multiplexing
          5.1. Stream States
            × 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)
                           Connection closed
                   Actual: RST_STREAM Frame (length:4, flags:0x00, stream_id:1)
            × 12: closed: Sends a HEADERS frame
              -> The endpoint MUST treat this as a connection error of type STREAM_CLOSED.
                 Expected: GOAWAY Frame (Error Code: STREAM_CLOSED)
                           Connection closed
                   Actual: RST_STREAM Frame (length:4, flags:0x00, stream_id:1)
      
            5.1.1. Stream Identifiers
              × 2: Sends stream identifier that is numerically smaller than previous
                -> The endpoint MUST respond with a connection error of type PROTOCOL_ERROR.
                   Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
                             Connection closed
                     Actual: DATA Frame (length:1517, flags:0x01, stream_id:5)
      
        6. Frame Definitions
          6.9. WINDOW_UPDATE
            6.9.2. Initial Flow-Control Window Size
              × 2: Sends a SETTINGS frame for window size to be negative
                -> The endpoint MUST track the negative flow-control window.
                   Expected: DATA Frame (length:1, flags:0x00, stream_id:1)
                     Actual: Timeout
      
        8. HTTP Message Exchanges
          8.1. HTTP Request/Response Exchange
            8.1.2. HTTP Header Fields
              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: HEADERS Frame (length:86, flags:0x05, stream_id:1)
      
      HPACK: Header Compression for HTTP/2
        5. Primitive Type Representations
          5.2. String Literal Representation
            × 1: Sends a Huffman-encoded string literal representation with padding longer than 7 bits
              -> The endpoint MUST treat this as a decoding error.
                 Expected: GOAWAY Frame (Error Code: COMPRESSION_ERROR)
                           Connection closed
                   Actual: DATA Frame (length:1517, flags:0x01, stream_id:1)
      
        6. Binary Format
          6.3. Dynamic Table Size Update
            × 1: Sends a dynamic table size update larger than the value of SETTINGS_HEADER_TABLE_SIZE
              -> The endpoint MUST treat this as a decoding error.
                 Expected: GOAWAY Frame (Error Code: COMPRESSION_ERROR)
                           Connection closed
                   Actual: DATA Frame (length:1517, flags:0x01, stream_id:1)
      

      As this testsuite checks HTTP2 implementation to be RFC compliant and we officially support HTTP2 in EAP7.1, we should fix those failing tests.

            sdouglas1@redhat.com Stuart Douglas
            sdouglas1@redhat.com Stuart Douglas
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated:
              Resolved: