Revision history for Perl extension Feersum 1.509 Tue Oct 20 14:54:11 2026 +0300 - security and robustness hardening across HTTP/1, HTTP/2 and TLS - enforce retired generation drain deadlines through reload and shutdown 1.507 Fri Sep 25 10:49:04 2026 +0300 New: - multiple server instances (new_instance) and multiple listeners per instance, IPv6 among them - TLS 1.3 via picotls+openssl: per-listener certificates, SNI vhosts - HTTP/2 via nghttp2: multiplexing, streaming, extended CONNECT (RFC 8441), rapid-reset (CVE-2023-44487) and ping-flood (CVE-2019-9512) protection - PROXY protocol v1/v2, including TLVs - reverse_proxy mode: take client_address and url_scheme from X-Forwarded-For/-Proto behind a trusted upstream; off by default - SO_REUSEPORT, sendfile - timeouts and limits: header_timeout, write_timeout, linger_timeout, max_connections, max_body_len, max_uri_len, max_read_buf, max_accept_per_loop, max_h2_concurrent_streams, max_h2_conn_body, wbuf_low_water - introspection: active_conns, total_requests, access_log, pause_accept/resume_accept, set_psgix_io - psgix.h2.trailers, psgix.h2.extended_connect, psgix.h2.protocol, psgix.proxy_tlvs - psgi.input gains getline, getlines and <$fh> - Feersum::Runner: hot_restart, preload_app, daemonize, pid_file, user/group, after_fork, access_log, graceful_timeout, startup_timeout, max_requests_per_worker - bin/feersum native mode with full Runner option parity Incompatible with 1.505: - requires Perl 5.14 (was 5.8.7) - the Feersum object is no longer a hashref; use the public API - psgix.input.buffered is no longer advertised (psgi.input is forward-only; Plack buffers the body when it is unset) - a UTF8-flagged response string whose characters all fit in a byte is sent as those bytes, like every other PSGI server - a 1xx final status is refused (101 excepted); a status above 599 answers 500 - CR or LF in the status line, and a control character in a response header (a tab is allowed in a value), are refused (CWE-113) - psgi.input is always present, per PSGI 1.1 - a graceful stop, worker retirement and hot-restart handover exit via POSIX::_exit: END blocks do not run and buffered STDOUT is lost (set $| = 1 or log to STDERR) See the UPGRADING section in the docs for behaviour changes that bite with no code change (tighter default limits among them). 1.505 Wed Apr 09 16:20:00 2025 -0200 - pipeline fix - minor: manifest fix and test tweaks 1.504 Sat Jan 18 19:14:15 2025 -0200 - http/1.1 pipelining support 1.503 Tue Sep 17 12:14:15 2024 -0200 - start listening on re-forked child - try fix test for some older perls on freebsd 1.502 Wed Sep 03 19:10:55 2024 -0200 - don't generate Content-Length header for 204 responses - acknowledge PERL_USE_UNSAFE_INC=0 1.501 Sat Aug 31 09:10:55 2024 -0200 - http/1.1 keepalive support for chunked(streaming) responses - max_connection_reqs to control requests per keepalive connection - tweak some tests for better cpantesters matrix 1.500 Tue Aug 20 18:10:55 2024 -0200 Features: - native interface: access specific parts of request - http/1.1 keepalive support - http/1.1 date header - defer accept, accept4 Backward incompatibly: - remove adobe flash policy support 1.410 Sat Dec 5 14:32:22 2020 +0800 Features - Add unix domain socket support (vividsnow++) # for example: plackup -E production -l /tmp/app.sock -s Feersum --pre-fork N app.psgi feersum --native --listen /tmp/app.sock --pre-fork N ./app.feersum 1.407 Sun Jun 9 16:17:30 2019 +0800 Bugfixes - Fix interim test failures (snakpak++) 1.406 Fri Sep 21 08:15:32 2018 -0400 Bugfixes - Fix tests by depending on HTTP::Entity::Parser 0.20+ (ltriant++) 1.405 Sun Jun 18 00:55:56 2017 +0800 Features - Handle server_ready option in plack handler (haarg++) Bugfixes - Handle POST with empty content (hoytech++) 1.404 Tue Nov 1 22:52:42 2016 +0800 Features - Unix socket support (hoytech++) 1.403 Wed Aug 12 19:19:57 2015 +0800 Features - Add OPTIONS method support (mgreter++) 1.402 Fri Jul 31 12:02:30 2015 +0800 Bugfixes - memeory leak if request method is POST (fangyousong++) 1.401 Wed Nov 6 21:53:25 2013 +0800 Bugfixes - Fix tests for newer Plack::Test (@gfx++) - Suppress compilation warnings under clang. (@gfx++) 1.400 Wed Sep 7 20:00:00 2011 -0700 Features - Add flash socket policy support (au++) Bugfixes - mortal scalar leak (thanks bfg) - 400s on incremental request parsing (GH#12 thanks danmcc) Docs - policy support and other tunables - add some missed API - mark the --pre-fork option as Experimental Tests - a bunch of author tests - reduce the amount of parallelism in tests (makes them faster) 1.202 Thu Jun 30 00:45:00 2011 -0700 Fix double-plan test failures when Test::LeakTrace missing (au++) 1.201 Wed Jun 29 11:00:00 2011 -0700 Fix sockaddr memory leak (thanks bfg) 1.200 Fri Apr 15 12:00:00 2011 -0700 Fix major defect: corrupted large static files (thanks leedo) 1.101 Wed Apr 13 12:00:00 2011 -0700 Fix 62-plack-runner.t again (thanks cpantesters) 1.100 Mon Apr 11 12:40:00 2011 -0700 Fix major defect: truncated writes (fbb3664) Finish Solaris compatibility (thanks konobi) Fix t/11-runner.t failing when JSON::XS missing 1.002 Sat Apr 9 16:15:00 2011 -0700 Try to fix persistent failing of 62-plack-runner.t Update picohttpparser from upstream Fix printf warnings on Lucid 1.001 Mon Jan 31 10:00:00 2011 -0800 Address RT#65239 by making Plack a true dep. if present. Test::TCP is now a hard build dependency. Use Test::Fatal instead of Test::Exception. 1.000 Mon Nov 22 12:00:00 2010 -0800 Socialtext now runs Feersum in production, hence 1.000 Add write_array() to Writer handle (undoc'd Feersum extension) Be explicit about the EU::MM requirement (thanks au) Formally support PSGI 1.1 (thanks miyagawa) 0.986 Mon Oct 26 09:16:00 2010 -0700 Fix compilation for EV 4.00 (thanks au) 0.985 Mon Oct 25 16:18:00 2010 -0700 Require EV 4.00. Make two example scripts emit a constant Content-Length for ab. Code reworking and optimization. 0.984 Fri Oct 15 10:45:00 2010 -0700 Fix a misspelling of SvREFCNT_dec 0.983 Thu Oct 14 17:45:00 2010 -0700 Add a response_guard() method and psgix.output.guard 0.982 Tue Oct 12 10:55:00 2010 -0700 Initial pre-forking support via Feersum::Runner & Plack::Runner Fix: resource leak induced by header-read errors Fix: compilation on BSD & Solaris re: SOL_TCP 0.981 Wed Oct 9 04:30:00 2010 -0700 Support Web::Hippie (and psgix.io) Add missing JSON::XS test-dep. Fix: write() prototype was incorrect. Fix: writer not flushing on DESTROY. Fix: IO::Handle in PSGI streaming response. Fix: `use overload` PSGI callbacks in perl 5.8.x 0.971 Wed Oct 6 16:21:00 2010 -0700 Fix the feersum script. 0.97 Wed Oct 6 15:00:00 2010 -0700 Full Plack::Test::Suite compliance! Handle 304 responses properly. Don't manually steal TEMP vars. 0.961 Wed Oct 6 08:40:00 2010 -0700 Fix building under threaded perls. Work around a bug (?) in 5.12.1 when declaring -DDEBUGGING. 0.96 Fri Oct 1 15:30:00 2010 -0700 Support Tatsumaki running under Feersum. Content-Type is now in the CONTENT_TYPE env. 0.95 Fri Oct 1 13:45:00 2010 -0700 Specify Plack >= 0.995 version for testing & recommending Experiment with close() rather than shutdown() for ending connections. Actually install bin/feersum as a script Fix coredumps/hangs due to improper refcounting. Fix examples, Add a chat app example. 0.94 Thu Sep 30 22:45:00 2010 -0700 Major documentation rewrite. Deprecated the "delayed response" part of the Feersum API in favor of the "streamed response" API. Allow for tied variables in the response. Move the IO::Handle response reading code into XS. 0.93 Tue Sep 29 01:30:00 2010 -0700 First CPAN release. Redo PSGI streaming responses (mostly for code clarity). Fixes for Perl 5.8.x 0.92 Tue Sep 28 22:18:01 2010 -0700 Support "Connection:close" style streaming for 1.0 clients. Support IO::Handle-like responses for PSGI handlers. Add REMOTE_ADDR and REMOTE_PORT to env. 0.91 Sun Sep 19 15:33:39 2010 -0700 Support running Feersum under plackup. Remove AnyEvent::HTTP dependency. Make $r->env() calls faster. 0.90 Mon Sep 6 16:35:00 2010 Initial PSGI 1.03 support (except for IO::Handle-like responses) 0.02 Fri Apr 23 10:55:54 2010 Renamed a good chunk of the functions & classes. Made psgi.input and stream-writer objects separate from the main connection class. 0.01 Fri Apr 23 10:55:54 2010 Started project.