proxy代理   norton 诺顿病毒库   代理列表   search FTP搜索   whois IP地理位置   blog 追求完美  
soft 软件   firefox WEB浏览器   免费域名   typeset 假古文   AntiVirus 反病毒   ipcn 站点导航  

« 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 的大写问题
本blog WWW

Posted by windtear at July 10, 2008 9:25 PM

本站使用中的任何问题,请与 windtear @ windtear.net 联系
Copyright© 1999-2024 Windtear. All rights reserved.