2011-04-27 37 views
2

当您为网页提供服务时,谁在构建DOM文档?它是严格的服务器打印HTML?浏览器如何参与?我特别感兴趣的是了解document.cookie属性如何填充。如何构建DOM对象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之前或之后。

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

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

+1

这不是一个真正的DOM对象... – Pointy 2011-04-27 21:38:22

+0

http://en.wikipedia.org/wiki/HTTP_cookie - 浏览器通过将所有cookie添加到所有请求来发送所有cookie。服务器也可以添加或删除Cookie。 document.cookie是客户端脚本可访问的cookie的浏览器副本。为什么你想让cookie成为我不知道的DOM对象。 – mplungjan 2011-04-27 21:39:24

+0

另外,它是(B),或多或少。 – Pointy 2011-04-27 21:39:34

回答

2

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

document.cookie具体是一个attribute of the DOM Level 1 spec。正如所说的,正确的答案是或多或少(B)。 Cookies作为客户端发送到服务器的请求的一部分进行打包,尽管服务器可以在响应中设置cookie,但最终它们都驻留在客户端。

1

服务器向浏览器发送数据,解释它并构建DOM树。 Cookie与数据一起发送,不会内置到DOM中,而是存储在本地计算机上。基本上B.浏览器可以在机器上操作cookie;服务器可以操纵它发出的任何cookie。