gpt4 book ai didi

caching - 用于移动设备的 Varnish 缓存

转载 作者:行者123 更新时间:2023-12-03 17:45:58 27 4
gpt4 key购买 nike

我正在使用带有以下内容的 Varnish 缓存来检查移动/平板电脑设备:

sub device_detection
{
set req.http.X-Device = "pc";

if(req.http.User-Agent ~ "iP(hone|od)" || req.http.User-Agent ~ "Android" || req.http.User-Agent ~ "Symbian" || req.http.User-Agent ~ "^BlackBerr$
{
set req.http.X-Device = "mobile";
}

if(req.http.User-Agent ~ "^PalmSource")
{
set req.http.X-Device = "mobile";
}

if(req.http.User-Agent ~ "Build/FROYO" || req.http.User-Agent ~ "XOOM" )
{
set req.http.X-Device = "pc";
}

if((req.http.Cookie ~ "(force_desktop)"))
{
set req.http.X-Device = "pc";
}

if((req.http.Cookie ~ "(force_mobile)"))
{
set req.http.X-Device = "mobile";
}
}

这成功设置了一个新 header ,然后我可以使用以下方法在 PHP 中检查:
if(isset($headers['X-Device']) && $headers['X-Device'] == "mobile")
{
// do mobile stuff here
}

我的问题是此 header 不构成缓存哈希的一部分(如果这是正确的术语)。因此,如果首先在移动设备上查看它,那么无论设备如何,都会缓存所有 future 的请求。如果第一个请求来自桌面设备,反之亦然。

如何使这个 header 成为散列的一部分,以便我可以可靠地从 PHP 获取它,同时仍然使用 mobile 缓存站点的两个版本和 pc ?

最佳答案

这是您需要执行此操作的 VCL 片段:

sub vcl_hash {
if (req.http.X-Device) {
hash_data(req.http.X-Device);
}
}

这在官方 Varnish 文档中有介绍:

https://www.varnish-cache.org/docs/3.0/tutorial/devicedetection.html

关于caching - 用于移动设备的 Varnish 缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16289808/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com