我正在使用varnish+esi从 RESTFul API返回外部json内容。这种技术允许我管理请求和刷新数据,而无需为每个请求使用网络服务器资源。
例如:
<head>
....
<script>
var data = <esi:include src='apiurl/data'>;
</script>
...
包含 esi varnish 后将返回:
var data = {attr:1, attr2:'martin'};
这工作正常,但如果 API 返回错误,此技术将生成解析错误。
var data = <html><head><script>...api js here...</script></head><body><h1 ... api html ....
我使用隐藏的 div 解析并捕获错误解决了这个问题:
...
<b id=esi-data style=display:none;><esi:include src='apiurl/data'></b>
<script>
try{
var data = $.parseJSON($('#esi-data').html());
}catch{ alert('manage the error here');}
....
我也尝试过使用脚本类型 text/esi,但浏览器会在脚本标签 (wtf) 中呈现 html,例如:
<script id=esi-data type='text/esi'><esi:include src='apiurl/data'></script>
问题:
为什么要包装标签并避免浏览器解析它?