« ipcn proxy 暂时关闭 | Main | apache 哪个版本开始 gzip压缩版的 ETag 最后加个 -gzip »
July 10, 2008
[squid patch] 解决 Accept-Encoding 不一致造成的多份缓存问题
|
版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明。 https://windtear.net/2008/07/squid_patch_accept-encoding_multi_cache.html 解决的是 IE Firefox 搜索引擎spider 的 Accept-Encoding 不一致造成的多份缓存问题
MSIE 的 Accept-Encoding 是 gzip, deflate
Firefox Googlebot 的是 gzip,deflate (之间没有空格)
多份缓存说明穿透的风险 还是有些危险的
--- squid-2.6.STABLE21.orig/src/http.c 2008-04-02 09:03:47.000000000 +0800
+++ squid-2.6.STABLE21/src/http.c 2008-07-10 21:17:26.000000000 +0800
@@ -387,14 +387,20 @@
}
strListAdd(&vstr, name, ',');
hdr = httpHeaderGetByName(&request->header, name);
- safe_free(name);
value = strBuf(hdr);
if (value) {
+ if (strcmp(name, "accept-encoding") != 0) {
value = rfc1738_escape_part(value);
stringAppend(&vstr, "=\"", 2);
stringAppend(&vstr, value, strlen(value));
stringAppend(&vstr, "\"", 1);
+ } else {
+ if(strstr(value,"gzip") != NULL || strstr(value,"deflate") != NULL) {
+ stringAppend(&vstr, "=\"gzip,\%20deflate\"", 18);
+ }
+ }
}
+ safe_free(name);
stringClean(&hdr);
}
safe_free(request->vary_hdr);
这里不考虑 gzip deflate 的大写问题
|
Posted by windtear at July 10, 2008 9:25 PM