- 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
- 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_error.pl -- Decorate uncaught HTTP exceptions with stack-trace
- hub.pl -- Manage a hub for websockets
- websocket.pl -- WebSocket support
- http_log.pl -- HTTP Logging module
- http
- http_chunked_open(+RawStream, -DataStream, +Options) is det
- Create a stream to realise HTTP chunked encoding or decoding.
The technique is similar to
library(zlib)
, using a Prolog stream as a filter on another stream. Options:- close_parent(+Bool)
- If
true
(defaultfalse
), the parent stream is closed if DataStream is closed. - max_chunk_size(+PosInt)
- Define the maximum size of a chunk. Default is the
default buffer size of fully buffered streams (4096).
Larger values may improve throughput. It is also
allowed to use
set_stream(DataStream, buffer(line))
on the data stream to get line-buffered output. See set_stream/2 for details. Switching buffering tofalse
is supported.
Here is example code to write a chunked data to a stream
http_chunked_open(Out, S, []), format(S, 'Hello world~n', []), close(S).
If a stream is known to contain chunked data, we can extract this data using
http_chunked_open(In, S, []), read_stream_to_codes(S, Codes), close(S).
The current implementation does not generate chunked extensions or an HTTP trailer. If such extensions appear on the input they are silently ignored. This is compatible with the HTTP 1.1 specifications. Although a filtering stream is an excellent mechanism for encoding and decoding the core chunked protocol, it does not well support out-of-band data.
After http_chunked_open/3, the encoding of DataStream is the same as the encoding of RawStream, while the encoding of RawStream is
octet
, the only value allowed for HTTP chunked streams. Closing the DataStream restores the old encoding on RawStream.- Errors
- -
io_error(read, Stream)
where the message context provides an indication of the problem. This error is raised if the input is not valid HTTP chunked data.