Php Http缓存根据自定义标头的不同而不同

Php Http缓存根据自定义标头的不同而不同,php,symfony,cache-control,Php,Symfony,Cache Control,我正在研究http缓存通过使用Vary header,我的网站必须提供基于用户首选货币的响应内容,他们可以从我网站上的货币选择中选择显示的货币,我正在使用会话存储他们选择的货币,而不是在url中使用查询参数 我想基于货币缓存响应,我为每个响应创建了自定义头x-currency:currency\u value,并设置vary头vary:x-currency,告诉http缓存按货币创建不同的缓存内容 但我不明白,当用户向http缓存发送请求时,请求头不包括在自定义头x-currency:curre

我正在研究http缓存通过使用Vary header,我的网站必须提供基于用户首选货币的响应内容,他们可以从我网站上的货币选择中选择显示的货币,我正在使用会话存储他们选择的货币,而不是在url中使用查询参数

我想基于货币缓存响应,我为每个响应创建了自定义头
x-currency:currency\u value
,并设置
vary
vary:x-currency
,告诉
http缓存
按货币创建不同的缓存内容

但我不明白,当用户向
http缓存发送请求时,请求头不包括在自定义头
x-currency:current_value
中,那么
http缓存如何知道一种首选货币来为用户提供正确的响应

我还考虑了vary on cookie,但它似乎为唯一用户提供缓存响应,而不是为具有相同首选货币的用户组提供缓存响应


请告诉我我误解了什么,或者有什么其他的解决办法来达到这个目的

您误解了
Vary
标题应显示的标题:

描述一个应用程序的部分 请求消息,方法、主机头字段和 请求目标,可能会影响源服务器的进程 选择并表示此响应

在这种情况下,你说你:

使用会话存储他们选择的货币

这意味着您选择的响应受发送用户会话的
Cookie
头的影响。因此,您应发送:

Vary: cookie
在回答中

作为设计要点,您提到您选择了会话存储:

而不是在url中使用查询参数

并提及:

我还考虑了vary on cookie,但它似乎为唯一用户提供缓存响应,而不是为具有相同首选货币的用户组提供缓存响应

你说得对。使用查询参数将更容易缓存,因为对相同货币的请求可以重用
Vary:cookie
本质上与
Cache control:private
相同,因为没有两个用户拥有相同的会话cookie