簡體   English   中英

Varnish ESI已獲認可但未包括在內

[英]Varnish ESI recognized but not included

大家好 我在Varnish上使用Edge Side Includes來緩存靜態HTML Shell,然后包括一些動態HTML和JSON對象。

已正確包含HTML的ESI,但不包含JSON對象的ESI; 調試語句確定Varnish可以看到它,但是卻莫名其妙地決定不包括JSON ESI。

這是加載結構:


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.

同樣, esi 1esi 3可以正常工作,但是esi 2沒有包含在內。 esi 2的內容就是這樣:


{session_page_history_id:24231}

我讀到了看起來不像XML的ESI代碼會導致錯誤,所以我設置了運行時參數esi_syntax = 0x7 沒有骰子,但是至少我現在正在獲取一些調試數據。

esi 2的破壞調用如下所示:


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

esi 3的(工作)調用如下所示:


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

正如我所提到的,Varnish似乎認識到我正在嘗試制作ESI包含,但這是我從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.

客戶端看到的輸出包含所有正常內容,但<esi>標記保持不變。 看起來就像您在上面的調試消息中看到的一樣。

有誰知道為什么不解析/包含esi 2? 任何幫助將不勝感激!

顯然,ESI標簽沒有得到處理,因為它位於// [CDATA [塊]內。 我確信這與XML合規性有關。 我認為設置esi_syntax = 7可以防止出現這樣的問題,但事實證明這只會影響ESI本身的內容(它不會解除對包含這些內容的代碼的安全檢查)。

解決方案是重新處理我的應用程序,以便ESI是它自己的自包含腳本標記。

嘗試在查詢字符串中的“&”之前添加反斜杠。

至少對於我來說,Varnish會忽略所有參數,但如果您不這樣做,則會忽略第一個參數。

例如:

也許你會遇到“[”和“]”的問題,他們也需要反斜杠。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM