2012-10-29 131 views
1

我的會話cookie有點長(約700字節),因爲它包含各種加密的用戶信息,而不是。我可以做一些事情來縮小這個尺寸,並且我也在從事這個角度,但這是另一個話題。有沒有辦法控制cookie發送到哪個URL?

我的問題是,我不喜歡這個cookie在每個HTTP請求中如何發送到服務器;包括對JPG圖像,CSS文件和靜態JavaScript文件的請求。由於這些請求不需要Cookie,我覺得它可能會減慢頁面加載時間,因爲這是700字節x頁面加載的資源數量。很明顯,這些文件會被緩存,但我仍然希望我的網頁儘可能快速,順暢地加載。

我能想到的一個解決方案是將我的所有靜態內容放在另一個子域上,如cdn.myserver.com/images/cdn.myserver.com/scripts/,並將cookie路徑設置爲僅包含www.myserver.com。我相信這會起作用,但它使開發和分期環境變得複雜。我可能會最終不得不動態生成URL根據代碼在運行正在什麼環境

我的問題:

除了上述方案中,有沒有什麼辦法來防止Cookie傳送通過網絡傳輸某些HTTP請求,例如圖像,腳本和樣式資源?

我在.NET堆棧上運行,使用IIS7.5作爲Web服務器。

回答

3

從服務器的角度來看,沒有什麼可以做的;當您的服務器(IIS)或您的框架(ASP.NET或其他)已收到請求時,Cookie已發送。

你所提到的絕對工作,報價RFC 2109 ("HTTP State Management Mechanism")(重點煤礦):

主機名可以被指定爲IP地址或FQHN字符串。有時我們將一個主機名與另一個主機名進主機A的域名與主機B的域名相匹配

  • 這兩個主機名都是IP地址,它們的主機名字符串完全匹配;或
  • 這兩個主機名都是FQDN字符串,並且它們的主機名字符串完全匹配;或
  • A是一個FQDN字符串,其形式爲NB,其中N是非空名稱字符串,B的形式是.B',B'是FQDN字符串。 (所以,XYCOM域上匹配.y.com但不y.com)

注意域匹配是不是可交換操作:abccom域上匹配.c.com,但不相反。

因此,創建一個單獨的子域,而具體鍵控你的cookies到不同子域名會工作。

請注意,這是commonly accepted practice to do this in order to increase page speedStack Overflow has been doing this since late 2009

爲了降低暫存和開發環境的複雜性,我建議遵循這一指導原則;將內容放在單獨的域上意味着您不必爲任何這些環境做任何不同的事情。

+0

是的,對於圖像我認爲使用CDN應該是明智之舉。對於腳本,我經常更改它們並在Visual Studio中運行應用程序,並且每次將腳本更改推送到CDN都是一件麻煩事。在運行生產環境時運行'localhost'和CDN時,我必須編寫一些指向本地URL的代碼。 –

+0

@MikeChristensen這絕對是一種痛苦,但是,這是需要做的。你可以區分DEBUG或RELEASE構建?您可以在函數中使用'ifdef'並返回適當的URL。 – casperOne

+0

是的,這將是某種'web.config'設置。腳本文件中提到的資源我認爲只要神奇地工作,只要腳本與它引用的資源位於相同的CDN上即可。只有非CDN資源上的URL必須是完全限定的,這些URL可以由代碼生成。 –

1

據我所知,唯一的解決方案是使用您提到的無Cookie域名或子域名。 但請記住,域或子域應該是指向您的主域的規範DNS名稱。

爲了簡化開發和暫存環境,我建議您將CombineAndMinify組件與您的ASP.net項目一起使用,以滿足您在後臺的需求,並且還有一些其他功能可供您使用。
此外,它具有調試|釋放模式,因此您可以在調試時繞過它。

+0

'+ 1'爲CombineAndMinify rec,我會檢查一下,或者至少編寫類似的代碼! –

+0

這個組件很好,它是開源的,所以我可能想要添加或更改某些功能。你只需編譯它,將編譯好的.dll放入你的BIN文件中,在你的web.config中添加一些行並完成。祝你好運 – Mahyar

相關問題