Minimal HTTP server using good old threads
Module Tiny_httpd . Request
type 'body t = {
meth : Meth.t;
host : string;
headers : Headers.t;
path : string;
path_components : string list;
query : (string * string) list;
body : 'body;

A request with method, path, host, headers, and a body, sent by a client.

The body is polymorphic because the request goes through several transformations. First it has no body, as only the request and headers are read; then it has a stream body; then the body might be entirely read as a string via read_body_full.

The field query was added

  • since 0.6 and contains

the query parameters in "?foo=bar,x=y" The field path_components is the part of the path that precedes query and is split on "/" and was added

  • since 0.6
val pp : Format.formatter -> string t -> unit

Pretty print the request and its body

val pp_ : Format.formatter -> _ t -> unit

Pretty print the request without its body

val headers : _ t -> Headers.t

List of headers of the request, including "Host"

val get_header : ?f:( string -> string ) -> _ t -> string -> string option
val get_header_int : _ t -> string -> int option
val set_header : 'a t -> string -> string -> 'a t
val host : _ t -> string

Host field of the request. It also appears in the headers.

val meth : _ t -> Meth.t

Method for the request.

val path : _ t -> string

Request path.

val query : _ t -> (string * string) list

Decode the query part of the path field

  • since 0.4
val body : 'b t -> 'b

Request body, possibly empty.

val limit_body_size : max_size:int -> byte_stream t -> byte_stream t

Limit the body size to max_size bytes, or return a 413 error.

  • since 0.3
val read_body_full : byte_stream t -> string t

Read the whole body into a string. Potentially blocking.