Skip to content

Implement h2-14 #6

@mad-p

Description

@mad-p

Converted this issue's goal to h2-14 (Sep 5, 2014). Last update Sep 16, 2014.

MUST

  • HPACK-09
    • Static table change
    • Huffman code change
    • Switch static/header table index order
    • Remove reference set
    • Emit context update after SETTINGS_HEADER_TABLE_SIZE
  • Framer
    • 24-bit frame size
    • Default max frame size is 16384, not 16383
    • Setting identifier is now 16-bit
    • Remove PAD_HIGH, padding in CONTINUATION
    • Allow extension frames, extension settings
    • Check incoming frame format
  • Settings handling
    • Add SETTINGS_MAX_HEADER_LIST_SIZE
    • Add SETTINGS_MAX_FRAME_SIZE
      • Default max frame size is now 16384 (not 16383)
    • Separate settings for self and peer
    • Wait for SETTINGS ack
      • Suspend next outgoing frame until ack
  • Stream, Connection
    • Stream statemachine
      • PRIORITY after stream close allowed
      • Represent waiting CONTINUATION with either a flag or statemachine states
    • Headers splitting/continuation (DATA, HEADERS, PUSH_PROMISE)
    • Remove handling header fields with multiple values
    • Pseudo headers at the beginning
    • Remove END_SEGMENT
    • Separate counting of concurrent streams between self- and peer- initiated
    • Multiplex outgoing streams
    • Trailing HEADER handling
    • Allow incoming packet smaller than a frame
    • Count separately incoming/outgoing streams
    • Flow control
      • Separate flow control between incoming and outgoing traffic
      • Better frame sizing for stream- and connection- level window
      • Better frame sizing by combining flow control and max frame size handling
      • Emit WINDOW_UPDATE after processing received DATA (maybe app layer's job)
    • Error handling
      • correctly generate outgoing connection/stream error
      • correctly handle incoming connection/stream error
  • Client, Server

Nice to have

  • Starting HTTP/2
    • NPN
    • ALPN
    • Upgrade
  • Integration with HTTP/1.1
    • Drop-in replacement wrapper for HTTPClient
    • Drop-in replacement wrapper for NET::HTTP
    • Adapter for Rack (or Webrick)
  • Integration with ruby-eventmachine
  • Priority handling
    • Implement dependency tree
    • Implement weights
  • Proxy
    • CONNECT method
  • Rare cases
    • GOAWAY to prevent stream_id overflow
    • 2-phase GOAWAY (stream id 2^31-1)
    • content-length vs DATA length check (beware of HEAD response)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions