2015-02-06 47 views
2

假設我在一個設置了大量cookie的大型網站上有一個gwt應用程序,並且我無法控制哪些cookie被設置。進一步假設,我的gwt應用程序使用RequestBuilder對同一個域內的輕量級API進行了多次REST調用(實際上必須這樣做)。使用RequestBuilder而不發送cookies

RequestBuilder合理地向服務器發出HTTP請求,併發送所有收到的cookie。問題在於cookie本身有時會佔用請求大小的90%。

是的,如果網站沒有設置這麼多的cookie,但是認爲這是不可修復的,那將會很不錯。不,從瀏覽器中刪除cookie不是一個選項(如果他們完全無法從gwt應用程序訪問/隱藏,例如,如果我能以某種方式說服gwt應用程序使用單獨的空cookie jar,這很好)。

我該如何說服RequestBuilder不是發送任何cookie?

注意解決這個XmlHttpRequest幷包裝在GWT代碼將罰款。


東西我發現可能是有用的(一般爲JS而不是GWT,但GWT最終使用XmlHttpRequest):

  • Cookie Monster:該請求之前從XmlHttpRequest偷餅乾的觀察員已發送。我認爲這可能是Firefox特有的,這看起來有點像努力工作。
  • yourXMLHttpReq.channel.loadFlags |= Ci.nsIRequest.LOAD_ANONYMOUS;:這將是非常完美的,保存它需要手術進入GWT,我認爲它的Firefox特定。
  • question,它處理Chrome擴展,其答案是要刪除和讀取所有的cookie(不適用於長時間運行的應用程序),或使用隱身窗口(我希望這隻會影響REST API調用)。
+0

我認爲網絡存儲(HTTP: //www.w3schools.com/html/html5_webstorage.asp)不適合你。但我想提一提,因爲這是解決問題的另一種方法。存儲對象不會發送到服務器,反之亦然。 – Charmin 2015-02-07 16:04:19

+0

@Charmin可悲的不是。典型的情況是,該應用程序在'app.foo.com'上,並且有一個'.foo.com'子域cookie-fest。 – abligh 2015-02-07 17:40:24

回答

2

RequestBuilder委託給JavaScript的XMLHttpRequest,這將始終發送cookie。你有兩個選擇。

  1. 使用不同的子域對於餅乾尚未爲
  2. 設定的請求過程中暫時刪除所有cookie的REST端點,事後恢復它們
+0

不幸的是,這些都不是選擇。首先,我無法選擇子域(事實上,問題部分是爲更高域設置的通配符cookie)。其次,該應用程序運行時間很長,因此沒有明顯的時間將其添加回來。我將通過XmlHttpRequest添加更多信息。 – abligh 2015-02-07 09:57:40

+0

只要提出請求,您不能將它們添加回來嗎?這是在請求被髮送並且正在等待響應之後,因此添加cookie應該沒問題。 – Bjartr 2015-02-09 18:27:38

+0

該應用程序在不斷的基礎上和後臺發出請求(因此希望優化通信)。如果他們在此期間使用了同一個域中的其他網站,並且我已經移除了Cookie,他們將會退出;如果其他網站更改了cookie,但我恢復了錯誤,則可能會出現其他問題。由於瀏覽器不是單線程的,因此這裏存在爭用條件問題。 (我前一段時間是btw,對很多人來說這就是解決方案) – abligh 2015-02-09 19:17:47