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
- 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
preceeded 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: chunked to request chunked
- Return the full request to the caller
- IP address of client
|Close||- Unified to one of |
- http_wrap_spawned(:Goal, -Request, -Close) is det
- Internal use only. Helper for wrapping the handler for
- See also
- - http_spawned/1, http_spawn/2.
- Internal use only. Indicate that the request is handed to thread
- cgi_close(+CGI, +Request, +State0, +Error, -Close) is det[private]
- The wrapper has completed. Finish the CGI output. We have three
- The wrapper delegated the request to a new thread
- The wrapper succeeded
- The wrapper threw an error, non-200 status reply
moved) or a request to reply with
the content of a file.
- - socket I/O errors.
- send_error(+Out, +Request, +State0, +Error, -Close)[private]
- Send status replies and reply files. The
longer points to the CGI stream, but simply to the socket that
connects us to the client.
|State0||- is start-status as returned by status/1. Used to
find CPU usage, etc.|
- http_done(+Code, +Status, +BytesSent, +State0) is det[private]
- Provide feedback for logging and debugging on how the request
has been completed.
- handler_with_output_to(:Goal, +Id, +Request, +Output, -Status) is det[private]
- Run Goal with output redirected to Output. Unifies Status with
ok, the error from catch/3 or a term
|Request||- The HTTP request read or '-' for a continuation
- thread_cputime(-CPU) is det[private]
- CPU is the CPU time used by the calling thread.
- cgi_hook(+Event, +CGI) is det[private]
- Hook called from the CGI processing stream. See http_stream.pl
- redirect(+Header, -Action, -RestHeader) is semidet[private]
- Detect the CGI
Location and optional
Status headers for
formulating a HTTP redirect. Redirection is only established if
Status is provided, or
Status is 3XX.
- This API provides an alternative for writing the header field as
a CGI header. Header has the format Name(Value), as produced by
- - Use CGI lines instead
- expand_request(+Request0, -Request)[private]
- Allow for general rewrites of a request by calling
- extend_request(+Options, +RequestIn, -Request)[private]
- Merge options in the request.
- 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
- - The
X-forwarded-for header is problematic. According to
original client is the first, while according to
it is the last.
- 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.
- debug_request(+Code, +Status, +Id, +CPU0, Bytes)[private]
- Emit debugging info after a request completed with Status.