javascript - DOM 对象 document.cookie 属性是如何构建的?

标签 javascript cookies proxy squid varnish

当您看到一个网页时,谁构建了 DOM 文档?严格来说是服务器打印 HTML 吗?浏览器如何参与?我特别想知道 document.cookie 属性是如何填充的。

A) 服务器填充document.cookie

  1. 浏览器在用户的硬盘驱动器中存储 foobar.com 的 cookie。
  2. 下次访问 foobar.com 时,浏览器会将 foobar.com 的所有 cookie 呈现给服务器。
  3. 服务器基于这些 cookie 构建 DOM document.cookie 属性。

B) 浏览器填充document.cookie

  1. 浏览器在用户的硬盘驱动器中存储 foobar.com 的 cookie。
  2. 下次访问 foobar.com 时,服务器会继续构建和提供 HTML。
  3. 浏览器获取硬盘驱动器上的所有 cookie 并填充 document.cookie 之前或之后的某处。

我对这些信息很感兴趣,因为我正在研究 Varnish 和 Squid 等代理服务器上的 cookie 剥离如何影响 cookie。如果 document.cookie 是由服务器构建的(上面的选项 A),那么我会假设代理剥离 cookie 会影响 document.cookie 属性。然而,我倾向于认为 B 是这种情况,因为我在 Varnish 服务器中有一个指令专门剥离一个 cookie,但即使从请求中剥离它,cookie 的数据仍然保留在 document.cookie 中。

这个问题对于网站支持 Varnish 的人来说尤其重要,因为带有 cookie 的请求会否定缓存数据的使用并产生后端命中。

最佳答案

DOM 由浏览器根据服务器的响应构建和使用。浏览器布局引擎的部分工作是将服务器返回的 HTML 解析为 DOM。不幸的是,不同的浏览器使用 different layout engines , 所以 DOM 树有时内部会有差异。

document.cookie 特别是一个 attribute of the DOM Level 1 spec .如前所述,正确答案或多或少是(B)。 Cookies被打包为客户端发送给服务器的请求的一部分,虽然服务器可以在响应中设置cookies,但最终它们都驻留在客户端。

关于javascript - DOM 对象 document.cookie 属性是如何构建的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5810882/

相关文章:

javascript - 推荐的 Javascript 图像预加载器

javascript - 可靠的跨浏览器方式来获得选择的边界?

java - HttpServlet 响应。有没有办法在不使用 response.setHeader 的情况下使 cookie 安全和/或仅限 http

java - JAX-RS Jersey cookie 删除失败

laravel - Auth::user() 在 Laravel 应用程序中跨域返回 null

linux - 如何设置一个简单的本地 linux 代理来缓存所有 HTTP 请求以供离线浏览

javascript - 创建 javascript 构造函数时出现语法错误

javascript - jQuery - 使工具提示获得 2 个 img alts

java - Maven 代理错误

java - nginx 反向代理与 tomcat 不工作