当您看到一个网页时,谁构建了 DOM 文档?严格来说是服务器打印 HTML 吗?浏览器如何参与?我特别想知道 document.cookie 属性是如何填充的。
A) 服务器填充document.cookie
- 浏览器在用户的硬盘驱动器中存储 foobar.com 的 cookie。
- 下次访问 foobar.com 时,浏览器会将 foobar.com 的所有 cookie 呈现给服务器。
- 服务器基于这些 cookie 构建 DOM document.cookie 属性。
B) 浏览器填充document.cookie
- 浏览器在用户的硬盘驱动器中存储 foobar.com 的 cookie。
- 下次访问 foobar.com 时,服务器会继续构建和提供 HTML。
- 浏览器获取硬盘驱动器上的所有 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/