1. HTTP (Hypertext Transfer Protocol)

  1. HTTP Abstraction Stack
    1. Application
    2. Message Body
    3. Referenced specifications

HTTP Abstraction Stack

Application

StageHeaders
Transport

TCP or other reliable transport

Responsible for passing packets carrying HTTP requests to next node in HTTP path, for ensuring the reliable transport of this stream, and has no understanding of HTTP.

Protocol

HTTP stream processing one or more requests. May be one of several versions.

Not necessarily associated with a specific user-agent, and can typically pipeline multiple requests (including from different user-agents).

Message

Metadata that applies to the current message sent between nodes.

  • TCP connection
  • CONNECT method
  • Connection
  • Via
  • Expect
  • Max-Forwards
Data

Information that intermediate nodes may modify without significantly changing the semantics of the request. Details vary significantly between HTTP versions.

  • Transfer-Encoding / TE
  • Trailer
  • Content-Length
Request

Metadata that applies to this request made to the origin server, processed by the origin server. Information at this layer can be passed through all different HTTP versions without loss of semantics.

  • status code / method
  • Server / From, User-Agent, Referer
  • Host
  • request-URI
  • Date
  • Retry-After
  • Range
Resource

Information that's about the resource as it exists on the server, and so won't change between requests (unless it changes on the server).

  • Allow
  • ETag
  • Last-Modified
  • Content-Location

Message Body

StageHeaders
Message

Connection information specific to sending the message body over a particular version of HTTP or just between hops.

Data here may be encoded by a Transfer-Encoding

  • Transfer-Encoding / TE
  • Trailer
  • Content-Length
Transfer

Connection information specific to the origin server.

  • Content-Encoding
Representation

The message body after all network and origin server encodings have been decoded.

  • Range / Accept-Range
Resource

Metadata that applies to the resource as it exists on the server, and does not change with e.g. Range requests, or any sort of compression.

  • ETag
  • Last-Modified
  • Content-Location
  • Content-Language
  • Content-Type

Referenced specifications