2011-04-27 39 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。