Skip to content
Ayumi edited this page Jan 19, 2021 · 1 revision

# HTTP and TCP

This page keeps notes about best current practice for using HTTP/1 and HTTP/2 over TCP.

## TCP Fast Open

[RFC](https://tools.ietf.org/html/rfc7413)

Allows data to be sent on handshake. Requires client + server support, and application knowledge (GET/HEAD/OPTIONS only) or TLS Client Hello.

Implemented in Linux, [experimental in iOS/OSX](https://developer.apple.com/videos/wwdc/2015/?id=719). Chrome has support on Linux platforms (including Android).

## Initial Congestion Window

[IW10](http://tools.ietf.org/html/rfc6928) is now (fairly) widely deployed n server side. Some have experimented with IW32 + packet pacing.

## Explicit Congestion Control

Apple [deploying in iOS and OSX](https://developer.apple.com/videos/wwdc/2015/?id=719).

## Tail Loss Probes

[draft](http://tools.ietf.org/html/draft-dukkipati-tcpm-tcp-loss-probe-01)

## Slow Start after Idle

net.ipv4.tcp_slow_start_after_idle = 0

## Nagle's Algorithm

Most implementations disable

## Half-close

Client or server is free to half-close after a request or response has been completed; or when there is no pending stream in HTTP/2.

## Abort

No client abort for HTTP/1.1 after the request body has been sent. Delayed full close is expected following an error response to avoid RST on the client.

## Keep-alive

TCP keep-alive likely disabled. App-level keep-alive is required for long-lived requests to detect failed peers.

## Full-duplex read/write

Requests are expected to complete first. [Clarification](https://tools.ietf.org/html/draft-zhu-http-fullduplex)

Clone this wiki locally