Movatterモバイル変換


[0]ホーム

URL:


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

Sign up
Appearance settings

[HttpKernel] Add anoStore argument to the# attribute#59301

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Merged
fabpot merged 1 commit intosymfony:7.3fromsmnandre:cache-no-store
Jan 2, 2025

Conversation

smnandre
Copy link
Member

QA
Branch?7.3
Bug fix?no
New feature?yes
Deprecations?no
IssuesFix #...
LicenseMIT

This PR introduces anoStore argument to the#[Cache] attribute, allowing controllers to easily set theno-store directive.

useSymfony\Component\HttpKernel\Attribute\Cache;#[Cache(noStore:true)]finalclass MyController{publicfunction __invoke():Response    {// This response will NOT be stored in ANY cache

When set totrue, it also supersedes thepublic /private value.


I recently encountered issues with the back-forward cache (bfcache), a browser feature that stores entire pages in memory to make navigating back and forth faster. It can cause problems when pages rely on JavaScript initialization, dynamic content, or state-changing resources. For example, an edit form might reappear after submission just by hitting “Back” (even after a redirection), with no HTTP request being triggered—leading to unexpected behavior and frustrating the user.

Standard cache headers likeCache-Control: no-cache don’t stop this behavior. Theonly reliable way to disable the bfcache across all major browsers is by using theno-store directive.

useSymfony\Component\HttpKernel\Attribute\Cache;finalclass MyController{    #[Cache(public:false)]publicfunctionprivate():Response    {// ❌ This page can (and probably will) be cached in the browser bfc    }        #[Cache(noStore:true)]publicfunctionnotStored():Response    {// ✅ This page will NOT be cached -- not even in the browser bfc    }}

TheHTTP cache documentation states that all options available for theResponse::setCache() method can also be used with the#[Cache] attribute. However, theno-store option is currently missing.

Note

This is a very "raw" implementation.. not sure about it or potential consequences I might not have considered... but I wanted to start the discussion :)


Resources:

GromNaN and OskarStark reacted with thumbs up emoji
@carsonbotcarsonbot added this to the7.3 milestoneDec 26, 2024
@carsonbotcarsonbot changed the title[HttpKernel] Add anoStore argument to the#[Cache] attribute[Cache][HttpKernel] Add anoStore argument to the# attributeDec 26, 2024
@chalasrchalasr changed the title[Cache][HttpKernel] Add anoStore argument to the# attribute[Cache][HttpKernel] Add anoStore argument to the#[Cache] attributeDec 26, 2024
@carsonbotcarsonbot changed the title[Cache][HttpKernel] Add anoStore argument to the#[Cache] attribute[Cache][HttpKernel] Add anoStore argument to the# attributeDec 29, 2024
@smnandre
Copy link
MemberAuthor

When set to true, it also supersedes the public / private value.

I expected a hotter debate on this to be honest.... 😅 (not that iwant a debate)

tucksaun reacted with laugh emoji

@fabpot
Copy link
Member

Thank you@smnandre.

@fabpotfabpot merged commit78648f0 intosymfony:7.3Jan 2, 2025
1 check passed
@OskarStarkOskarStark changed the title[Cache][HttpKernel] Add anoStore argument to the# attribute[Cache][HttpKernel] Add anoStore argument to the#[Cache] attributeJan 2, 2025
@carsonbotcarsonbot changed the title[Cache][HttpKernel] Add anoStore argument to the#[Cache] attribute[HttpKernel] Add anoStore argument to the# attributeMar 21, 2025
@fabpotfabpot mentioned this pull requestMay 2, 2025
fabpot added a commit that referenced this pull requestMay 30, 2025
…en no-store is set (alexander-schranz)This PR was submitted for the 7.3 branch but it was squashed and merged into the 7.4 branch instead.Discussion----------[HttpKernel] Do not superseed private cache-control when no-store is set| Q             | A| ------------- | ---| Branch?       | 7.3| Bug fix?      | no| New feature?  | no <!-- please update src/**/CHANGELOG.md files -->| Deprecations? | no <!-- please update UPGRADE-*.md and src/**/CHANGELOG.md files -->| Issues        | Fix #... <!-- prefix each issue number with "Fix #", no need to create an issue if none exists, explain below instead -->| License       | MITI don't think its a good idea to superseed the private cache control via the new noStore option*#59301If somebody want to set it to `private` they should explicit do it. via `#[Cache(private: true, noStore: true)]`. I would avoid this non transparent changes in general.I had usecases in the past where the response is still public for the symfony cache and varnish public and the no store was only for the third party caches and in browser caches. This specially come into play with usage of `ESI` where the general page is cached, but no-store set to not allow back forwards caches, because of the ESI content./cc `@smnandre`Commits-------7e6e33e [HttpKernel] Do not superseed private cache-control when no-store is set
nicolas-grekas pushed a commit that referenced this pull requestMay 30, 2025
…o-store is set (alexander-schranz)Discussion----------[HttpKernel] Do not superseed private cache-control when no-store is set| Q             | A| ------------- | ---| Branch?       | 7.3| Bug fix?      | yes| New feature?  | no| Deprecations? | no| Issues        | -| License       | MITI don't think its a good idea to superseed the private cache control via the new noStore option*#59301If somebody want to set it to `private` they should explicit do it. via `#[Cache(private: true, noStore: true)]`. I would avoid this non transparent changes in general.I had usecases in the past where the response is still public for the symfony cache and varnish public and the no store was only for the third party caches and in browser caches. This specially come into play with usage of `ESI` where the general page is cached, but no-store set to not allow back forwards caches, because of the ESI content./cc `@smnandre`Commits-------7e6e33e [HttpKernel] Do not superseed private cache-control when no-store is set
Sign up for freeto join this conversation on GitHub. Already have an account?Sign in to comment
Reviewers

@fabpotfabpotfabpot approved these changes

@GromNaNGromNaNGromNaN approved these changes

@chalasrchalasrchalasr approved these changes

Assignees
No one assigned
Projects
None yet
Milestone
7.3
Development

Successfully merging this pull request may close these issues.

6 participants
@smnandre@fabpot@GromNaN@chalasr@nicolas-grekas@carsonbot

[8]ページ先頭

©2009-2025 Movatter.jp