LoginSignup
0
0

More than 5 years have passed since last update.

[HTTP] note of Text-based / Binary protocol

Last updated at Posted at 2017-10-21
HTTP/1.x HTTP/2
format textual binary
oriented text strings data structures
ex. 15 ASCII for char '1': 00110001
ASCII for char '5': 00110101
00001111

The Pros and Cons of Binary Protocols

ASCII protocols are easy to inspect and get started with. However, they are not very efficient and are typically harder to implement correctly: optional whitespace, varying termination sequences, and other quirks make it hard to distinguish the protocol from the payload and lead to parsing and security errors. By contrast, while binary protocols may take more effort to get started with, they tend to lead to more performant, robust, and provably correct implementations.
HTTP/2 uses binary framing. As a result, you will need a tool that understands it to inspect and debug the protocol—e.g., Wireshark or equivalent. In practice, this is less of an issue than it seems, since you would have to use the same tools to inspect the encrypted TLS flows—which also rely on binary framing (see TLS Record Protocol)—carrying HTTP/1.x and HTTP/2 data.

Binary Framing

HTTP/2 binary framing layer

Figure 12-1. HTTP/2 binary framing layer

The "layer" refers to a design choice to introduce a new optimized encoding mechanism between the socket interface and the higher HTTP API exposed to our applications: the HTTP semantics, such as verbs, methods, and headers, are unaffected, but the way they are encoded while in transit is what’s different. Unlike the newline delimited plaintext HTTP/1.x protocol, all HTTP/2 communication is split into smaller messages and frames, each of which is encoded in binary format.

Common 9-byte frame header

Figure 12-7. Common 9-byte frame header

  • The 24-bit length field allows a single frame to carry up to bytes of data.
  • The 8-bit type field determines the format and semantics of the frame.
  • The 8-bit flags field communicates frame-type specific boolean flags.
  • The 1-bit reserved field is always set to 0.
  • The 31-bit stream identifier uniquely identifies the HTTP/2 stream.

Technically, the length field allows payloads of up to 2**24 bytes (~16MB) per frame. However, the HTTP/2 standard sets the default maximum payload size of DATA frames to 2**14 bytes (~16KB) per frame and allows the client and server to negotiate the higher value. Bigger is not always better: smaller frame size enables efficient multiplexing and minimizes head-of-line blocking.

ref.

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0