Java(Tomcat):如何配置无cookie子域以提供静态内容

时间:2010-05-21 17:12:01

标签: java tomcat cookieless

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”子域上的静态查询中。

欢迎任何关于幕后发生的事情的例子:)

2 个答案:

答案 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)