1

我的会话 cookie 有点长(大约 700 字节),因为它包含各种加密的用户信息等等。我可以做一些事情来缩小那个尺寸,我也在研究这个角度,但这是另一个话题。

我的问题是我不喜欢这个 cookie 在每个 HTTP 请求上被发送到服务器的方式。包括对 JPG 图像、CSS 文件和静态 Javascript 文件的请求。由于这些请求不需要 cookie,我觉得它可能会减慢页面加载时间,因为这是 700 字节 x 页面加载的资源数量。显然,这些文件会被缓存,但我仍然希望我的页面能够尽可能快速流畅地加载。

我能想到的一个解决方案是将我所有的静态内容放在另一个子域上,例如cdn.myserver.com/images/and cdn.myserver.com/scripts/,并将 cookie-path 设置为仅 include www.myserver.com。我相信这会奏效,但它会使开发和登台环境复杂化。我可能最终不得不根据代码运行的环境动态生成 URL。

我的问题:

除了上述解决方案之外,还有什么方法可以防止通过网络发送某些 HTTP 请求(例如图像、脚本和样式资源)的 cookie?

我在 .NET 堆栈上运行,使用 IIS7.5 作为 Web 服务器。

4

2 回答 2

3

从服务器的角度来看,您无能为力。当您的服务器 (IIS) 或您的框架(ASP.NET 或其他)收到请求时,cookie 已经发送。

你提到的绝对有效,引用RFC 2109(“HTTP 状态管理机制”)(强调我的):

主机名可以指定为 IP 地址或 FQHN 字符串。有时我们将一个主机名与另一个进行比较。主机 A 的名称域匹配主机 B 的 if

  • 两个主机名都是 IP 地址,并且它们的主机名字符串完全匹配;或者
  • 两个主机名都是 FQDN 字符串,并且它们的主机名字符串完全匹配;或者
  • A 是 FQDN 字符串,格式为 NB,其中 N 是非空名称字符串,B 格式为 .B',B' 是 FQDN 字符串。(因此,xycom 域匹配 .y.com 而不是 y.com。)

请注意,域匹配不是交换操作:abccom 域匹配 .c.com,但不是相反。

因此,创建一个单独的子域,同时专门将您的 cookie 键入不同的子域将起作用。

请注意,这样做是为了提高页面速度而普遍接受的做法,Stack Overflow 自 2009 年底以来一直在这样做

为了降低您的登台和开发环境的复杂性,我建议您遵循此指南;将内容放在单独的域中意味着您不必为任何这些环境做任何不同的事情。

于 2012-10-29T21:40:56.660 回答
1

据我所知,唯一的解决方案是使用您提到的无 cookie 域或子域。但请记住,域或子域应该是指向您的主域的规范 DNS 名称。

为了简化开发和暂存环境,我建议您将CombineAndMinify组件与您的 ASP.net 项目一起使用,这样它将在后台满足您的需求,并且它还有一些您可能喜欢使用的其他功能。
另外它有调试|发布模式,所以你可以在调试的时候绕过它。

于 2012-10-29T21:48:30.647 回答