diff --git a/tiny_httpd/Tiny_httpd/index.html b/tiny_httpd/Tiny_httpd/index.html index 9bf671c3..0a54f55d 100644 --- a/tiny_httpd/Tiny_httpd/index.html +++ b/tiny_httpd/Tiny_httpd/index.html @@ -52,10 +52,11 @@ echo: path="/echo"; body="howdy y'all"}

Tiny buffer implementation

These buffers are used to avoid allocating too many byte arrays when processing streams and parsing requests.

module Buf = Tiny_httpd_core.Buf

IO Abstraction

module IO = Tiny_httpd_core.IO

Logging

module Log = Tiny_httpd_core.Log

Utils

module Util = Tiny_httpd_core.Util

Resource pool

module Pool = Tiny_httpd_core.Pool

Static directory serving

module Dir = Tiny_httpd_unix.Dir
module type VFS = Tiny_httpd_unix.Dir.VFS

HTML combinators

module Html = Tiny_httpd_html

Main server types

module Request = Tiny_httpd_core.Request
module Response = Tiny_httpd_core.Response
module Response_code = Tiny_httpd_core.Response_code
module Route = Tiny_httpd_core.Route
module Headers = Tiny_httpd_core.Headers
module Meth = Tiny_httpd_core.Meth
module Server = Tiny_httpd_core.Server
exception Bad_req of int * string

Exception raised to exit request handlers with a code+error message

Middlewares

A middleware can be inserted in a handler to modify or observe its behavior.

module Middleware = Server.Middleware
module Head_middleware = Server.Head_middleware

A middleware that only considers the request's head+headers.

Main Server type

A HTTP server. See create for more details.

module type IO_BACKEND = Server.IO_BACKEND

A backend that provides IO operations, network operations, etc.

val create_from : ?enable_logging:bool -> ?buf_size:int -> + ?head_middlewares:Head_middleware.t list -> ?middlewares:([ `Encoding | `Stage of int ] * Middleware.t) list -> backend:(module IO_BACKEND) -> unit -> - t

Create a new webserver using provided backend.

The server will not do anything until run is called on it. Before starting the server, one can use add_path_handler and set_top_handler to specify how to handle incoming requests.

  • parameter buf_size

    size for buffers (since 0.11)

  • parameter enable_logging

    if true and Logs is installed, emit logs via Logs (since NEXT_RELEASE). Default true.

  • since 0.14
val addr : t -> string

Address on which the server listens.

val is_ipv6 : t -> bool

is_ipv6 server returns true iff the address of the server is an IPv6 address.

  • since 0.3
val port : t -> int

Port on which the server listens. Note that this might be different than the port initially given if the port was 0 (meaning that the OS picks a port for us).

val active_connections : t -> int

Number of currently active connections.

val add_decode_request_cb : + t

Create a new webserver using provided backend.

The server will not do anything until run is called on it. Before starting the server, one can use add_path_handler and set_top_handler to specify how to handle incoming requests.

  • parameter buf_size

    size for buffers (since 0.11)

  • parameter enable_logging

    if true and Logs is installed, emit logs via Logs (since NEXT_RELEASE). Default true.

  • since 0.14
val addr : t -> string

Address on which the server listens.

val is_ipv6 : t -> bool

is_ipv6 server returns true iff the address of the server is an IPv6 address.

  • since 0.3
val port : t -> int

Port on which the server listens. Note that this might be different than the port initially given if the port was 0 (meaning that the OS picks a port for us).

val active_connections : t -> int

Number of currently active connections.

