This library provides the core of the implementation of the HTTP
protocol at the server side and is mainly intended for internal use.
It is used by
Still, it provides a few predicates that are occasinally useful for applications:
- http_current_request/1 finds the current request for occasional usage in places where it is not avaialable otherwise.
- http_peer/2 finds the (IP4) peer address, getting the original
address if we are behind a proxy (
- http_relative_path/2 can be used to find a relative path from the current request.
- http_wrapper(:Goal, +In, +Out, -Close, +Options) is det
- Simple wrapper to read and decode an HTTP header from `In', call
:Goal while watching for exceptions and send the result to the
The goal is assumed to write the reply to
current_outputpreceeded by an HTTP header, closed by a blank line. The header must contain a Content-type: <type> line. It may optionally contain a line
Transfer-encoding: chunkedto request chunked encoding.
- Return the full request to the caller
- IP address of client
- http_wrap_spawned(:Goal, -Request, -Close) is det
- Internal use only. Helper for wrapping the handler for http_spawn/2.
- Internal use only. Indicate that the request is handed to thread ThreadId.
- This API provides an alternative for writing the header field as a CGI header. Header has the format Name(Value), as produced by http_read_header/2.
- http_current_request(-Request) is semidet
- Returns the HTTP request currently being processed. Fails silently if there is no current request. This typically happens if a goal is run outside the HTTP server context.
- http_peer(+Request, -PeerIP:atom) is semidet
- True when PeerIP is the IP address of the connection peer. If the
connection is established via a proxy or CDN we try to find the
initiating peer. Currently supports:
- Direct connections
- http_relative_path(+AbsPath, -RelPath) is det
- Convert an absolute path (without host, fragment or search) into a path relative to the current page. This call is intended to create reusable components returning relative paths for easier support of reverse proxies.