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

4

谷歌和雅虎都建议使用无cookie子域名配置来加速网页加载。在Tomcat独立模式下如何配置“无cookie子域名”(这个问题不是关于如何使用Apache以无cookie方式提供静态内容,而是关于如何在Tomcat独立模式下实现)?

请注意,我不关心是否支持“If-Modified-Since”过滤器或支持gzipping的过滤器:我正在提供的静态内容可以永久缓存(或名称会更改),并且已经是压缩数据(因此gzip只会减慢传输)。

我需要两个不同的Tomcat Web应用程序吗?(一个“带cookie”的和一个“无cookie”的)

我需要两个不同的servlet吗?(目前我只有一个调度/控制器servlet。)

为什么“常规”链接(比如静态图片)在与主Web应用程序相同的域上将以“带cookie”的方式被调用,在子域上将以“无cookie”的方式被调用?

我不完全理解发生了什么:是浏览器决定是否向查询附加Cookie?如果是这样,为什么它不会向“无cookie”子域上的静态查询附加Cookie。

欢迎提供任何背后的例子 :)

2个回答

3

您只需要设置另一个域名,它可以指向相同的Web应用程序。只需确保在此新域上不要丢弃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。


@ZZ Coder: 啊,我的问题没有表述清楚。我知道如何创建子域名。是关于“只需确保您在此新域上(不)放置cookie”这一点我不明白:是什么决定我是否要在该域上“放置”cookie?浏览器吗?它如何决定在一个域上“放置”cookie而在另一个域上不放置呢?:) - SyntaxT3rr0r

2
我在这里发布了相关内容:URL/Subdomain rewrites (htaccess) 我认为你可能理解反了(或者很有可能是我理解反了)。为了澄清,如果您正在实现无cookie的子域,并且具有www的基本URL,那么在这种情况下,cookie会在www上设置。例如:一个主要的cookie设置器是Google Analytics,因此在我的网站上设置其脚本时,它看起来像这样:
`var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'analytics-acc-#],

['_setDomainName', '[www.valpocreative.com]2'],

['_trackPageview']);

您可以看到,我将我的主域设置为www,如果我理解有误,请纠正。在我的情况下,我需要将www重定向到非www子域,而不是反过来。这也是我在cpanel上进行的cname设置(cname=“cdn”指向www.domain.com)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接