An OCaml library for HTTP clients and servers using Lwt or Async
CHANGES:
CHANGES:
CHANGES:
Cohttp_async.Server.Expert.create
and
Cohttp_async.Server.Expert.create_with_response_action
that can be used to
create a server without going through Conduit. This allows creating an
async TCP server using the Tcp module from Async_unix
and lets the user
have more control over how the Reader.t
and Writer.t
are created.to_lines
and to_frames
implementation (mseri #847)set-cookies
(mseri #858)\r\n
endings.
Previously, the \r
was optional. (rgrinberg, #921)cohttp-lwt-jsoo
: do not instantiate XMLHttpRequest
object on boot (mefyl #922)CHANGES:
Cohttp.Header: new implementation (lyrm #747)
get
, see below), and some new functions (clean_dup
, get_multi_concat
)The new header implementation uses an associative list instead of a map to represent headers and is focused on predictability and intuitivity: except for some specific and documented functions, the headers are always kept in transmission order, which makes debugging easier and is also important for RFC7230§3.2.2 that states that multiple values of a header must be kept in order.
Also, to get an intuitive function behaviour, no extra work to enforce RFCs is done by the basic functions. For example, RFC7230§3.2.2 requires that a sender does not send multiple values for a non list-value header. This particular rule could require the Header.add
function to remove previous values of non-list-value headers, which means some changes of the headers would be out of control of the user. With the current implementation, an user has to actively call dedicated functions to enforce such RFCs (here Header.clean_dup
).
Two functions have a semantic change : get
and update
.
get
was previously doing more than just returns the value associated to a key; it was also checking if the searched header could have multiple values: if not, the last value associated to the header was returned; otherwise, all the associated values were concatenated and returned. This semantics does not match the global idea behind the new header implementation, and would also be very inefficient.
get
function only returns the last value associated to the searched header.get_multi_concat
function has been added to get a result similar to the previous get
function.update
is a pretty new function (#703) and changes are minor and related to get
semantic changes.
update h k f
is now modifying only the last occurrences of the header k
instead of all its occurrences.update_all
function has been added and work on all the occurrences of the updated header.clean_dup
enables the user to clean headers that follows the {{:https://tools.ietf.org/html/rfc7230#section-3.2.2} RFC7230§3.2.2} (no duplicate, except set-cookie
)get_multi_concat
has been added to get a result similar to the previous get
function.Cohttp.Header: performance improvement (mseri, anuragsoni #778) Breaking the headers are no-longer lowercased when parsed, the headers key comparison is case insensitive instead.
cohttp-lwt-unix: Adopt ocaml-conduit 5.0.0 (smorimoto #787)
Breaking Conduit_lwt_unix.connect
's ctx
param type chaged from ctx
to ctx Lazy.t
cohttp-mirage: fix deprecated fmt usage (tmcgilchrist #783)
lwt_jsoo: Use logs for the warnings and document it (mseri #776)
lwt: Use logs to warn users about leaked bodies and document it (mseri #771)
lwt, lwt_unix: Improve use of logs and the documentation, fix bug in the Debug.enable_debug function (mseri #772)
lwt_jsoo: Fix exception on connection errors in chrome (mefyl #761)
lwt_jsoo: Fix Lwt.wakeup_exn
Invalid_arg
exception when a js
stack overflow happens in the XHR completion handler (mefyl #762).
lwt_jsoo: Add test suite (mefyl #764).
CHANGES:
CHANGES:
CHANGES:
Cohttp_async.resolve_local_file
, Cohttp_lwt.resolve_local_file
and Cohttp_lwt_unix.resolve_file
are now the same code under the hood (Cohttp.Path.resolve_local_file
). The old names
have been preserved for compatibility, but will be marked as deprecated in the next release. This
changes the behavior of Cohttp_lwt_unix.resolve_file
: it now percent-decodes the paths and blocks
escaping from the docroot correctly. This also fixes and tests the corner cases in these methods
when the docroot is empty. (@ewanmellor #755)CHANGES:
CHANGES:
CHANGES: