2015-01-16 72 views
0

此外,爲什麼白色空間靈敏度?如果JavaScript可以在HTML加載後添加cookies,那麼我猜想他們的做法有些根本不同,但我不知道爲什麼。爲什麼Cookie和會話需要放在任何HTML之前?

+1

您應該閱讀HTTP(用於傳輸HTML的協議)的介紹。 – Phillip

+3

這是[HTTP](http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol)所要求的。 Cookie被設置在標題中,並且標題**必須**在主體內容之前。 JS沒有使用HTTP進行cookie。它已經在瀏覽器中運行,並且可以直接設置/操作cookie。服務器未在瀏覽器中運行。它只能通過響應標題中的Cookie指令來設置Cookie。 –

+0

@MarcB你的*必須*只適用於HTTP/1.0。分塊傳輸編碼允許在文件正文後發送標題。 – Phillip

回答

2

HTTP響應由一個標題和一個(可選的取決於標題)正文組成。

Cookie設置爲HTTP標頭。

HTML文檔(任何其他實際內容)在主體中發送。

標題必須在正文之前發送。

  • 運行的代碼輸出它們的代碼進行輸出前體
  • 緩衝PHP程序的輸出,直到它完成運行

:這可以通過完成

此外,爲什麼白色空間靈敏度?

空白在HTTP響應主體中並不特殊。它是任何其他內容輸出。


如果JavaScript可以添加餅乾HTML加載後,然後我猜有什麼根本不同的關於他們如何

他們不使用HTTP頭設置。

+0

此答案不完整。可以使用HTTP/1.1的分塊編碼在主體之後發送頭文件。有趣的問題是爲什麼PHP不允許這樣做。我的猜測是,他們要麼不知道,要麼確保所有平臺上的相同行爲,即那些不支持HTTP/1.1或使用CGI的行爲,這也會強制頭部被首先發送。 (但後者對於PHP來說是不尋常的。) – Phillip

0

WWW服務器將部分數據發送到瀏覽器。第一部分是一些通常被稱爲HTTP Headers的文本。它們定義了類型,大小,語言,內容的編碼,服務器也發送了一些關於它自己的信息。 Cookies也發送到這裏,因爲這是「非現場」信息的地方。

會話有點不同。他們是服務器端。因此,您需要在服務器啓動之前聲明會話以呈現內容並將其發送到客戶端瀏覽器。另一個原因是你的會話標識符是一個cookie!所以是的,會話不會沒有cookie。

Cookie是客戶端(瀏覽器端)的小文本文件。 JavaScript是瀏覽器內的客戶端(瀏覽器端)腳本。因此,它不會使用HTTP與您實際觀看的網頁進行聯繫。沒有必要使用HTTP頭和東西。如果一個程序在你的計算機上運行,​​只需在計算機上修改這些文件就好多了,不是嗎?

這就是爲什麼JavaScript不使用HTTP頭來修改cookie文件。它只是告訴你的瀏覽器它想修改這個和那個,而瀏覽器是這樣做的。

更多的信息在Manual

+0

「Cookie是客戶端(瀏覽器端)很少的文本文件。」 - 否。瀏覽器可能會將* cookie的數據存儲在一個小文本文件中,但這是一個實現細節。 Cookie是HTTP服務器和客戶端之間交換的數據片段。 – Quentin

相關問題