2015-02-06 4 views
2

Предположим, у меня есть приложение gwt на большом веб-сайте, в котором множество куки-файлов, и что я не контролирую, какие файлы cookie устанавливаются. Предположим далее, что мое приложение gwt делает несколько вызовов REST для легкого API в том же домене (как и нужно делать), используя RequestBuilder.Использовать RequestBuilder без отправки файлов cookie

RequestBuilder достаточно обоснованно делает HTTP-запрос на сервер и отправляет все куки-файлы, которые он получил. Проблема в том, что файлы cookie иногда принимают более 90% размера запроса.

Да, было бы неплохо, если бы на веб-сайте не было установлено столько куки, но предположим, что это невозможно. Нет, удаление файлов cookie из браузера не является вариантом (это прекрасно, если они полностью недоступны/скрыты от приложения gwt, например, если бы я мог как-то убедить приложение gwt использовать отдельную пустую банку cookie).

Как убедить RequestBuilderне, чтобы отправить куки?

Примечание. Решение этого вопроса для 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

Я предполагаю, что Web Storage (HTTP: //www.w3schools.com/html/html5_webstorage.asp) не является для вас вариантом. Но я хочу упомянуть об этом, потому что это другой подход к решению этой проблемы. Объекты хранения не отправляются на сервер и наоборот с каждым запросом. – Charmin

+0

@Charmin грустно нет. Типичная ситуация заключается в том, что приложение находится на 'app.foo.com', и существует файл поддоменов cookie-fest .foo.com. – abligh

ответ

2

RequestBuilder Делегаты Javascript's XMLHttpRequest, которые будут всегда отправлять файлы cookie. У вас есть два варианта.

  1. Используйте другой поддомен для REST конечных точек, что куки не были установлены для
  2. Временно удалить все куки во время запроса, и восстановить их после
+0

Ни один из этих вариантов, к сожалению. Во-первых, я не могу выбрать субдомен (и на самом деле проблема заключается в том, что некоторые куки-файлы подпадают под более высокий домен). Во-вторых, приложение работает долго, поэтому нет очевидного времени для их добавления. Я добавлю немного больше информации о том, где я столкнулся с XmlHttpRequest. – abligh

+0

Не можете ли вы добавить их обратно, как только вы сделаете запрос? Это после того, как запрос отправлен и ждет ответа, поэтому добавление файлов cookie тогда должно быть прекрасным. – Bjartr

+0

Приложение делает запросы на постоянной основе и в фоновом режиме (отсюда и желание оптимизировать связь).Если в течение этого периода они используют другой сайт в том же домене, и я удалил cookie, они будут выписаны; если другой сайт изменяет файл cookie, но я восстанавливаю неправильный, могут возникнуть другие проблемы. Поскольку браузер не является однопоточным, здесь есть проблема с условиями гонки. (Я '+ 1''это некоторое время назад, как и для многих людей, это было бы решением) – abligh

Смежные вопросы