val add_decode_request_cb : t -> (unit Tiny_httpd_core.Request.t -> (unit Tiny_httpd_core.Request.t @@ -71,7 +72,7 @@ echo: stage:[ `Encoding | `Stage of int ] -> t -> Middleware.t -> - unit

Add a middleware to every request/response pair.

  • parameter stage

    specify when middleware applies. Encoding comes first (outermost layer), then stages in increasing order.

  • raises Invalid_argument

    if stage is `Stage n where n < 1

  • since 0.11
Request handlers
val set_top_handler : + unit

Add a middleware to every request/response pair.

  • parameter stage

    specify when middleware applies. Encoding comes first (outermost layer), then stages in increasing order.

  • raises Invalid_argument

    if stage is `Stage n where n < 1

  • since 0.11
val add_head_middleware : t -> Head_middleware.t -> unit

Add a request-header only Head_middleware.t. This is called on requests, to modify them, and returns a new request immediately.

  • since NEXT_RELEASE
Request handlers
val set_top_handler : t -> (Tiny_httpd_core.IO.Input.t Tiny_httpd_core.Request.t -> Tiny_httpd_core.Response.t) -> @@ -125,6 +126,7 @@ echo: ?addr:string -> ?port:int -> ?sock:Unix.file_descr -> + ?head_middlewares:Head_middleware.t list -> ?middlewares:([ `Encoding | `Stage of int ] * Middleware.t) list -> unit -> t

Create a new webserver using UNIX abstractions.

The server will not do anything until run is called on it. Before starting the server, one can use add_path_handler and set_top_handler to specify how to handle incoming requests.

  • parameter masksigpipe

    if true, block the signal Sys.sigpipe which otherwise tends to kill client threads when they try to write on broken sockets. Default: true except when on Windows, which defaults to false.

  • parameter buf_size

    size for buffers (since 0.11)

  • parameter new_thread

    a function used to spawn a new thread to handle a new client connection. By default it is Thread.create but one could use a thread pool instead. See for example this use of moonpool.

  • parameter max_connections

    maximum number of simultaneous connections.

  • parameter timeout

    connection is closed if the socket does not do read or write for the amount of second. Default: 0.0 which means no timeout. timeout is not recommended when using proxy.

  • parameter addr

    address (IPv4 or IPv6) to listen on. Default "127.0.0.1".

  • parameter port

    to listen on. Default 8080.

  • parameter sock

    an existing socket given to the server to listen on, e.g. by systemd on Linux (or launchd on macOS). If passed in, this socket will be used instead of the addr and port. If not passed in, those will be used. This parameter exists since 0.10.

  • parameter enable_logging

    if true and Logs is installed, log requests. Default true. This parameter exists since NEXT_RELEASE. Does not affect debug-level logs.

  • parameter get_time_s

    obtain the current timestamp in seconds. This parameter exists since 0.11.

diff --git a/tiny_httpd/Tiny_httpd_core/Server/index.html b/tiny_httpd/Tiny_httpd_core/Server/index.html index b78f7a4a..84381aea 100644 --- a/tiny_httpd/Tiny_httpd_core/Server/index.html +++ b/tiny_httpd/Tiny_httpd_core/Server/index.html @@ -2,10 +2,11 @@ Server (tiny_httpd.Tiny_httpd_core.Server)

Module Tiny_httpd_core.Server

HTTP server.

This module implements a very simple, basic HTTP/1.1 server using blocking IOs and threads.

It is possible to use a thread pool, see create's argument new_thread.

exception Bad_req of int * string

Exception raised to exit request handlers with a code+error message

Middlewares

A middleware can be inserted in a handler to modify or observe its behavior.

module Middleware : sig ... end
module Head_middleware : sig ... end

A middleware that only considers the request's head+headers.

Main Server type

type t

A HTTP server. See create for more details.

module type IO_BACKEND = sig ... end

A backend that provides IO operations, network operations, etc.

val create_from : ?enable_logging:bool -> ?buf_size:int -> + ?head_middlewares:Head_middleware.t list -> ?middlewares:([ `Encoding | `Stage of int ] * Middleware.t) list -> backend:(module IO_BACKEND) -> unit -> - t

Create a new webserver using provided backend.

The server will not do anything until run is called on it. Before starting the server, one can use add_path_handler and set_top_handler to specify how to handle incoming requests.

  • parameter buf_size

    size for buffers (since 0.11)

  • parameter enable_logging

    if true and Logs is installed, emit logs via Logs (since NEXT_RELEASE). Default true.

  • since 0.14
val addr : t -> string

Address on which the server listens.

val is_ipv6 : t -> bool

is_ipv6 server returns true iff the address of the server is an IPv6 address.

  • since 0.3
val port : t -> int

Port on which the server listens. Note that this might be different than the port initially given if the port was 0 (meaning that the OS picks a port for us).

val active_connections : t -> int

Number of currently active connections.

val add_decode_request_cb : + t

Create a new webserver using provided backend.

The server will not do anything until run is called on it. Before starting the server, one can use add_path_handler and set_top_handler to specify how to handle incoming requests.

  • parameter buf_size

    size for buffers (since 0.11)

  • parameter enable_logging

    if true and Logs is installed, emit logs via Logs (since NEXT_RELEASE). Default true.

  • since 0.14
val addr : t -> string

Address on which the server listens.

val is_ipv6 : t -> bool

is_ipv6 server returns true iff the address of the server is an IPv6 address.

  • since 0.3
val port : t -> int

Port on which the server listens. Note that this might be different than the port initially given if the port was 0 (meaning that the OS picks a port for us).

val active_connections : t -> int

Number of currently active connections.

val add_decode_request_cb : t -> (unit Request.t -> (unit Request.t * (IO.Input.t -> IO.Input.t)) option) -> unit

Add a callback for every request. The callback can provide a stream transformer and a new request (with modified headers, typically). A possible use is to handle decompression by looking for a Transfer-Encoding header and returning a stream transformer that decompresses on the fly.

val add_encode_response_cb : @@ -15,7 +16,7 @@ stage:[ `Encoding | `Stage of int ] -> t -> Middleware.t -> - unit

Add a middleware to every request/response pair.

  • parameter stage

    specify when middleware applies. Encoding comes first (outermost layer), then stages in increasing order.

  • raises Invalid_argument

    if stage is `Stage n where n < 1

  • since 0.11

Request handlers

val set_top_handler : t -> (IO.Input.t Request.t -> Response.t) -> unit

Setup a handler called by default.

This handler is called with any request not accepted by any handler installed via add_path_handler. If no top handler is installed, unhandled paths will return a 404 not found

This used to take a string Request.t but it now takes a byte_stream Request.t since 0.14 . Use Request.read_body_full to read the body into a string if needed.

val add_route_handler : + unit

Add a middleware to every request/response pair.

  • parameter stage

    specify when middleware applies. Encoding comes first (outermost layer), then stages in increasing order.

  • raises Invalid_argument

    if stage is `Stage n where n < 1

  • since 0.11
val add_head_middleware : t -> Head_middleware.t -> unit

Add a request-header only Head_middleware.t. This is called on requests, to modify them, and returns a new request immediately.

  • since NEXT_RELEASE

Request handlers

val set_top_handler : t -> (IO.Input.t Request.t -> Response.t) -> unit

Setup a handler called by default.

This handler is called with any request not accepted by any handler installed via add_path_handler. If no top handler is installed, unhandled paths will return a 404 not found

This used to take a string Request.t but it now takes a byte_stream Request.t since 0.14 . Use Request.read_body_full to read the body into a string if needed.

val add_route_handler : ?accept:(unit Request.t -> (unit, Response_code.t * string) result) -> ?middlewares:Middleware.t list -> ?meth:Meth.t ->