В моем XPage у меня есть xe:djxDataGrid
(dojox.grid.datagrid
), который использует xe:restService
, который, кажется, использует dojox.data.JsonRestStore
.
Все работает без прокси, но мой клиент обращается к приложению через прокси из-за корпоративной политики. После того, как пользователь обновляет данные в DataGrid, при доступе через прокси-сервер отображаются старые значения.
Когда REST Control / JsonRestStore отправляет запрос ajax GET для получения данных, в заголовках запросов нет параметра Cache-Control
. И Domino не помещает параметр Expires
в заголовки ответа. Я считаю, что именно поэтому старая версия запроса GET кешируется прокси-сервером.
Мы пытались отключить кеш в браузерах, но это не помогло, что означает, что прокси кэширует запросы.
Я считаю, что это можно решить либо:
- Установка параметра
Cache-Control
в заголовках запроса ИЛИ - Установка параметра
Expires
в заголовках ответа
Но я не нашел способа установить ни то, ни другое. Для XPage Domino задает заголовок ответа Expires:-1
, но не для запроса ajax GET, который:
/mypage.xsp/?$$viewid=!ddrg6o7q1z!&$$axtarget=view:_id1:_id2:callback1:restService1
Это возвращает данные JSON в JsonRestStore и кеширует прокси.
Один из вариантов - попытаться получить исключение для прокси, чтобы запросы к этому сайту обходили кеш прокси. Но исключения, как правило, нелегко преодолеть.
Любые идеи? Спасибо.
Обновление1
Моя коллега предположила, что я могу перехватить запросы xhr GET, сделанные dojox.data.JsonRestStore, и добавить параметр времени к URL-адресу, чтобы предотвратить кеширование. Вот мой вопрос по этому поводу:
Запретить кеширование в каждом запросе Dojo xhr на странице
Обновление2
@SvenHasselbach имеет отличное решение для предотвращения кеширования для всех xhrs:
http://openntf.org/XSnippets.nsf/snippet.xsp?id=cache-prevention-for-dojo-xhr-requests.
Кажется, он работает отлично, к URL-адресам добавляется параметр &dojo.preventCache=
, и запросы, похоже, возвращают правильный JSON также с этим параметром. Но DataGrid перестает работать, когда я использую этот код. Каждый xhr вызывает эту ошибку:
Пробовал с Firefox и Chrome. Первая страница данных все еще загружается, потому что перехват xhr еще не установлен, но на последующих страницах в каждой ячейке отображается только «...».