我的会话cookie有点长(约700字节),因为它包含各种加密的用户信息,而不是。我可以采取一些措施来减小这个尺寸,我也正在研究这个角度,但这是另一个话题。
我的问题是我不喜欢在每个HTTP请求中如何将cookie发送到服务器;包括对JPG图像,CSS文件和静态Javascript文件的请求。由于这些请求不需要cookie,我觉得它可能会减慢页面加载时间,因为这是700字节x页面加载的资源数量。显然,这些文件会被缓存,但是我仍然希望我的页面尽可能快速,顺畅地加载。
我能想到的一个解决方案是将所有静态内容放在另一个子域上,例如cdn.myserver.com/images/
和cdn.myserver.com/scripts/
,并将cookie路径设置为仅包含{{1} }。我相信这会起作用,但它会使开发和登台环境复杂化。我可能最终必须根据运行代码的环境动态生成URL。
我的问题:
除了上面的解决方案,有没有办法阻止cookie通过网络发送某些HTTP请求,如图像,脚本和样式资源?
我在.NET堆栈上运行,IIS7.5作为Web服务器。
答案 0 :(得分:3)
从服务器的角度来看,你无法做任何事情;当您的服务器(IIS)或您的框架(ASP.NET或其他)收到请求时,cookie已经发送。
你提到的内容绝对有效,引用RFC 2109 ("HTTP State Management Mechanism")(强调我的):
主机名称可以指定为IP地址或FQHN字符串。有时我们将一个主机名与另一个主机名进如果
,主机A的名称域名与主机B匹配
- 两个主机名都是IP地址,其主机名字符串完全匹配;或
- 两个主机名都是FQDN字符串,它们的主机名字符串完全匹配;或
- A是FQDN字符串,格式为NB,其中N是非空名称字符串,B的格式为.B',B'是FQDN字符串。 (所以,x.y.com域名匹配.y.com但不是y.com。)
请注意,域匹配不是可交换操作: a.b.c.com域名匹配.c.com,但不是相反。
因此,创建一个单独的子域,同时专门将您的cookie键入不同的子域将会有效。
请注意,它是commonly accepted practice to do this in order to increase page speed和Stack Overflow has been doing this since late 2009。
为了降低登台和开发环境的复杂性,我建议您遵循以下要求;将内容放在单独的域上意味着您不必为任何这些环境做任何不同的事情。
答案 1 :(得分:1)
据我所知,唯一的解决方案是使用您提到的无Cookie域或子域。 但请记住,域或子域应该是指向主域的Canonical DNS Name。
为了简化开发和登台环境,我建议您使用CombineAndMinify组件以及ASP.net项目,这样它将在后台满足您的需求,并且还有一些您可能喜欢的其他功能使用它们 另外它有调试版本,所以你可以在调试时绕过它。