【问题标题】:Apache mod_cache: Vary cache based on cookie valuesApache mod_cache:根据 cookie 值改变缓存
【发布时间】:2015-04-28 07:23:53
【问题描述】:

目前,我正在使用 mod_cache 来缓存 Web 应用程序的页面详细信息。

我的缓存根据 User-Agent 和 Accept-Language 有所不同,因为这些情况有不同的有效负载。

Vary: User-Agent, Accept-Language

我们计划在每个页面上都有特定于区域的信息,但这是我们试图确定缓存策略的地方。

我们有一个 cookie,它持续指示我们地理定位的区域,但显然缓存不会根据这个 cookie 变化。

是否可以根据某些 cookie 或标头的而有所不同? (注意我说的是某些 cookie,因为我们不希望会话标识符与此冲突) - 类似于正则表达式匹配:

location=(.+?);

【问题讨论】:

  • 原则上假设访问者的 PC 上没有 cookie - 它们可能被禁用、删除或其他原因。另一个想法是使用地理定位,有一些免费的 php 库。

标签: apache caching cookies


【解决方案1】:

使用 Apache 可以做到这一点。它可以解析cookie值并将其传递给自定义标头,然后您需要通过此标头进行更改:

# Set languageC cookie value to environment variable "siteLanguage"
RewriteCond %{HTTP_COOKIE} ^.*lunetics_locale.*$ [NC]
RewriteCond %{HTTP_COOKIE} (?:^|;\s*)lunetics_locale=([^;]*) [NC]
RewriteRule ^(.*)$ - [env=siteLanguage:%1]

# If no languageC cookie present. Set "siteLanguage" environment variable to "en"
RewriteCond %{HTTP_COOKIE} !^.*lunetics_locale.*$ [NC]
RewriteRule ^(.*)$ - [env=siteLanguage:en]

# Set enviroment variable "siteLanguage" value to custom header "SiteLanguage"
RequestHeader set X-Language "%{siteLanguage}e" env=siteLanguage

并将Vary X-Language 添加到您的响应标头中。 我不确定这是不是最好的方法,我有相关的问题和问题:Is it possible to vary page caches (to have cache versions) with the same url and different cookie value (language)?

【讨论】:

    猜你喜欢
    • 2011-10-21
    • 2011-07-18
    • 1970-01-01
    • 2015-03-17
    • 2013-10-04
    • 1970-01-01
    • 1970-01-01
    • 2021-09-24
    • 2016-08-23
    相关资源
    最近更新 更多