2010-12-21 3 views
0

모두 안녕하십니까. 정적 HTML 셸을 캐싱하고 일부 동적 HTML과 JSON 개체를 포함하기 위해 Varnish에 Edge Side Includes를 사용하고 있습니다.바니시 ESI는 인정되었지만 포함되어 있지 않음

HTML 용 ESI가 올바르게 포함되지만 JSON 객체 용 ESI는 포함되지 않습니다. 디버그 구문은 Varnish가 보는 바를 설명하지만 JSON ESI를 포함하지 않기로 결정할 수는 없습니다.

여기 로딩 구조입니다 :

 
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.

다시

, 잘 ESI 1ESI 3 작동하지만 ESI 2 포함지고 있지 않습니다.


{session_page_history_id:24231} 

내가 XML처럼 보이지 않는 ESI 코드 오류가 발생 읽었, 그래서 런타임 매개 변수 esi_syntax = 0x7로을 설정 ESI 2의 내용이 바로 이것이다. 주사위는 없지만 최소한 디버그 데이터를 얻고 있습니다.

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. 

클라이언트가 본 출력에는 정상적인 모든 내용이 포함되지만 < esi> 태그는 그대로 유지됩니다. 위의 디버그 메시지에서 보는 것과 같습니다.

왜 esi 2가 파싱/포함되지 않는지 아는 사람이 있습니까? 어떤 도움 이라든지 대단히 감사 할 것입니다!

답변

1

분명히 ESI 태그는 // [CDATA [블록. XML 준수와 관련이 있다고 확신합니다. esi_syntax = 7로 설정하면 이러한 문제를 방지 할 수 있다고 생각했지만 ESI 자체의 내용에만 영향을 미쳤습니다 (포함하는 코드에 대한 안전성 검사를 수행하지 않음).

해결 방법은 내 응용 프로그램을 다시 작성하여 ESI가 자체 포함 스크립트 태그가되도록하는 것입니다.

1

쿼리 문자열에 "&"앞에 백 슬래시를 추가하십시오.

나와 함께 적어도 나와니스는 모든 매개 변수를 무시하지만 수행하지 않으면 첫 번째 매개 변수를 무시합니다.

예컨대 :

은 아마 당신은 "["와 "]"를 문제가있는거야, 그리고 그들은 또한 백 슬래시가 필요합니다.

관련 문제