Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Conversation

philpichet
Copy link
Contributor

Q A
Branch? 6.4
Bug fix? yes
New feature? no
Deprecations? no
Issues -
License MIT

We can have multiple vary on a response :

< HTTP/1.1 200 OK
< Content-Type: application/json
< Vary: Accept-Encoding
< Vary: Foo
< Content-Length: 1234

But if we make several calls with different value for the header Foo, we don't check them and remove the previous responses.

This fix has the purpose to check all values to keep previous call

Releated to #14635

@carsonbot
Copy link

Hey!

I see that this is your first PR. That is great! Welcome!

Symfony has a contribution guide which I suggest you to read.

In short:

  • Always add tests
  • Keep backward compatibility (see https://symfony.com/bc).
  • Bug fixes must be submitted against the lowest maintained branch where they apply (see https://symfony.com/releases)
  • Features and deprecations must be submitted against the 7.4 branch.

Review the GitHub status checks of your pull request and try to solve the reported issues. If some tests are failing, try to see if they are failing because of this change.

When two Symfony core team members approve this change, it will be merged and you will become an official Symfony contributor!
If this PR is merged in a lower version branch, it will be merged up to all maintained branches within a few days.

I am going to sit back now and wait for the reviews.

Cheers!

Carsonbot

@philpichet
Copy link
Contributor Author

After some research, the 'best' practice is to send only one raw with all value comma separated. But I found that Symfony handle some values of Vary by default.

Should I also open a PR to send only one row ?

@philpichet philpichet force-pushed the fix/check-all-values-vary-headers branch from c48e839 to d3d1637 Compare August 25, 2025 11:29
@nicolas-grekas nicolas-grekas changed the title [HttpKernel] Handle an array vary header in the http cache store for … [HttpKernel] Handle an array vary header in the http cache store for write Sep 1, 2025
src/Symfony/Component/HttpKernel/HttpCache/Store.php Outdated Show resolved Hide resolved
@philpichet philpichet force-pushed the fix/check-all-values-vary-headers branch from b34ea1c to 579e1a9 Compare September 1, 2025 18:46
src/Symfony/Component/HttpKernel/HttpCache/Store.php Outdated Show resolved Hide resolved
src/Symfony/Component/HttpKernel/HttpCache/Store.php Outdated Show resolved Hide resolved
@philpichet philpichet force-pushed the fix/check-all-values-vary-headers branch from 579e1a9 to fc7da90 Compare September 5, 2025 19:06
@philpichet philpichet force-pushed the fix/check-all-values-vary-headers branch from fc7da90 to 694cc85 Compare September 5, 2025 19:10
@philpichet
Copy link
Contributor Author

Should I remove this part

This code is partially based on the Rack-Cache library by Ryan Tomayko,
 * which is released under the MIT license.

that break the CI ?

@nicolas-grekas
Copy link
Member

That's a false-positive, it should be ignored. Thanks for the follow up, I'll have a look ASAP.

src/Symfony/Component/HttpKernel/HttpCache/Store.php Outdated Show resolved Hide resolved
@philpichet
Copy link
Contributor Author

I think we can remove the check part on headers.
The function requestMatch do it for use with this

$v1 = $env1[$key] ?? null;
            $v2 = $env2[$key] ?? null;
            if ($v1 !== $v2) {
                return false;
            }
  • case 1:
    Two request with the header Foo: foo returning the same headers ( not specially the same body)
< HTTP/1.1 200 OK
< Content-Type: application/json
< Vary: Accept-Encoding
< Vary: Foo
< Content-Length: 1234
```
$v1 === $v2 : remove old response and keep last

- case 2: 
Two request with the header request1 `Foo: foo` and request2 `Foo:bar`

< HTTP/1.1 200 OK
< Content-Type: application/json
< Vary: Accept-Encoding
< Vary: Foo
< Content-Length: 1234

$v1 !== $v2 : remove old response and keep last


- case 3: 
Two requests with on first request `Foo:bar` and last `FooBar: fooBar` and  responses : 
1 : 

< HTTP/1.1 200 OK
< Content-Type: application/json
< Vary: Accept-Encoding
< Vary: Foo
< Content-Length: 1234

2 : 

< HTTP/1.1 200 OK
< Content-Type: application/json
< Vary: Accept-Encoding
< Vary: FooBar
< Content-Length: 1234

$v1 = null and $v2 = 'fooBar`
$v1 !== $v2 :keep previous response as Foobar don't exist. 

What do you think of this ? Am I missing something in my reflection ? 

@nicolas-grekas
Copy link
Member

Please update the patch as you see fit, I prefer reviewing patches :)

@nicolas-grekas nicolas-grekas force-pushed the fix/check-all-values-vary-headers branch from dfd8050 to c818606 Compare September 12, 2025 15:07
@nicolas-grekas
Copy link
Member

Thank you @philpichet.

@nicolas-grekas nicolas-grekas merged commit c6e2837 into symfony:6.4 Sep 12, 2025
7 of 11 checks passed
@p-pichet
Copy link

Thank you @philpichet.

Thanks you for the review

This was referenced Sep 27, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

Morty Proxy This is a proxified and sanitized view of the page, visit original site.