Как да принудите URL адресите на кеша на диспечера с параметри за получаване

Както разбрах, след като прочетох тези връзки:

Как да разбера какво кешира диспечера?

http://docs.adobe.com/docs/en/dispatcher.html

The Dispatcher always requests the document directly from the AEM instance in the following cases:

If the HTTP method is not GET. Other common methods are POST for form data and HEAD for the HTTP header.
If the request URI contains a question mark "?". This usually indicates a dynamic page, such as a search result, which does not need to be cached.
The file extension is missing. The web server needs the extension to determine the document type (the MIME-type).
The authentication header is set (this can be configured)

Но искам да кеширам url с параметри.

Ако веднъж поискам myUrl/?p1=1&p2=2&p3=3

тогава следващата заявка към myUrl/?p1=1&p2=2&p3=3 трябва да бъде обслужена от кеша на диспечера, но myUrl/?p1=1&p2=2&p3=3&newParam=newValue трябва да бъде обслужен от CQ за първи път и от кеша на диспечера за следващите заявки.


person gstackoverflow    schedule 04.12.2014    source източник


Отговори (3)


Мисля, че конфигурацията /ignoreUrlParams е това, което търсите. Може да се използва за бял списък на параметрите на заявката, които се използват за определяне дали дадена страница е кеширана/доставена от кеша или не.

Проверете http://docs.adobe.com/docs/en/dispatcher/disp-config.html#Ignoring%20URL%20Parameters за подробности.

person Markus Haack    schedule 12.01.2015
comment
Мисля, че в този случай за site.com/page?q=1 и site.com/page?q=2 диспечерът връща една и съща стойност - person gstackoverflow; 12.01.2015

Не е възможно да се кешират заявките, които съдържат низ на заявка. Такива повиквания се считат за динамични, поради което не трябва да се очаква да ги кеширате.

От друга страна, ако сте сигурни, че такава заявка трябва да се кешира, защото вашето приложение/функция се управлява от заявки, можете да работите по този начин.

  1. Добавете правило за пренаписване на Apache, което ще премести низа на заявката на даден параметър в селектора
  2. (по избор) Добавете CQ филтър, който ще разпознае селектора и ще го премести обратно към низа на заявката

Селекторът може да бъде конструиран по начин: key_value, но това поставя някои ограничения върху това, което може да бъде предадено тук.

person Mateusz Chromiński    schedule 04.12.2014
comment
бихте ли дали пример? - person gstackoverflow; 04.12.2014
comment
Мисля, че наставката би била по-добър избор. - person Tomek Rękawek; 04.12.2014
comment
@Tomek Rękawek можете ли да предоставите повече подробности? ако променя URL - тогава този url ще поиска друг ресурс. можете ли да обясните как да разрешите този проблем? - person gstackoverflow; 04.12.2014
comment
forums.adobe.com/message/4930557#4930557 Тази тема подходяща ли е за мен? - person gstackoverflow; 04.12.2014
comment
myurl.jsp/parameter/values ще се кешира ли в диспечера? - person gstackoverflow; 05.12.2014
comment
Такива обаждания се считат за динамични, следователно не трябва да се очаква да ги кешира. Напълно справедливо е да очакваме да можем да кешираме заявки с параметри на заявката - браузъри, CDN, периферни кешове се справят добре. Предполагам, че действителната причина е, че кеширането на диспечера се основава само на статични файлове на диска и превръщането на параметрите на заявката в част от името на файла на диска е неудобно. Същата причина, поради която не може да кешира заглавките на отговорите. - person Adrian Baker; 06.03.2017
comment
Прав сте, има начини за кеширане на динамични данни и те също съществуват в света на AEM. Не съм съгласен, че основната причина диспечерът да не кешира параметрите на заявката е техническото ограничение на статичното именуване на файлове. Параметрите на заявката са силно използвани в света на мрежата. Вярвам, че това е рационално решение да не се кешират параметрите на заявката, за да се осигури (или дори да се наложи) по-добра архитектура на приложението, т.е. по-съгласувана с принципите на Apache Sling. Според заглавките - започвайки от диспечер 4.1.11, това всъщност е възможно. Вижте cognifide.com/our-blogs/cq/aem-dispatcher -нови-функции - person Mateusz Chromiński; 15.03.2017

Можете да направите това с пренаписване на Apache, НО това не би било идеална практика. Ще нарушите модела, който AEM използва.

Вместо това използвайте селектори и разширения. напр. вместо server.com/mypage.html?somevalue=true, използвайте: server.com/mypage.myvalue-true.html

Повечето неща, които ще трябва да направите и които някога ще бъдат кеширани, ще работят по този начин добре. Ако ми дадете повече подробности за вашите изисквания и това, което се опитвате да постигнете, мога да ви помогна да усъвършенствате решението.

person Brenn    schedule 05.12.2014
comment
myurl.jsp/parameter/values ще се кешира ли в диспечера? - person gstackoverflow; 05.12.2014
comment
да предостави две неща: не добавяте низ за заявка И винаги удряте този път с GET заявка. Dispatcher не кешира неща, които имат низ за заявка (както сте използвали преди) или нещо, което не е GET, така че POST заявките, HEAD заявките и т.н. се препращат към CQ/AEM - person Brenn; 05.12.2014
comment
@gstackoverflow Току-що видях myurl.jsp - това е грешно. Трябва да е myurl.html Вижте как sling избира скрипта за изпълнение. Вероятно искате .html като разширение, освен ако не искате изхода в някакъв друг формат (json) и имате json.jsp скрипт във вашите компоненти. - person Brenn; 05.12.2014