# TODO List - We need more sophistication on `Forwarder` struct to handle `h2c`. - Cache using `lru` crate might be inefficient in terms of the speed. - Consider more sophisticated architecture for cache - Persistent cache (if possible). - More secure cache file object naming - etc etc - Improvement of path matcher - More flexible option for rewriting path - Refactoring - Split `backend` module into three parts - backend(s): struct containing info, defined for each served domain with multiple paths - upstream/upstream group: information on targeted destinations for each set of (a domain + a path) - load-balance: load balancing mod for a domain + path - Unit tests - Options to serve custom http_error page. - Traces and metrics using opentelemetry (`tracing-opentelemetry` crate) - Documentation - Client certificate - support intermediate certificate. Currently, only supports client certificates directly signed by root CA. - Currently, we took the following approach (caveats) - For Http2 and 1.1, prepare `rustls::ServerConfig` for each domain name and hence client CA cert is set for each one. - For Http3, use aggregated `rustls::ServerConfig` for multiple domain names except for ones requiring client-auth. So, if a domain name is set with client authentication, http3 doesn't work for the domain. - Make the session-persistance option for load-balancing sophisticated. (mostly done in v0.3.0) - add option for sticky cookie name - add option for sticky cookie duration - etc.