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.
- 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.
- send_error(+Out, +Request, +State0, +Error, -Close)[private]
- Send status replies and reply files. The
current_outputno longer points to the CGI stream, but simply to the socket that connects us to the client.
- 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
- 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 for details.
- redirect(+Header, -Action, -RestHeader) is semidet[private]
- Detect the CGI
Statusheaders for formulating a HTTP redirect. Redirection is only established if no
Statusis provided, or
- 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.
- expand_request(+Request0, -Request)[private]
- Allow for general rewrites of a request by calling request_expansion/2.
- 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
- 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.