Cookies

非 www 域阻止在同一域上託管靜態內容,對嗎?

  • May 3, 2011

使用非 www 域規範的缺陷?

我喜歡像 example.com 這樣的簡短、乾淨的 url 而不是 www.example.com 的想法,當然無論使用哪個都應該重定向到另一個。但是,隨著我對此事的研究,我得出的結論是,如果需要在不增加傳輸大小的情況下在單獨的域上託管靜態內容時,使用非 www url 作為規範 url 是一種責任餅乾。

換句話說,如果http://example.com是您的規範網址,那麼它很可能會包含 cookie。由於 cookie 的設置方式,這些 cookie 將與所有子域共享,例如 users.example.com、dev.example.com、www.example.com,最重要的是 images.example.com 或 files.example .com。

因此,如果您想從一個單獨的子域提供靜態文件內容,您最終會將來自主站點的 cookie 與它們捆綁在一起,並增加 http 請求的傳輸大小。

在這種情況下,為了防止傳遞帶有靜態內容的 cookie,您需要購買一個完全獨立的 url(例如 examplefiles.com)。

相反,如果您將 www.example.com 設置為規範 url,我相信 cookie 僅適用於該 www。站點,而不是任何其他子域。在這種情況下,您無需購買和維護第二個 url 以避免使用靜態內容提供 cookie,您只需確保 files.example.com 或 images.example.com 等配置為 -not-提供餅乾。

有什麼緩解因素嗎?

這個分析正確嗎?這個問題是不是利用一個簡短的非 www url 作為你的規範 url,以這種小但可能很重要的方式,有點不適應未來?我是否還缺少其他緩解因素,例如確保僅為規範的非 www 短 url 設置 cookie 的方法?

我真的不認為這是一個問題,因為 cookie 不是那麼大,伺服器不必在響應中將它們發回。因此,雖然是的,example.com 設置的一個或多個 cookie 會將請求“膨脹”到 static.example.com,但 static.example.com 不必在響應中將其發回,因此伺服器的響應完全不受影響.

此外,如果您有已知為靜態的內容(圖像、CSS、JS 等),您應該設置適當的記憶體控制標頭,尤其是在未來某個適當時間的 Expires 標頭(例如 +1 天,+ 1 週,+50 年,無論您的靜態內容多久更改一次都有意義)。完成此操作後,這些 cookie 將只發送一次,然後瀏覽器記憶體將處理未來對這些文件的需求。

如果您仍然覺得這太多了(老實說,我真的看不出它是怎麼回事),您可以通過使用路徑來減輕它。例如,如果您的 Web 應用只需要 example.com/app 中的 cookie,請將 cookie-path 設置為 /app,然後對 static.example.com/images/some-awesome-image.jpg 的請求將不會發送那個cookie,因為路徑不匹配。

您可以通過減少您使用的 cookie 的數量來進一步緩解它——對於大多數目的,一個(並且只有一個)儲存單個會話 ID 的 cookie 只會增加幾個字節(在我見過/使用的每個實現中都小於 1KB) ,並為伺服器提供足夠的資訊來查找它需要了解的有關該客戶端伺服器端的所有資訊。

老實說,如果您擔心短 URL 域會因為 cookie 使您的網站無法適應未來,那麼我認為您的 cookie 太多/太大存在架構問題,您應該重新評估您的策略觀點看法。

引用自:https://serverfault.com/questions/265956