2010-12-21 7 views
0

Hey alle zusammen. Ich verwende Edge Side Includes on Varnish, um eine statische HTML-Shell zwischenzuspeichern, und schließe dann dynamisches HTML und ein JSON-Objekt ein.Varnish ESI anerkannt, aber nicht enthalten

Die ESI für HTML wird ordnungsgemäß aufgenommen, aber die ESI für das JSON-Objekt wird nicht eingeschlossen; Debug-Anweisungen stellen fest, dass Varnish es sieht, aber es entschließt sich unerklärlicherweise, das JSON ESI nicht einzubeziehen.

Hier ist die Ladestruktur:

 
pageuncached. blank page with headers to set a cookie and esi 1
esi 1cached. A bunch of static HTML, plus esi 2 and esi 3
esi 2uncached. A JSON object which is different on every page load.
esi 3uncached. Some HTML which updates with every page load.

Wieder esi 1 und esi 3 Arbeit ganz gut, aber esi 2 ist nicht enthalten zu werden. Der Gehalt an esi 2 ist gerade dies:


{session_page_history_id:24231} 

ich gelesen, dass ESI-Code, wie XML aussehen keine Fehler verursacht, so habe ich den Laufzeitparameter esi_syntax = 0x7. Keine Würfel, aber zumindest bekomme ich jetzt Debug-Daten.

Der zerbrochene Ruf nach esi 2 wie folgt aussieht:


<esi:include src="http://www.domain.com/dynamic_esi/print_variables?esi__desired_var_names[]=session_page_history_id&for_esi=1"/> 

Und das (Arbeits-) Ruf nach esi 3 sieht wie folgt aus:


<esi:include src="http://www.domain.com/dynamic_esi/get_service_magic_html?&for_esi=1"/> 

Wie ich bereits erwähnte, Lack scheint zu erkennen, dass ich versuche, ein ESI-Include zu machen, aber das ist die einzige relevante Debug-Nachricht, die ich von Lacklog erhalten habe:


    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. 

Die Ausgabe, die von einem Client angezeigt wird, enthält den normalen Inhalt, aber das < esi> -Tag bleibt intakt. Es sieht genauso aus wie in der obigen Debug-Nachricht.

Weiß jemand, warum esi 2 wird nicht geparst/enthalten? Jede Hilfe wäre sehr geschätzt!

Antwort

1

Also anscheinend wurde das ESI-Tag nicht verarbeitet, weil es in einem // [CDATA [Block. Ich bin mir sicher, dass dies etwas mit XML-Konformität zu tun hat. Ich dachte, dass die Einstellung esi_syntax = 7 ein solches Problem verhindern würde, aber es stellt sich heraus, dass dies nur den Inhalt des ESI selbst betrifft (es hebt nicht die Sicherheitschecks für den Code auf, der das Einschließen durchführt).

Die Lösung wird sein, meine Anwendung zu überarbeiten, so dass das ESI sein eigenes in sich geschlossenes Skript-Tag ist.

1

Versuchen Sie, einen Backslash vor dem "&" in der Abfragezeichenfolge hinzuzufügen.

Zumindest bei mir Varnish ignoriert alle Parameter, aber die erste, wenn Sie es nicht tun.

Z. B .:

Vielleicht haben Sie Probleme mit der haben „[“ und „]“, und sie benötigen auch einen umgekehrten Schrägstrich.