In some cases, you may want to include an explicit
header, without having to inject it manually. To facilitate this, we provide
When to use this middleware
In most cases, you do not need to provide an explicit Content-Length value in your responses. While the HTTP/1.1 specification indicates the header SHOULD be provided, most clients will not degrade to HTTP/1.0 if the header is omitted.
The one exception that has been reported is when working with New Relic, which requires valid
Content-Lengthheaders for some of its analytics; in such cases, enabling this middleware will fix those situations.
This middleware delegates the request, and operates on the returned response. It
will return a new response with the
Content-Length header injected under the
Content-Lengthheader is already present AND
- the body size is non-null.
To register it in your application, you will need to do two things: register the middleware with the container, and register the middleware in either your application pipeline, or within routed middleware.
To add it to your container, add the following configuration:
// In a `config/autoload/*.global.php` file, or a `ConfigProvider` class: use Zend\Expressive\Helper; return [ 'dependencies' => [ 'invokables' => [ Helper\ContentLengthMiddleware::class => Helper\ContentLengthMiddleware::class, ], ], ];
To register it as pipeline middleware to execute on any request:
// In `config/pipeline.php`: use Zend\Expressive\Helper; $app->pipe(Helper\ContentLengthMiddleware::class);
To register it within a routed middleware pipeline:
// In `config/routes.php`: use Zend\Expressive\Helper; $app->get('/download/tarball', [ Helper\ContentLengthMiddleware::class, Download\Tarball::class, ], 'download-tar');
One caveat to note is that if you use this middleware, but also write directly
to the output buffer (e.g., via a
var_dump, or if
display_errors is on and
an uncaught error or exception occurs), the output will not appear as you
expect. Generally in such situations, the contents of the output buffer will
appear, up to the specified
Content-Length value. This can lead to truncated
error content and/or truncated application content.
We recommend that if you use this feature, you also use a PHP error and/or exception handler that logs errors in order to prevent truncated output.