- library
- http
- http_unix_daemon.pl -- Run SWI-Prolog HTTP server as a Unix system daemon
- thread_httpd.pl -- Threaded HTTP server
- http_wrapper.pl -- Server processing of an HTTP request
- http_header.pl -- Handling HTTP headers
- html_write.pl -- Write HTML text
- html_quasiquotations.pl -- HTML quasi quotations
- http_dispatch.pl -- Dispatch requests in the HTTP server
- mimetype.pl -- Determine mime-type for a file
- http_path.pl -- Abstract specification of HTTP server locations
- http_host.pl -- Obtain public server location
- http_exception.pl -- Map Prolog exceptions to HTTP errors
- mimepack.pl -- Create a MIME message
- http_stream.pl -- HTTP Streams
- http_chunked_open/3
- stream_range_open/3
- multipart_open/3
- multipart_open_next/1
- cgi_open/4
- cgi_property/2
- cgi_set/2
- cgi_discard/1
- is_cgi_stream/1
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- encoding_filter/3
- http_ssl_plugin.pl -- SSL plugin for HTTP libraries
- http_parameters.pl -- Extract parameters (GET and POST) from HTTP requests
- http_client.pl -- HTTP client library
- http_open.pl -- HTTP client library
- http_multipart_plugin.pl -- Multipart form-data plugin
- http_hook.pl -- HTTP library hooks
- html_head.pl -- Automatic inclusion of CSS and scripts links
- term_html.pl -- Represent Prolog terms as HTML
- jquery.pl -- Provide JQuery
- http_server_files.pl -- Serve files needed by modules from the server
- json.pl -- Reading and writing JSON serialization
- http_session.pl -- HTTP Session management
- http_openid.pl -- OpenID consumer and server library
- yadis.pl -- Yadis discovery
- ax.pl -- Attribute Exchange library
- http_authenticate.pl -- Authenticate HTTP connections using 401 headers
- http_json.pl -- HTTP JSON Plugin module
- http_dirindex.pl -- HTTP directory listings
- js_write.pl -- Utilities for including JavaScript
- js_grammar.pl -- JavaScript grammar
- http_cors.pl -- Enable CORS: Cross-Origin Resource Sharing
- json_convert.pl -- Convert between JSON terms and Prolog application terms
- http
- cgi_open(+OutStream, -CGIStream, :Hook, +Options) is det
- Process CGI output. OutStream is normally the socket returning
data to the HTTP client. CGIStream is the stream the (Prolog)
code writes to. The CGIStream provides the following functions:
- At the end of the header, it calls Hook using
call(Hook, header, Stream)
, where Stream is a stream holding the buffered header. - If the stream is closed, it calls Hook using
call(Hook, data, Stream)
, where Stream holds the buffered data.
The stream calls Hook, adding the event and CGIStream to the closure. Defined events are:
- header
- Called if the header is complete. Typically it uses cgi_property/2 to extract the collected header and combines these with the request and policies to decide on encoding, transfer-encoding, connection parameters and the complete header (as a Prolog term). Typically it uses cgi_set/2 to associate these with the stream.
- send_header
- Called if the HTTP header must be sent. This is immediately
after setting the transfer encoding to
chunked
or when the CGI stream is closed. Typically it requests the current header, optionally the content-length and sends the header to the original (client) stream. - close
- Called from close/1 on the CGI stream after everything is complete.
The predicates cgi_property/2 and cgi_set/2 can be used to control the stream and store status info. Terms are stored as Prolog records and can thus be transferred between threads.
- At the end of the header, it calls Hook using