Google和Yahoo!给出的提示之一加速网页加载是将无Cookie子域配置为服务器静态内容。
如何在独立模式下使用Tomcat配置“无cookie子域”(这个问题不是关于如何使用Apache以无cookie方式提供静态内容,而是关于如何在Tomcat-standalone模式下执行此操作)?
请注意,我不关心支持If-Modified-Since
的过滤器,也不关心支持gzipping的过滤器:我所服务的静态内容永远是可缓存的(或者它的名称会改变)并且它已经是压缩数据(所以gzip只会减慢转移速度。)
我需要两个不同的Tomcat webapps吗? (一个“cookiefull”和一个“cookieless”)
我需要两个不同的servlet吗? (截至目前,我只有一个调度程序/控制器servlet)。
为什么静态图像的“常规”链接会以cookiefull的方式调用,当它与主webapp在同一个域中时,然后以“无cookie”方式调用在子域?
我不确切地知道发生了什么:是否是浏览器决定是否将cookie附加到查询中?如果是这样,为什么不将cookie附加到“无cookie”子域上的静态查询中。
欢迎任何关于幕后发生的事情的例子:)
答案 0 :(得分:3)
您只需要设置其他域名即可。它可以指向相同的webapps。只需确保不要在这个新域上删除cookie。
例如,您的主站点是
www.example.com
您可以拥有其他域名
static.example.com
为您的无cookie静态资源。他们可以指向相同的主机,转到相同的Servlet。您只需要在应用中确保不丢弃这些静态内容的Cookie。
编辑:假设您的静态内容由Tomcat中的默认servlet提供,您不必执行任何操作。它不会为您丢弃cookie,因此您的新域名应该不含cookie。
如果必须在同一个servlet中处理静态内容,可以执行类似这样的操作,
if (!request.getServerName().equals("static.example.com")) {
// Drop cookie
}
此示例假定您不在根域(.example.com)中删除cookie。如果你这样做,你必须得到另一个域,例如examplecdn.com。
答案 1 :(得分:2)
我在这里发布了这个:URL/Subdomain rewrites (htaccess)
如果您实施的是无Cookie子域名,那么您可能会向后退一步(或者很可能会这样做)澄清一下有一个www的基本URL。至少在这种情况下,cookie设置在www上,例如:一个主要的cookie setter是谷歌分析,所以在我的网站上设置他们的脚本时它看起来像这样:
`var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'analytics-acc-#],
['_setDomainName', '[
www.valpocreative.com] 2'],
['_trackPageview']);
`
你可以在这里看到我将我的主域名设置为www,纠正我如果我错了我的情况我需要将www重定向到非www子域名&而不是相反。这也是我的cpanel上的cname设置(cname =“cdn”指向www.domain.com)