diff --git a/src/Symfony/Component/HttpKernel/HttpCache/HttpCache.php b/src/Symfony/Component/HttpKernel/HttpCache/HttpCache.php index 1b86ddd3c0..253deb143a 100644 --- a/src/Symfony/Component/HttpKernel/HttpCache/HttpCache.php +++ b/src/Symfony/Component/HttpKernel/HttpCache/HttpCache.php @@ -374,7 +374,9 @@ class HttpCache implements HttpKernelInterface, TerminableInterface $subRequest = clone $request; // send no head requests because we want content - $subRequest->setMethod('GET'); + if ('HEAD' === $request->getMethod()) { + $subRequest->setMethod('GET'); + } // add our cached last-modified validator $subRequest->headers->set('if_modified_since', $entry->headers->get('Last-Modified')); @@ -435,7 +437,9 @@ class HttpCache implements HttpKernelInterface, TerminableInterface $subRequest = clone $request; // send no head requests because we want content - $subRequest->setMethod('GET'); + if ('HEAD' === $request->getMethod()) { + $subRequest->setMethod('GET'); + } // avoid that the backend sends no content $subRequest->headers->remove('if_modified_since'); diff --git a/src/Symfony/Component/HttpKernel/Tests/HttpCache/HttpCacheTest.php b/src/Symfony/Component/HttpKernel/Tests/HttpCache/HttpCacheTest.php index 4eb1437144..68d2b88ed6 100644 --- a/src/Symfony/Component/HttpKernel/Tests/HttpCache/HttpCacheTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/HttpCache/HttpCacheTest.php @@ -799,6 +799,21 @@ class HttpCacheTest extends HttpCacheTestCase $this->assertTraceNotContains('miss'); } + public function testValidatesCachedResponsesUseSameHttpMethod() + { + $test = $this; + + $this->setNextResponse(200, array(), 'Hello World', function ($request, $response) use ($test) { + $test->assertSame('OPTIONS', $request->getMethod()); + }); + + // build initial request + $this->request('OPTIONS', '/'); + + // build subsequent request + $this->request('OPTIONS', '/'); + } + public function testValidatesCachedResponsesWithETagAndNoFreshnessInformation() { $this->setNextResponse(200, array(), 'Hello World', function ($request, $response) {