Vernice ESI riconosciuto, ma non inclusa
-
12-10-2019 - |
Domanda
Ciao a tutti. Sto usando bordo Side Includes su Varnish per memorizzare nella cache una conchiglia HTML statico, quindi includere alcuni HTML dinamico e un oggetto JSON.
L'ESI per HTML è sempre compresa correttamente, ma l'ESI per l'oggetto JSON non viene incluso; istruzioni di debug stabiliscono che Varnish lo vede, ma decide inspiegabilmente di non includere il JSON ESI.
Ecco la struttura di carico:
page uncached. blank page with headers to set a cookie and esi 1
esi 1 cached. A bunch of static HTML, plus esi 2 and esi 3
esi 2 uncached. A JSON object which is different on every page load.
esi 3 uncached. Some HTML which updates with every page load.
Anche in questo caso, ESI 1 e ESI 3 funzionano bene, ma ESI 2 non è sempre incluso. Il contenuto in ESI 2 è proprio questo:
{session_page_history_id:24231}
Ho letto che il codice ESI, che non sembra XML provoca errori, così ho impostato il parametro di runtime esi_syntax = 0x7 . Niente da fare, ma almeno sto ottenendo alcuni dati di debug ora.
La chiamata spezzato per ESI 2 aspetto:
<esi:include src="http://www.domain.com/dynamic_esi/print_variables?esi__desired_var_names[]=session_page_history_id&for_esi=1"/>
E il (di lavoro) richiesta di ESI 3 aspetto:
<esi:include src="http://www.domain.com/dynamic_esi/get_service_magic_html?&for_esi=1"/>
Come ho già detto, Vernice sembra riconoscere che sto cercando di fare un ESI comprendono, ma questo è il messaggio di debug rilevante solo che ricevo da varnishlog:
25 Debug c AddBit: 6997 <<![CDATA[
window.esi__values =
<esi:include src="http://www.domain.com/dynamic_esi/print_variables?esi__desired_var_names[]=session_page_history_id&for_esi=1"/>
;
//]]>
</script>
<link rel="stylesheet" href="http://www.
L'output visto da un client contiene tutto il contenuto normale, ma con il tag
Qualcuno sa perché esi 2 è non farsi analizzato / incluso? Qualsiasi aiuto sarebbe molto apprezzato!
Soluzione
Quindi, a quanto pare il tag ESI non è stato sempre elaborata perché era all'interno di un // [CDATA [blocco. Sono sicuro che questo ha qualcosa a che fare con il rispetto XML. Ho pensato che l'impostazione esi_syntax = 7 impedirebbe un tale problema, ma si scopre che che colpisce solo il contenuto della ESI stesso (non sollevare i controlli di sicurezza per il codice che fa il compresa).
La soluzione sarà quella di rielaborare la mia domanda in modo che l'ESI è la sua tag script autonomo.
Altri suggerimenti
Prova ad aggiungere una barra rovesciata prima il "&" in querystring.
Almeno con me Varnish ignora tutti i parametri, ma la prima se non lo fai.
Es .:
Forse avrete problemi con il "[" e "]" e hanno anche bisogno di una barra inversa.