From 8b7b01c9c63d94d0735a04dd06f366c82e0fa27b Mon Sep 17 00:00:00 2001 From: Sergei Predvoditelev Date: Wed, 19 Aug 2026 11:19:30 +0300 Subject: [PATCH 1/5] RemoveBodyMiddleware --- CHANGELOG.md | 4 +- docs/guide/en/remove-body-middleware.md | 38 ++++++++++++++ src/RemoveBodyMiddleware.php | 35 ++++++++++++- tests/RemoveBodyMiddlewareTest.php | 69 +++++++++++++++++++++++++ 4 files changed, 143 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 547555e..9798242 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,9 @@ ## 1.2.2 under development -- no changes in this release. +- New #29: Add `$keepHeadersOnStatusCode` and `$removedHeaders` constructor parameters to `RemoveBodyMiddleware` (@vjik) +- Bug #29: Remove `Content-Length` and `Transfer-Encoding` headers in `RemoveBodyMiddleware` when the body is + removed (@vjik) ## 1.2.1 August 10, 2026 diff --git a/docs/guide/en/remove-body-middleware.md b/docs/guide/en/remove-body-middleware.md index fd6d439..4efc42f 100644 --- a/docs/guide/en/remove-body-middleware.md +++ b/docs/guide/en/remove-body-middleware.md @@ -3,6 +3,13 @@ This middleware removes the body from the response based on the status code. It is useful when you want to ensure that no body content is sent for certain HTTP responses, such as `204 No Content` or `304 Not Modified`. +When the body is removed, headers describing it — `Content-Length` and `Transfer-Encoding` by default — are removed +as well, so the response does not advertise content that is no longer there. The exception is `304 Not Modified`: +per [RFC 9110, §8.6](https://www.rfc-editor.org/rfc/rfc9110.html#section-8.6) and +[RFC 9112, §6.1](https://www.rfc-editor.org/rfc/rfc9112.html#section-6.1), a `304` response may still carry these +headers to describe the representation that would have been sent in a `200 OK` response to the same request, so +they are kept by default. + General usage: ```php @@ -41,3 +48,34 @@ Default: ``` An array of HTTP status codes for which the body should be removed. + +### `$keepHeadersOnStatusCode` + +Type: `list` + +Default: +```php +[ + 304, // Not Modified +] +``` + +An array of HTTP status codes for which headers listed in `$removedHeaders` are kept even though the body is +removed. By default, this only applies to `304 Not Modified`, since per [RFC 9110, §8.6](https://www.rfc-editor.org/rfc/rfc9110.html#section-8.6) +and [RFC 9112, §6.1](https://www.rfc-editor.org/rfc/rfc9112.html#section-6.1) a `304` response may still carry +`Content-Length` and `Transfer-Encoding` describing the representation that would have been sent in a `200 OK` +response to the same request. + +### `$removedHeaders` + +Type: `list` + +Default: +```php +[ + 'Content-Length', + 'Transfer-Encoding', +] +``` + +An array of headers to remove together with the body, for status codes not listed in `$keepHeadersOnStatusCode`. diff --git a/src/RemoveBodyMiddleware.php b/src/RemoveBodyMiddleware.php index 4b957bd..6c656aa 100644 --- a/src/RemoveBodyMiddleware.php +++ b/src/RemoveBodyMiddleware.php @@ -13,15 +13,29 @@ use function in_array; /** - * Removes the body from the response for specific HTTP status codes. + * Removes the body from the response for specific HTTP status codes, along with headers that describe + * the now-removed body (such as `Content-Length` and `Transfer-Encoding`). + * + * For status codes such as `304 Not Modified`, these headers are kept by default, since per RFC 9110 / RFC 9112 + * they are still allowed to describe the representation that would have been sent in a `200 OK` response + * to the same request, even though no body is actually sent. + * + * @see https://datatracker.ietf.org/doc/html/rfc9110#section-8.6 + * @see https://datatracker.ietf.org/doc/html/rfc9112#section-6.3 */ final class RemoveBodyMiddleware implements MiddlewareInterface { /** * @param StreamFactoryInterface $streamFactory Factory to create a stream. * @param array $statusCodes List of HTTP status codes for which the body should be removed. + * @param array $keepHeadersOnStatusCode List of HTTP status codes for which {@see $removedHeaders} should be + * kept even though the body is removed. + * @param array $removedHeaders List of headers to remove together with the body, for status codes not listed + * in {@see $keepHeadersOnStatusCode}. * * @psalm-param list $statusCodes + * @psalm-param list $keepHeadersOnStatusCode + * @psalm-param list $removedHeaders */ public function __construct( private readonly StreamFactoryInterface $streamFactory, @@ -33,6 +47,13 @@ public function __construct( 205, // Reset Content 304, // Not Modified ], + private readonly array $keepHeadersOnStatusCode = [ + 304, // Not Modified + ], + private readonly array $removedHeaders = [ + 'Content-Length', + 'Transfer-Encoding', + ], ) {} public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface @@ -51,8 +72,18 @@ private function shouldRemoveBody(ResponseInterface $response): bool private function removeBody(ResponseInterface $response): ResponseInterface { - return $response->withBody( + $response = $response->withBody( $this->streamFactory->createStream(), ); + + if (in_array($response->getStatusCode(), $this->keepHeadersOnStatusCode, true)) { + return $response; + } + + foreach ($this->removedHeaders as $header) { + $response = $response->withoutHeader($header); + } + + return $response; } } diff --git a/tests/RemoveBodyMiddlewareTest.php b/tests/RemoveBodyMiddlewareTest.php index b17f1e5..f8462cb 100644 --- a/tests/RemoveBodyMiddlewareTest.php +++ b/tests/RemoveBodyMiddlewareTest.php @@ -57,4 +57,73 @@ public function testCustomStatus(bool $expectBody, int $statusCode): void assertSame($expectBody ? 'test' : '', (string) $response->getBody()); } + + #[TestWith([true, 100])] + #[TestWith([true, 101])] + #[TestWith([true, 102])] + #[TestWith([true, 204])] + #[TestWith([true, 205])] + #[TestWith([false, 304])] + public function testHeadersAreRemovedExceptForKeptStatusCodes(bool $expectHeadersRemoved, int $statusCode): void + { + $streamFactory = new StreamFactory(); + $requestHandler = new FakeRequestHandler( + (new Response( + statusCode: $statusCode, + body: (new StreamFactory())->createStream('test'), + )) + ->withHeader('Content-Length', '4') + ->withHeader('Transfer-Encoding', 'chunked'), + ); + $middleware = new RemoveBodyMiddleware($streamFactory); + + $response = $middleware->process(new ServerRequest(), $requestHandler); + + assertSame(!$expectHeadersRemoved, $response->hasHeader('Content-Length')); + assertSame(!$expectHeadersRemoved, $response->hasHeader('Transfer-Encoding')); + } + + public function testCustomKeepHeadersOnStatusCode(): void + { + $streamFactory = new StreamFactory(); + $requestHandler = new FakeRequestHandler( + (new Response( + statusCode: 204, + body: (new StreamFactory())->createStream('test'), + )) + ->withHeader('Content-Length', '4') + ->withHeader('Transfer-Encoding', 'chunked'), + ); + $middleware = new RemoveBodyMiddleware( + $streamFactory, + keepHeadersOnStatusCode: [204], + ); + + $response = $middleware->process(new ServerRequest(), $requestHandler); + + assertSame(true, $response->hasHeader('Content-Length')); + assertSame(true, $response->hasHeader('Transfer-Encoding')); + } + + public function testCustomRemovedHeaders(): void + { + $streamFactory = new StreamFactory(); + $requestHandler = new FakeRequestHandler( + (new Response( + statusCode: 204, + body: (new StreamFactory())->createStream('test'), + )) + ->withHeader('Content-Length', '4') + ->withHeader('Transfer-Encoding', 'chunked'), + ); + $middleware = new RemoveBodyMiddleware( + $streamFactory, + removedHeaders: ['Content-Length'], + ); + + $response = $middleware->process(new ServerRequest(), $requestHandler); + + assertSame(false, $response->hasHeader('Content-Length')); + assertSame(true, $response->hasHeader('Transfer-Encoding')); + } } From ea83abce245e20db03d041f83885b0271a449a63 Mon Sep 17 00:00:00 2001 From: Sergei Predvoditelev Date: Wed, 19 Aug 2026 11:33:58 +0300 Subject: [PATCH 2/5] ContentLengthMiddleware --- CHANGELOG.md | 3 ++ docs/guide/en/content-length-middleware.md | 22 +++++++++++++ docs/guide/en/remove-body-middleware.md | 9 ++--- src/ContentLengthMiddleware.php | 19 ++++++++++- tests/ContentLengthMiddlewareTest.php | 38 ++++++++++++++++++++++ 5 files changed, 86 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9798242..ca10613 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,8 +3,11 @@ ## 1.2.2 under development - New #29: Add `$keepHeadersOnStatusCode` and `$removedHeaders` constructor parameters to `RemoveBodyMiddleware` (@vjik) +- New #29: Add `$removeOnStatusCode` constructor parameter to `ContentLengthMiddleware` (@vjik) - Bug #29: Remove `Content-Length` and `Transfer-Encoding` headers in `RemoveBodyMiddleware` when the body is removed (@vjik) +- Bug #29: Remove already present `Content-Length` header in `ContentLengthMiddleware` for status codes that must + not carry one (@vjik) ## 1.2.1 August 10, 2026 diff --git a/docs/guide/en/content-length-middleware.md b/docs/guide/en/content-length-middleware.md index ec507c0..f2ef34b 100644 --- a/docs/guide/en/content-length-middleware.md +++ b/docs/guide/en/content-length-middleware.md @@ -6,6 +6,8 @@ A configurable middleware that manages the `Content-Length` HTTP response header This middleware is used to: - remove the `Content-Length` header if the `Transfer-Encoding` header is present (typically for chunked responses); +- remove an already present `Content-Length` header for status codes that must not carry one, such as + `204 No Content` (see [RFC 9110, §8.6](https://datatracker.ietf.org/doc/html/rfc9110#section-8.6)); - add the `Content-Length` header if it's missing and the response body allows it. Default usage: @@ -51,3 +53,23 @@ Default: ``` An array of HTTP status codes for which the `Content-Length` header should not be added. + +### `$removeOnStatusCode` + +Type: `list` + +Default: +```php +[ + 100, // Continue + 101, // Switching Protocols + 102, // Processing + 204, // No Content + 205, // Reset Content +] +``` + +An array of HTTP status codes for which an already present `Content-Length` header should be removed. `304` +is not included by default, since per [RFC 9110, §8.6](https://datatracker.ietf.org/doc/html/rfc9110#section-8.6) +a `304 Not Modified` response may still carry `Content-Length` describing the representation that would have +been sent in a `200 OK` response to the same request. diff --git a/docs/guide/en/remove-body-middleware.md b/docs/guide/en/remove-body-middleware.md index 4efc42f..9776a31 100644 --- a/docs/guide/en/remove-body-middleware.md +++ b/docs/guide/en/remove-body-middleware.md @@ -5,8 +5,8 @@ no body content is sent for certain HTTP responses, such as `204 No Content` or When the body is removed, headers describing it — `Content-Length` and `Transfer-Encoding` by default — are removed as well, so the response does not advertise content that is no longer there. The exception is `304 Not Modified`: -per [RFC 9110, §8.6](https://www.rfc-editor.org/rfc/rfc9110.html#section-8.6) and -[RFC 9112, §6.1](https://www.rfc-editor.org/rfc/rfc9112.html#section-6.1), a `304` response may still carry these +per [RFC 9110, §8.6](https://datatracker.ietf.org/doc/html/rfc9110#section-8.6) and +[RFC 9112, §6.1](https://datatracker.ietf.org/doc/html/rfc9112#section-6.1), a `304` response may still carry these headers to describe the representation that would have been sent in a `200 OK` response to the same request, so they are kept by default. @@ -61,8 +61,9 @@ Default: ``` An array of HTTP status codes for which headers listed in `$removedHeaders` are kept even though the body is -removed. By default, this only applies to `304 Not Modified`, since per [RFC 9110, §8.6](https://www.rfc-editor.org/rfc/rfc9110.html#section-8.6) -and [RFC 9112, §6.1](https://www.rfc-editor.org/rfc/rfc9112.html#section-6.1) a `304` response may still carry +removed. By default, this only applies to `304 Not Modified`, since per +[RFC 9110, §8.6](https://datatracker.ietf.org/doc/html/rfc9110#section-8.6) +and [RFC 9112, §6.1](https://datatracker.ietf.org/doc/html/rfc9112#section-6.1) a `304` response may still carry `Content-Length` and `Transfer-Encoding` describing the representation that would have been sent in a `200 OK` response to the same request. diff --git a/src/ContentLengthMiddleware.php b/src/ContentLengthMiddleware.php index bf73b56..68db1a4 100644 --- a/src/ContentLengthMiddleware.php +++ b/src/ContentLengthMiddleware.php @@ -13,6 +13,8 @@ /** * Configurable middleware that adds or removes the `Content-Length` header from the response. + * + * @see https://datatracker.ietf.org/doc/html/rfc9110#section-8.6 */ final class ContentLengthMiddleware implements MiddlewareInterface { @@ -21,8 +23,11 @@ final class ContentLengthMiddleware implements MiddlewareInterface * is present. * @param bool $add Whether to add the `Content-Length` header if not present. * @param array $doNotAddOnStatusCode List of HTTP status codes where `Content-Length` header should not be added. + * @param array $removeOnStatusCode List of HTTP status codes for which an already present `Content-Length` + * header should be removed. * * @psalm-param list $doNotAddOnStatusCode + * @psalm-param list $removeOnStatusCode */ public function __construct( private readonly bool $removeOnTransferEncoding = true, @@ -35,6 +40,13 @@ public function __construct( 205, // Reset Content 304, // Not Modified ], + private readonly array $removeOnStatusCode = [ + 100, // Continue + 101, // Switching Protocols + 102, // Processing + 204, // No Content + 205, // Reset Content + ], ) {} public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface @@ -54,7 +66,12 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface private function shouldRemoveContentLength(ResponseInterface $response): bool { - return $this->removeOnTransferEncoding && $response->hasHeader('Transfer-Encoding'); + if ($this->removeOnTransferEncoding && $response->hasHeader('Transfer-Encoding')) { + return true; + } + + return $response->hasHeader('Content-Length') + && in_array($response->getStatusCode(), $this->removeOnStatusCode, true); } private function shouldSkipContentLength(ResponseInterface $response): bool diff --git a/tests/ContentLengthMiddlewareTest.php b/tests/ContentLengthMiddlewareTest.php index c1cb251..eff39c2 100644 --- a/tests/ContentLengthMiddlewareTest.php +++ b/tests/ContentLengthMiddlewareTest.php @@ -113,6 +113,44 @@ public function testDoNotAddOnStatusCodeDefaults(int $statusCode): void assertSame([], $response->getHeaders()); } + #[TestWith([true, 100])] + #[TestWith([true, 101])] + #[TestWith([true, 102])] + #[TestWith([true, 204])] + #[TestWith([true, 205])] + #[TestWith([false, 304])] + public function testRemoveOnStatusCodeDefaults(bool $expectRemoved, int $statusCode): void + { + $request = (new ServerRequestFactory())->createServerRequest('GET', '/'); + $handler = new FakeRequestHandler( + new Response( + $statusCode, + headers: ['Content-Length' => '500'], + ), + ); + $middleware = new ContentLengthMiddleware(); + + $response = $middleware->process($request, $handler); + + assertSame(!$expectRemoved, $response->hasHeader('Content-Length')); + } + + public function testCustomRemoveOnStatusCode(): void + { + $request = (new ServerRequestFactory())->createServerRequest('GET', '/'); + $handler = new FakeRequestHandler( + new Response( + 304, + headers: ['Content-Length' => '500'], + ), + ); + $middleware = new ContentLengthMiddleware(removeOnStatusCode: [304]); + + $response = $middleware->process($request, $handler); + + assertSame(false, $response->hasHeader('Content-Length')); + } + public function testDoNotAddOnZeroLength(): void { $body = (new StreamFactory())->createStream(); From e42752bb990a436d2a154f4db707e3b6e88d1487 Mon Sep 17 00:00:00 2001 From: Sergei Predvoditelev Date: Wed, 19 Aug 2026 11:45:07 +0300 Subject: [PATCH 3/5] fix --- docs/guide/en/content-length-middleware.md | 2 ++ docs/guide/en/remove-body-middleware.md | 7 +++++-- src/ContentLengthMiddleware.php | 2 ++ src/RemoveBodyMiddleware.php | 2 ++ tests/ContentLengthMiddlewareTest.php | 2 ++ tests/RemoveBodyMiddlewareTest.php | 2 ++ 6 files changed, 15 insertions(+), 2 deletions(-) diff --git a/docs/guide/en/content-length-middleware.md b/docs/guide/en/content-length-middleware.md index f2ef34b..405c207 100644 --- a/docs/guide/en/content-length-middleware.md +++ b/docs/guide/en/content-length-middleware.md @@ -46,6 +46,7 @@ Default: 100, // Continue 101, // Switching Protocols 102, // Processing + 103, // Early Hints 204, // No Content 205, // Reset Content 304, // Not Modified @@ -64,6 +65,7 @@ Default: 100, // Continue 101, // Switching Protocols 102, // Processing + 103, // Early Hints 204, // No Content 205, // Reset Content ] diff --git a/docs/guide/en/remove-body-middleware.md b/docs/guide/en/remove-body-middleware.md index 9776a31..a34a742 100644 --- a/docs/guide/en/remove-body-middleware.md +++ b/docs/guide/en/remove-body-middleware.md @@ -6,7 +6,8 @@ no body content is sent for certain HTTP responses, such as `204 No Content` or When the body is removed, headers describing it — `Content-Length` and `Transfer-Encoding` by default — are removed as well, so the response does not advertise content that is no longer there. The exception is `304 Not Modified`: per [RFC 9110, §8.6](https://datatracker.ietf.org/doc/html/rfc9110#section-8.6) and -[RFC 9112, §6.1](https://datatracker.ietf.org/doc/html/rfc9112#section-6.1), a `304` response may still carry these +[RFC 9112, §6.1](https://datatracker.ietf.org/doc/html/rfc9112#section-6.1) / +[§6.3](https://datatracker.ietf.org/doc/html/rfc9112#section-6.3), a `304` response may still carry these headers to describe the representation that would have been sent in a `200 OK` response to the same request, so they are kept by default. @@ -41,6 +42,7 @@ Default: 100, // Continue 101, // Switching Protocols 102, // Processing + 103, // Early Hints 204, // No Content 205, // Reset Content 304, // Not Modified @@ -63,7 +65,8 @@ Default: An array of HTTP status codes for which headers listed in `$removedHeaders` are kept even though the body is removed. By default, this only applies to `304 Not Modified`, since per [RFC 9110, §8.6](https://datatracker.ietf.org/doc/html/rfc9110#section-8.6) -and [RFC 9112, §6.1](https://datatracker.ietf.org/doc/html/rfc9112#section-6.1) a `304` response may still carry +and [RFC 9112, §6.1](https://datatracker.ietf.org/doc/html/rfc9112#section-6.1) / +[§6.3](https://datatracker.ietf.org/doc/html/rfc9112#section-6.3) a `304` response may still carry `Content-Length` and `Transfer-Encoding` describing the representation that would have been sent in a `200 OK` response to the same request. diff --git a/src/ContentLengthMiddleware.php b/src/ContentLengthMiddleware.php index 68db1a4..88476de 100644 --- a/src/ContentLengthMiddleware.php +++ b/src/ContentLengthMiddleware.php @@ -36,6 +36,7 @@ public function __construct( 100, // Continue 101, // Switching Protocols 102, // Processing + 103, // Early Hints 204, // No Content 205, // Reset Content 304, // Not Modified @@ -44,6 +45,7 @@ public function __construct( 100, // Continue 101, // Switching Protocols 102, // Processing + 103, // Early Hints 204, // No Content 205, // Reset Content ], diff --git a/src/RemoveBodyMiddleware.php b/src/RemoveBodyMiddleware.php index 6c656aa..3807057 100644 --- a/src/RemoveBodyMiddleware.php +++ b/src/RemoveBodyMiddleware.php @@ -21,6 +21,7 @@ * to the same request, even though no body is actually sent. * * @see https://datatracker.ietf.org/doc/html/rfc9110#section-8.6 + * @see https://datatracker.ietf.org/doc/html/rfc9112#section-6.1 * @see https://datatracker.ietf.org/doc/html/rfc9112#section-6.3 */ final class RemoveBodyMiddleware implements MiddlewareInterface @@ -43,6 +44,7 @@ public function __construct( 100, // Continue 101, // Switching Protocols 102, // Processing + 103, // Early Hints 204, // No Content 205, // Reset Content 304, // Not Modified diff --git a/tests/ContentLengthMiddlewareTest.php b/tests/ContentLengthMiddlewareTest.php index eff39c2..972ec42 100644 --- a/tests/ContentLengthMiddlewareTest.php +++ b/tests/ContentLengthMiddlewareTest.php @@ -94,6 +94,7 @@ public function testDisabledAdd(): void #[TestWith([100])] #[TestWith([101])] #[TestWith([102])] + #[TestWith([103])] #[TestWith([204])] #[TestWith([205])] #[TestWith([304])] @@ -116,6 +117,7 @@ public function testDoNotAddOnStatusCodeDefaults(int $statusCode): void #[TestWith([true, 100])] #[TestWith([true, 101])] #[TestWith([true, 102])] + #[TestWith([true, 103])] #[TestWith([true, 204])] #[TestWith([true, 205])] #[TestWith([false, 304])] diff --git a/tests/RemoveBodyMiddlewareTest.php b/tests/RemoveBodyMiddlewareTest.php index f8462cb..16c7c88 100644 --- a/tests/RemoveBodyMiddlewareTest.php +++ b/tests/RemoveBodyMiddlewareTest.php @@ -19,6 +19,7 @@ final class RemoveBodyMiddlewareTest extends TestCase #[TestWith([false, 100])] #[TestWith([false, 101])] #[TestWith([false, 102])] + #[TestWith([false, 103])] #[TestWith([false, 204])] #[TestWith([false, 205])] #[TestWith([false, 304])] @@ -61,6 +62,7 @@ public function testCustomStatus(bool $expectBody, int $statusCode): void #[TestWith([true, 100])] #[TestWith([true, 101])] #[TestWith([true, 102])] + #[TestWith([true, 103])] #[TestWith([true, 204])] #[TestWith([true, 205])] #[TestWith([false, 304])] From 94f8c99f02f2b0596a9b8e293e260c611f81061a Mon Sep 17 00:00:00 2001 From: Sergei Predvoditelev Date: Wed, 19 Aug 2026 11:46:39 +0300 Subject: [PATCH 4/5] changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ca10613..43ccf26 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,8 @@ removed (@vjik) - Bug #29: Remove already present `Content-Length` header in `ContentLengthMiddleware` for status codes that must not carry one (@vjik) +- Bug #29: Add missing `103 Early Hints` status code to default status code lists in `RemoveBodyMiddleware` and + `ContentLengthMiddleware` (@vjik) ## 1.2.1 August 10, 2026 From 93c7bb7049b4647173f9cb26c757319191c0a245 Mon Sep 17 00:00:00 2001 From: Sergei Predvoditelev Date: Wed, 19 Aug 2026 11:49:53 +0300 Subject: [PATCH 5/5] fix --- .github/workflows/bc.yml | 1 + .roave-backward-compatibility-check.xml | 7 +++++++ 2 files changed, 8 insertions(+) create mode 100644 .roave-backward-compatibility-check.xml diff --git a/.github/workflows/bc.yml b/.github/workflows/bc.yml index e429e08..5d3dfa5 100644 --- a/.github/workflows/bc.yml +++ b/.github/workflows/bc.yml @@ -4,6 +4,7 @@ on: pull_request: paths: &paths - 'src/**' + - '.roave-backward-compatibility-check.xml' - 'composer.json' - '.github/workflows/bc.yml' push: diff --git a/.roave-backward-compatibility-check.xml b/.roave-backward-compatibility-check.xml new file mode 100644 index 0000000..a09e91d --- /dev/null +++ b/.roave-backward-compatibility-check.xml @@ -0,0 +1,7 @@ + + + #Default parameter value for parameter \$doNotAddOnStatusCode of Yiisoft\\HttpMiddleware\\ContentLengthMiddleware# + #Default parameter value for parameter \$statusCodes of Yiisoft\\HttpMiddleware\\RemoveBodyMiddleware# + +