poweredByHeader argument to serve, serveRequests, and handleRequest.shelf_io.dartX-Powered-By response header to Dart with package:shelf.Server header (with value dart:io with Shelf).repository field.ServerHandler.MiddlewareExtensions which provides addMiddleware and addHandler to Middleware instances. Provides easier access to the composition capabilities offered by Pipeline.content-length header from a Response.notModified. Restores some of the safety around malformed requests that was removed in 1.1.2 where we started allowing content-length for some responses without bodies.List<int> or Stream<List<int>> in a CastList/CastStream to improve performance.Request.hijack return type from void to Never. This may cause analysis hints in packages using this method, but is not actually breaking for apps.change function on Request and Response to clear existing values in context if the provided context value has null values.handlerPath to lead up to a double // in a URI.Request when .change() matches the full path.Request and Response:headersAll field contains all the header valuesheaders field contains the same values as previously (appending values with ,)headers parameter in the constructor and in the .change() method accepts both String and List<String> values.stream_channel version 2.xshared parameter to underlying HttpServer.bind calls via shelf_io.serve.encoding in Response constructors forbidden, notFound, and internalServerError.README.md to point to latest docs.<3.0.0, and adjust other dependencies.Fix constant evaluation analyzer error in shelf_unmodifiable_map.dart.
Update usage of HTTP constants from the Dart SDK. Now require 2.0.0-dev.61.
Update createMiddleware arguments to use FutureOr.
Updated minimum Dart SDK to 1.24.0, which added FutureOr.
Improved formatting of the logRequests default logger.
shelf_io server now adds a shelf.io.connection_info field to Request.context, which provides access to the underlying HttpConnectionInfo object.Give a return type to the Handler typedef. This may cause static warnings where there previously were none, but all handlers should have already been returning a Response or Future<Response>.
Remove HijackCallback and OnHijackCallback typedefs.
Breaking: Change type of onHijack in the Request constructor to take an argument of StreamChannel.
securityContext parameter to self_io.serve().Go back to auto-generating a Content-Length header when the length is known ahead-of-time and the user hasn't explicitly specified a Transfer-Encoding: chunked.
Clarify adapter requirements around transfer codings.
Make shelf_io consistent with the clarified adapter requirements. In particular, it removes the Transfer-Encoding header from chunked requests, and it doesn't apply additional chunking to responses that already declare Transfer-Encoding: chunked.
Content-Length header.Add Request.isEmpty and Response.isEmpty getters which indicate whether a message has an empty body.
Don't automatically generate Content-Length headers on messages where they may not be allowed.
User-specified Content-Length headers now always take precedence over automatically-generated headers.
Allow List<int>s to be passed as request or response bodies.
Requests and responses now automatically set Content-Length headers when the body length is known ahead of time.
Work around sdk#27660 by manually setting HttpResponse.chunkedTransferEncoding to false for requests known to have no content.
logRequests().http_parser 3.0.0.Request.hijack() now takes a callback that accepts a single StreamChannel argument rather than separate Stream and StreamSink arguments. The old callback signature is still supported, but should be considered deprecated.
The HijackCallback and OnHijackCallback typedefs are deprecated.
http_parser 2.0.0.Content-Type header didn‘t interact properly with the encoding parameter for new Request() and new Response() if it wasn’t lowercase.shelf_io adapter detects an error, print the request context as well as the error itself.Add a Server interface representing an adapter that knows its own URL.
Add a ServerHandler class that exposes a Server backed by a Handler.
Add an IOServer class that implements Server in terms of dart:io's HttpServer.
Map instances and related dependencies.Request.change() and Response.change() are marked read whenever the original message is read, and vice-versa. This means that it's possible to read a message on which change() has been called and to call change() on a message more than once, as long as read() is called on only one of those messages.http_parser 1.0.0.body named argument to change method on Request and Response.Updated minimum SDK to 1.9.0.
Allow an empty url parameter to be passed in to new Request(). This fits the stated semantics of the class, and should not have been forbidden.
logRequests outputs a better message a request has a query string.null responses.shelf_io now takes a "shelf.io.buffer_output" Response.context parameter that controls HttpResponse.bufferOutput.
Fixed spelling errors in README and code comments.
Breaking change: The semantics of Request.scriptName and Request.url have been overhauled, and the former has been renamed to Request.handlerPath. handlerPath is now the root-relative URL path to the current handler, while url's path is the relative path from the current handler to the requested. The new semantics are easier to describe and to understand.
Practically speaking, the main difference is that the / at the beginning of url's path has been moved to the end of handlerPath. This makes url's path easier to parse using the path package.
Request.change's handling of handlerPath and url has also changed. Instead of taking both parameters separately and requiring that the user manually maintain all the associated guarantees, it now takes a single path parameter. This parameter is the relative path from the current handlerPath to the next one, and sets both handlerPath and url on the new Request accordingly.
Request to support the body model from Response.Fixed createMiddleware to only catch errors if errorHandler is provided.
Updated handleRequest in shelf_io to more gracefully handle errors when parsing HttpRequest.
Request.change to include the original onHijack callback if one exists.Added default body text for Response.forbidden and Response.notFound if null is provided.
Clarified documentation on a number of Response constructors.
Updated README links to point to latest docs.
collection package.stack_trace.The shelf_io adapter now sends the Date HTTP header by default.
Fixed logic for setting Server header in shelf_io.
Request.change: scriptName and url.Add a Cascade helper that runs handlers in sequence until one returns a response that's neither a 404 nor a 405.
Add a Request.change method that copies a request with new header values.
Add a Request.hijack method that allows handlers to gain access to the underlying HTTP socket.
Capture all asynchronous errors thrown by handlers if they would otherwise be top-leveled.
Add more detail to the README about handlers, middleware, and the rules for implementing an adapter.
context map to Request and Response for passing data among handlers and middleware.scheduled_test development dependency up to v0.12.0Stack to Pipeline.Access to headers for Request and Response is now case-insensitive.
The constructor for Request has been simplified.
Request now exposes url which replaces pathInfo, queryString, and pathSegments.
Removed old testing infrastructure.
Updated documentation address.
http_parser package.mime package.string_scanner package.pubspec details for move to Dart SDK.Responseint get contentLengthDateTime get expiresDateTime get lastModifiedRequestcontentLength is now read from headers. The constructor argument has been removed.Stream<List<int>> body constructor argument.Stream<List<int>> read() and Future<String> readAsString([Encoding encoding])DateTime get ifModifiedSinceString get mimeTypeEncoding get encodingShelf prefix from all classes.Response has drastically different constructors.Response now accepts a body of either String or Stream<List<int>>.Response now exposes encoding and mimeType.