Skip to main content

HTTP

Application layer protocol defines:

  • Types of messages exchanged.
  • Syntax of various message types(fields definition).
  • Semantics of fields.
  • Rules for when/how to send/respond to messages.

Protocol

Hypertext Transfer Protocol (RFC 2068):

  • HTTP -> Socket Interface -> TCP.
  • Stateless protocol.
  • HTTP/1.0 默认不开启长连接: 客户端与服务端必须同时发送 Connection: Keep-Alive.
  • HTTP/1.1 默认开启长连接:
    • Keep-Alive: timeout=5, max=100: 表示 TCP 通道保持 5 秒, 最多接收 100 次请求.
    • Keep-Alive 无法保证客户端和服务器之间的连接一定活跃.
  • HTTP 为无状态协议: 每个请求相互独立.

Connections

  • Non-persistent connections: 1 http request with 1 tcp connection.
  • Persistent connections: multiple http request with 1 tcp connection.

Message Format

HTTP request format:

request line -> (method field, object url field, protocol version)
header lines -> Host/Connections(close -> non-persistent connection)/User-agent/Accept-language
\r\n
entity body

HTTP response format:

status line -> (protocol version, status code, corresponding status message)
header lines -> Connections/Date/Server/Last-Modified/Content-Length(bytes)/Content-Type
\r\n
entity body

Process

Port to Transport Layer

  • Bandwidth-sensitive application: UDP.
  • Reliable-sensitive application: TCP.
ApplicationApplication LayerTransport Layer
EmailSMTPTCP
Remote terminal accessTelnetTCP
WebHTTP/HTTPSTCP
File transferFTPTCP
Streaming multimediaHTTP/HTTPS/RTPTCP/UDP
Internet telephonySIP/RTPUDP

Address

  • IP (32 bits network layer): find specific host/end-system.
  • Port (16 bits transport layer): find specific process.

Status Codes

RFC 2616 defines the following status codes:

  • Informational responses: 100–199.
  • Successful responses: 200–299.
    • 200 OK.
    • 201 Created.
    • 202 Accepted.
  • Redirects: 300–399.
    • 301 Moved Permanently.
    • 302 Found.
    • 304 Not Modified.
    • 307 Temporary Redirect.
    • 308 Permanent Redirect.
  • Client errors: 400–499.
    • 400 Bad Request.
    • 401 Unauthorized.
    • 403 Forbidden.
    • 404 Not Found.
    • 405 Method Not Allowed.
    • 406 Not Acceptable.
  • Server errors: 500–599.
    • 500 Internal Server Error.
    • 501 Not Implemented.
    • 502 Bad Gateway.
    • 503 Service Unavailable.
    • 504 Gateway Timeout.

HTTP Redirect

Use reasonable HTTP status codes:

  • 200: general success.
  • 201: successful creation.
  • 301: moved permanently (SEO friendly).
  • 302: moved temporarily.
  • 304: not modified (HTTP cache).
  • 400: bad requests from client.
  • 401: unauthorized requests.
  • 403: missing permissions.
  • 404: missing resources.
  • 429: too many requests.
  • 5xx: internal errors (these should be avoided at all costs).

Performance

限制 Web 性能的主要因素是客户端与服务器之间的网络往返延迟 (RTT):

  • 持久化连接以支持连接重用: N 次 HTTP 请求节省的总延迟时间为 (N-1) * RTT.
  • 分块传输编码以支持流式响应.
  • 请求管道以支持并行请求处理 (局限性较大):
    • FIFO 管道, 队头请求会阻塞后续请求.
    • 应用必须处理中断的连接并恢复.
    • 应用必须处理中断请求的幂等问题.
    • 应用必须保护自身不受出问题的代理的影响.
  • 模拟多路复用: 并行使用多个 TCP 连接 (大多数现代浏览器支持每个主机打开 6 个连接).
  • 利用多个 TCP 连接进行域名分区.
  • Resources bundling and inlining (但一定程度上放弃缓存粒度).
  • 改进的更好的缓存机制.