我正在学习 cookie,我想知道在编写依赖 cookie 来存储状态的 Web 应用程序时浏览器支持。
对于每个域/网站,可以向浏览器发送多少个 cookie,大小是多少?
如果发送和存储多个 cookie,会影响性能吗?
我正在学习 cookie,我想知道在编写依赖 cookie 来存储状态的 Web 应用程序时浏览器支持。
对于每个域/网站,可以向浏览器发送多少个 cookie,大小是多少?
如果发送和存储多个 cookie,会影响性能吗?
每个域不超过 50 个 cookie,每个 cookie 最多 4 KB(甚至总共 4 KB,请参阅Iain 的回答)。在 IE 6 上,它曾经是每个域 20 个 cookie。
通常建议在服务器上保留状态,并仅将 cookie 用于会话跟踪。它们与每个请求一起发送,因此如果目的是保持会话状态,它们会形成不必要的开销。
如果您确实想在客户端上保持状态,并且可以使用 JavaScript 来做到这一点,那么有一些选项。直接使用各种存储 API 或查找抽象出细节的包装库。
客户端存储选项:
不推荐使用的存储选项:
因此,通常对于客户端存储,它取决于用例:
Cookie 大小限制
如果要支持大多数浏览器,则每个域不要超过50 个 cookie,每个域不超过4093 字节。也就是说,所有 cookie 的大小不应超过 4093 字节。
性能思考
对域的每个请求都会发送 Cookie,其中包括图像。为了论证起见,假设您的网站上有 30 个资源,并且有 4093 字节的 cookie。这意味着用户正在上传 122Kb 的数据。因此,如果我有一个 1Mbit 的上传连接,则至少需要 1 秒。
如果您想查看我创建的 cookie 测试页面,或了解更多相关信息,请查看Browser Cookie Limits。
首先,我建议你不要担心这个问题。有足够的空间来序列化大量的标识符。
其次,它不是由存储的,web-server
而是由存储的web-domain
——例如,www.google.com
而不是为 Google 域服务的 100 台不同的物理服务器。
第三,如果你不得不担心知道有两个可能的 cookie 标头。这些 cookie 标头的大小由浏览器软件限制决定。
设计讨论
您不想使用 cookie 标头来发送有关客户端会话的详细信息。例如,如果您正在构建电子邮件前端,请不要尝试将客户端正在输入的电子邮件填充到 cookie 中。相反,您将向客户端发送一个代表他的身份+会话的 cookie:您针对此身份存储所有会话数据。每个 cookie 标头可以存储数十个标识符(4-16 个字节),没有人需要超过其中的 4 个。cookie 数据(作为整数)倾向于被编码为base64,这会增加字节数。
表现
您的浏览器会向 Web 服务器发送大量标头。cookie 只是另外 100-1000 字节(大部分接近 100)。在这两个极端情况下,将这些发送到 Web 服务器只需要一小部分时间——当然,当它们被放入上下文中时。您应该记住,网络是建立在基于文本的协议之上的。
如果您担心在每个服务器请求上发送大型 cookie 会导致性能下降,一个好主意可能是将所有静态文件(图像、CSS 等)放入站点的子域中,例如http://static.yourdomain.com
.
这样,每当您的站点www.yourdomain.com
请求静态文件(如图像)时,浏览器就不会再将 cookie 与 HTTP 请求一起发送。
来源:http: //developer.yahoo.com/performance/rules.html#cookie_free
如果您正在对网站进行编程,最好不要在 cookie 中存储太多内容,因为每次用户从您的站点请求页面时,cookie 都会发送到服务器。一个更好的解决方案是在 cookie 中存储一个唯一的 id,然后让服务器根据该唯一的 id 从数据库或文件存储中提取所需的信息。不幸的是,该解决方案导致人们担心您正在跟踪他们的内容,因此您可能希望在您的网站某处表达“cookie 政策”,说明您为什么在他们的浏览器上放置 cookie 以及您做什么和不做什么不要跟踪他们。
4096 字节 然而,真正的问题出现在您尝试设置大尺寸的 cookie 时。标准规定浏览器必须支持每个 cookie 至少 4096 字节。IE6 不这样做。相反,对于来自域的所有 cookie,它的最大大小似乎为 4096 字节。
这是一个关于 cookie 限制的非常好的网站,可让您测试浏览器:
CDN 前来救援。
您可以将静态内容卸载到 CDN 或 Amazon S3 等文件存储服务,只要您没有在从您的顶部接收 cookie 的子域上设置 CNAME 记录,保持静态文件请求无 cookie 应该很容易级域。
This Blog Post is a good read for on Serving Static Content from a Cookieless Domain and how can we adopt this best practice to boost our performance in the client side.