mirror of
https://github.com/c-cube/tiny_httpd.git
synced 2025-12-06 03:05:29 -05:00
204 lines
6.8 KiB
Markdown
204 lines
6.8 KiB
Markdown
|
|
## 0.19
|
|
|
|
- feat(headers): `set` will not reallocate whole list if not needed
|
|
- feat(headers): use case insensitive comparison
|
|
- fix(response): do not override "content-length" in raw response
|
|
- feat pool: expose `acquire/release` for advanced uses
|
|
|
|
## 0.18
|
|
|
|
- feat: add ?head_middlewares to `create`
|
|
- add content-type header for prometheus endpoint
|
|
- new flag ?enable_logging to disable regular logs (not debug)
|
|
- new sublibrary to deal with multipart-form-data
|
|
- feat response: add `pp_with`; have `pp` hide set-cookie headers
|
|
|
|
- fix percent encoding for < 0x10 chars
|
|
- Processing to fix incompatible -O and gcc flags
|
|
- fix: make check for 'Connection: Upgrade' header case-insensitive
|
|
|
|
## 0.17
|
|
|
|
- add optional middlewares to tiny_httpd_ws
|
|
- add `Head_middleware.trivial`
|
|
- add `Head_middleware.t`; accept it for SSE/websocket
|
|
- add `Request.pp_with` which is a customizable printer
|
|
- expose `Response.Bad_req`
|
|
- use `iostream` for IOs
|
|
- add a `hmap`-typed field to requests, to carry request specific data
|
|
across middlewares
|
|
- http_of_dir: ability to setup socket timeout
|
|
- add `tiny_httpd.ws`, a websocket library
|
|
- add `Response_code.is_success`
|
|
|
|
- fix: No setting of sigprocmask on Windows
|
|
- fix: give the correct code+error if protocol upgrade fails
|
|
- remove potentially security-leaking debug line
|
|
- fix: avoid collisions in `Mime_` private module
|
|
- fix middlewares: merge-sort per-request middleares and global ones
|
|
- fix tiny_httpd dir: handle html files
|
|
|
|
- perf: optim in read_line
|
|
- perf: remove some uses of scanf in parsing
|
|
|
|
- require iostream-camlzip >= 0.2.1
|
|
- add optional dependency on `logs`
|
|
- logs is a testdep for tiny_httpd_camlzip
|
|
|
|
## 0.16
|
|
|
|
- feat: add `Request.client_addr` accessor
|
|
- feat: add `tiny_httpd.prometheus`, a simple sub-library
|
|
to expose [prometheus](https://prometheus.io) metrics over HTTP.
|
|
- feat: add optional dependency on `logs`
|
|
|
|
## 0.15
|
|
|
|
- fix: do not block in `accept`, enabling more graceful shutdown
|
|
- improve help message for tiny-httpd-vfs-pack
|
|
- security: zero out buffers from pool before reusing them
|
|
|
|
## 0.14
|
|
|
|
- breaking: `set_top_handler` takes a stream request, for more generality
|
|
|
|
- Don't let client handling threads handle SIGINT/SIGHUP
|
|
- improve termination behavior (wait for threads to terminate when shutting down server)
|
|
- Preserve client address down to Request.t
|
|
- add `Tiny_httpd_io` module, abstraction over IOs (output/input) as better IO channels
|
|
than the stdlib's
|
|
- add `Tiny_httpd_html.to_writer`
|
|
- add `IO.Writer.t`, a push based stream.
|
|
- add `Server.run_exn`
|
|
- add `Tiny_httpd_pool`
|
|
- server: add `IO_BACKEND` abstraction; implement a unix version of it
|
|
|
|
- perf: use TCP_NODELAY for client sockets
|
|
- perf: use a resource pool to recycle buffers, improves memory consumption and GC pressure
|
|
|
|
## 0.13
|
|
|
|
- feat: `Server.run` takes `?after_init` parameter
|
|
- remove dep on ounit2 and qtest
|
|
- expose `Response.make_void`
|
|
- Add OPTIONS method
|
|
- use ocamlformat on the code
|
|
|
|
- fix: SSE requires no body
|
|
- fix: get addr/port from the current socket
|
|
- fix: missing closing crlf in chunked streams
|
|
- fix: module Html was not exposed
|
|
- fix: close stream after Response.output
|
|
- fix(tiny-httpd-vfs-pack): allow redirections when fetching resources
|
|
|
|
## 0.12
|
|
|
|
- add dep on `seq`
|
|
- add a `Html` module with combinators to produce html
|
|
- add `Tiny_httpd_dir.VFS` to emulate file systems
|
|
- add a small program, `tiny-httpd-vfs-pack`, to pack directories and files
|
|
(local or behind a URL) into a OCaml module using `VFS`
|
|
- show small example of socket activation
|
|
|
|
## 0.11
|
|
|
|
- breaking: remove deprecated path handlers based on scanf
|
|
- breaking: more getter/setters for request/response, change signatures,
|
|
make request/response private aliases
|
|
|
|
- fix: release semaphore in case of exception in accept
|
|
|
|
- feat: add a notion of Middleware
|
|
- feat: add `?middlewares` param to `create`
|
|
- feat: add `?get_time_s` param to `create`
|
|
- feat: close connection if response's headers contains connection
|
|
- feat: store `start_time` in request
|
|
- feat: implement connection timeout using socket options
|
|
Default is `max_keep_alive = -1.0` which preserves the original behaviour.
|
|
- feat: in server-sent-events, add a `close()` function
|
|
|
|
- refactor(zip): compression is now a middleware
|
|
- perf: pass `buf_size` in many places, set default `buf_size` to 16kb
|
|
- example: update `echo` to provide a /stats/ endpoint using a middleware
|
|
|
|
## 0.10
|
|
|
|
- feat: allow socket activation by passing a raw unix socket to `create`
|
|
- fix: `Unix.accept` may raise an exception
|
|
(typicall Unix.EINTR, even with sigpipe blocked ?),
|
|
prevent the server from stopping
|
|
|
|
## 0.9
|
|
|
|
- support handlers that stream server-sent events to client
|
|
|
|
## 0.8
|
|
|
|
- bump to ocaml 4.04
|
|
- Validate header key's character set (#15)
|
|
- perf: simpler parsing of headers
|
|
|
|
- fix: workaround for css/js in `http_of_dir` (#16)
|
|
- fix(urlencode): encode non ascii chars
|
|
|
|
## 0.7
|
|
|
|
- feat: add `rest_of_path_urlencoded` and rename `rest` to `rest_of_path`
|
|
- feat: `http_of_dir`: redirect to index.html if present
|
|
- fix: `http_of_dir`: do not url-encode '/' in paths
|
|
- feat: add `Route.rest` to match the rest of the path
|
|
- feat: printing routes
|
|
|
|
## 0.6
|
|
|
|
- feat: add `Route.t` construct, deprecate scanf, add more structured path
|
|
- feat: use chunked encoding for large string responses, in addition to streams
|
|
- refactor(echo): simplify code, use gzip aggressively
|
|
- accept http1.0
|
|
|
|
- fix: do not output a `content-length` for a chunked response
|
|
- fix: set `transfer-encoding` header when returning a chunked stream
|
|
- fix(zip): handle case where camlzip consumes 0 bytes
|
|
- feat(zip): also compress string responses if they're big
|
|
- add more debug msg
|
|
|
|
## 0.5
|
|
|
|
- new `tiny_httpd_camlzip` library for handling `deflate` compression
|
|
- feat: expose `Headers.empty`
|
|
- fix: use the non-query path for routing
|
|
- feat(util): add some query related utils
|
|
|
|
## 0.4
|
|
|
|
- easy accessor to the query parameters in path
|
|
- fix: header field names are case insensitive
|
|
- doc: add note on jemalloc in the readme
|
|
- log error when closing client socket
|
|
|
|
## 0.3
|
|
|
|
- feat(http_of_dir): use `file` to guess mime type of file
|
|
- feat: allow handlers to take streams
|
|
- feat(bin): disable uploading by default
|
|
- feat: add `Tiny_httpd_util.parse_query` for query decoding
|
|
- feat(bin): set charset to utf8
|
|
- feat: autodetect ipv6 address
|
|
- feat: support ipv6 address
|
|
|
|
- fix: missing crlf between chunks
|
|
- fix: read_all must return rather than blocking when done
|
|
- fix: proper amortized O(1) push in Buf.push
|
|
- fix: `%X` for percent_encode; use `percent_decode` in `parse_query`
|
|
|
|
## 0.2
|
|
|
|
- feat(bin): count number of hidden files
|
|
- feat(bin): use `details` for hiding hidden files by default
|
|
- fix: improved percent encoding of paths
|
|
- feat: add percent encoding/decoding
|
|
- feat(bin): better human-size display
|
|
- feat: in http_of_dir, sort entries and display their size
|
|
- fix(http_of_dir): handle bad symlinks
|
|
- improve docs and opam, tidy up for 0.1
|