« 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