强制服务器端的无缓存包含?

时间:2014-03-25 10:00:37

标签: html apache cgi ssi

我有一个静态HTML页面,其中包含第二个HTML页面,通过(Apache)include virtual

第二页也是静态的,除了它通过服务器中的include包含HTML select的内容:

   <select id = "idListOpts" class="form-control input-md" size = 1>
     <!--#include virtual="/cgi-bin/listopts" -->
   </select> 

这很好,除了listopts脚本(实际编译的C ++)是动态的,并从更改的数据库返回内容。问题在于我无法说服浏览器(FF 27,Chrome,Opera,IE9)select实际上是动态的。我已经尝试在no-cache标题中返回各种listopts指令,而我目前正在使用:

   "Status: 200 OK\n"
   "Pragma: no-cache\n"
   "Cache-Control: no-cache\n"
   "Cache-Control: max-age=0\n"
   "Content-Type: text/html\n\n"
   "<option value=\"-1\">...etc"

据我所知,使用Firebug时,整个HTML页面(包括所有虚拟包含)仅在手动刷新页面时加载一次,select内容仅在此时获取,并且包含在静态列表中。这似乎不是Apache文档所说的。 docs表示只能动态生成页面的一部分时才能使用SSI。

任何想法如何解决这个问题,缺少JavaScript / Ajax?

1 个答案:

答案 0 :(得分:0)

根据所使用的Apache HTTPd的版本,尝试使用exec element并将cgi属性设置为脚本。 NB,它需要启用mod_cgi,但我认为这已经到位。

例如:

<!--#exec cgi="/cgi/listopts" -->

如果这不起作用,我会调试你的C ++程序并检查它是否保证在每个请求上返回新数据。如果你还没有尝试过,我会使用strace或等效的探测应用程序来检查对listopts程序的调用,并检查它返回的响应。