Skip to content

Commit 62f9250

Browse files
ycerutonicolas-grekas
authored andcommitted
[HttpFoundation] Do not set the default Content-Type based on the Accept header
1 parent 67d0196 commit 62f9250

File tree

3 files changed

+18
-3
lines changed

3 files changed

+18
-3
lines changed

Request.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1590,7 +1590,9 @@ public function isNoCache()
15901590
* Gets the preferred format for the response by inspecting, in the following order:
15911591
* * the request format set using setRequestFormat
15921592
* * the values of the Accept HTTP header
1593-
* * the content type of the body of the request.
1593+
*
1594+
* Note that if you use this method, you should send the "Vary: Accept" header
1595+
* in the response to prevent any issues with intermediary HTTP caches.
15941596
*/
15951597
public function getPreferredFormat(?string $default = 'html'): ?string
15961598
{

Response.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -275,7 +275,7 @@ public function prepare(Request $request)
275275
} else {
276276
// Content-type based on the Request
277277
if (!$headers->has('Content-Type')) {
278-
$format = $request->getPreferredFormat(null);
278+
$format = $request->getRequestFormat(null);
279279
if (null !== $format && $mimeType = $request->getMimeType($format)) {
280280
$headers->set('Content-Type', $mimeType);
281281
}

Tests/ResponseTest.php

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -497,12 +497,25 @@ public function testPrepareDoesNothingIfRequestFormatIsNotDefined()
497497
$this->assertEquals('text/html; charset=UTF-8', $response->headers->get('content-type'));
498498
}
499499

500+
/**
501+
* Same URL cannot produce different Content-Type based on the value of the Accept header,
502+
* unless explicitly stated in the response object.
503+
*/
504+
public function testPrepareDoesNotSetContentTypeBasedOnRequestAcceptHeader()
505+
{
506+
$response = new Response('foo');
507+
$request = Request::create('/');
508+
$request->headers->set('Accept', 'application/json');
509+
$response->prepare($request);
510+
511+
$this->assertSame('text/html; charset=UTF-8', $response->headers->get('content-type'));
512+
}
513+
500514
public function testPrepareSetContentType()
501515
{
502516
$response = new Response('foo');
503517
$request = Request::create('/');
504518
$request->setRequestFormat('json');
505-
$request->headers->remove('accept');
506519

507520
$response->prepare($request);
508521

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy