ワニスESIは認識されましたが含まれていません
-
12-10-2019 - |
質問
みなさん。ワニスに含まれるエッジサイドを使用して、静的HTMLシェルをキャッシュし、動的なHTMLとJSONオブジェクトを含めます。
HTMLのESIは適切に含まれていますが、JSONオブジェクトのESIは含まれていません。デバッグステートメントは、ワニスがそれを見ていることを確立していますが、それは不可解にJSON ESIを含めないことを決定します。
これが荷重構造です:
ページ 不明. blank page with headers to set a cookie and ESI 1
ESI 1 キャッシュ. A bunch of static HTML, plus ESI 2 and ESI 3
ESI 2 不明. A JSON object which is different on every page load.
ESI 3 不明. Some HTML which updates with every page load.
また、 ESI 1 と ESI 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"/>
私が述べたように、ワニスは私が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.
クライアントが見た出力にはすべての通常のコンテンツが含まれていますが、u003Cesi>タグはそのまま残っています。上記のデバッグメッセージに表示されるものとまったく同じように見えます。
ESI 2が解析/含まれていない理由を知っている人はいますか?どんな助けも大歓迎です!
解決
したがって、ESIタグは// [cdata [block]内側にあるため、ESIタグが処理されていませんでした。これはXMLコンプライアンスと関係があると確信しています。 ESI_SYNTAX = 7の設定はそのような問題を防ぐと思いましたが、それはESI自体の内容にのみ影響することがわかります(含めるコードの安全チェックを持ち上げない)。
ソリューションは、ESIが独自の自己完結型スクリプトタグになるように、アプリケーションを作り直すことです。
他のヒント
クエリストリングで「&」の前にバックスラッシュを追加してみてください。
少なくとも私と一緒に、ワニスはすべてのパラメーターを無視しますが、最初のパラメーターは無視します。
例えば:
「["と「]」に問題があるかもしれませんし、バックスラッシュも必要になるでしょう。