【问题标题】:Force no-cache on Server Side Include?在服务器端包含强制无缓存?
【发布时间】:2014-03-25 10:00:36
【问题描述】:

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

第二个页面也是静态的,只是它通过来自服务器的包含包含 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 实际上是动态的。我尝试在 listopts 标头中返回各种 no-cache 指令,我目前正在使用:

   "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 吗?

【问题讨论】:

    标签: html apache cgi ssi


    【解决方案1】:

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

    例如:

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

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

    【讨论】:

    • @EML 这是否涵盖了您的问题?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-18
    • 1970-01-01
    • 2021-04-12
    • 2016-01-24
    • 1970-01-01
    • 2011-06-30
    相关资源
    最近更新 更多