Features
- [2545](https://github.com/sanic-org/sanic/pull/2545) Standardize init of exceptions for more consistent control of HTTP responses using exceptions
- [2606](https://github.com/sanic-org/sanic/pull/2606) Decode headers as UTF-8 also in ASGI
- [2646](https://github.com/sanic-org/sanic/pull/2646) Separate ASGI request and lifespan callables
- [2659](https://github.com/sanic-org/sanic/pull/2659) Use ``FALLBACK_ERROR_FORMAT`` for handlers that return ``empty()``
- [2662](https://github.com/sanic-org/sanic/pull/2662) Add basic file browser (HTML page) and auto-index serving
- [2667](https://github.com/sanic-org/sanic/pull/2667) Nicer traceback formatting (HTML page)
- [2668](https://github.com/sanic-org/sanic/pull/2668) Smarter error page rendering format selection; more reliant upon header and "common sense" defaults
- [2680](https://github.com/sanic-org/sanic/pull/2680) Check the status of socket before shutting down with ``SHUT_RDWR``
- [2687](https://github.com/sanic-org/sanic/pull/2687) Refresh ``Request.accept`` functionality to be more performant and spec-compliant
- [2696](https://github.com/sanic-org/sanic/pull/2696) Add header accessors as properties
Example-Field: Foo, Bar
Example-Field: Baz
python
request.headers.example_field == "Foo, Bar,Baz"
- [2700](https://github.com/sanic-org/sanic/pull/2700) Simpler CLI targets
sh
$ sanic path.to.module:app global app instance
$ sanic path.to.module:create_app factory pattern
$ sanic ./path/to/directory/ simple serve
- [2701](https://github.com/sanic-org/sanic/pull/2701) API to define a number of workers in managed processes
- [2704](https://github.com/sanic-org/sanic/pull/2704) Add convenience for dynamic changes to routing
- [2706](https://github.com/sanic-org/sanic/pull/2706) Add convenience methods for cookie creation and deletion
python
response = text("...")
response.add_cookie("test", "It worked!", domain=".yummy-yummy-cookie.com")
- [2707](https://github.com/sanic-org/sanic/pull/2707) Simplified ``parse_content_header`` escaping to be RFC-compliant and remove outdated FF hack
- [2710](https://github.com/sanic-org/sanic/pull/2710) Stricter charset handling and escaping of request URLs
- [2711](https://github.com/sanic-org/sanic/pull/2711) Consume body on ``DELETE`` by default
- [2719](https://github.com/sanic-org/sanic/pull/2719) Allow ``password`` to be passed to TLS context
- [2720](https://github.com/sanic-org/sanic/pull/2720) Skip middleware on ``RequestCancelled``
- [2721](https://github.com/sanic-org/sanic/pull/2721) Change access logging format to ``%s``
- [2722](https://github.com/sanic-org/sanic/pull/2722) Add ``CertLoader`` as application option for directly controlling ``SSLContext`` objects
- [2725](https://github.com/sanic-org/sanic/pull/2725) Worker sync state tolerance on race condition
Bugfixes
- [2651](https://github.com/sanic-org/sanic/pull/2651) ASGI websocket to pass thru bytes as is
- [2697](https://github.com/sanic-org/sanic/pull/2697) Fix comparison between datetime aware and naive in ``file`` when using ``If-Modified-Since``
Deprecations and Removals
- [2666](https://github.com/sanic-org/sanic/pull/2666) Remove deprecated ``__blueprintname__`` property
Improved Documentation
- [2712](https://github.com/sanic-org/sanic/pull/2712) Improved example using ``'https'`` to create the redirect
---
New Contributors
* r0x0d made their first contribution in https://github.com/sanic-org/sanic/pull/2666
* deounix made their first contribution in https://github.com/sanic-org/sanic/pull/2680
* mbendiksen made their first contribution in https://github.com/sanic-org/sanic/pull/2712
* stricaud made their first contribution in https://github.com/sanic-org/sanic/pull/2697
**Full Changelog**: https://github.com/sanic-org/sanic/compare/v22.12.0...v23.3.0