【发布时间】:2017-01-21 04:47:41
【问题描述】:
我有以下设置:
一些文件是根据一些(只有少数)会话参数动态生成的。由于它们没有很大的多样性,我允许在代理/浏览器中进行缓存。文件在传输过程中获得了一个 etag,整个 Web 应用程序的反应乍一看似乎是正确的:文件服务正确依赖于会话情况,节省了流量。
然后这个错误行为:
但仔细检查后,我发现在他的回答中,如果那些动态生成的文件出现 304,apache 错误地发送了“连接:关闭”标头,而不是通常发送的“连接:KeepAlive”。他应该做的是:不要操纵任何与“联系”有关的事情。
我找不到任何点来查明这种行为的原因:除了在一个文件中的一行被指示发送保活——它确实如此——只要它不会为动态生成的文件发送 304 响应。在 PHP 中,我没有指示那个人发送除了 keepalives 以外的任何东西(后者只是为了尝试对抗连接:关闭)。
Apache 在提供“正常”(非动态)文件(带有 304 个答案)时不会这样做。因此,在某种程度上,我假设 PHP 内核可能是未经许可或被要求干预这里的人。但是,在 apache 配置中添加了一个“Header set Connection 'Keep-Alive'”,我也添加了它来对抗连接的关闭,也不起作用。通常,当您在 apache 配置中放置这样的标头集规则(不是“早期”类型)时,此规则会在对所请求文档的任何子排序工作完成后(因此在 PHP 输出完成后)执行操作。但在我的情况下,什么都没有发生 - 好吧:在 304 响应的情况下。在所有其他情况下,一切正常且正确。
由于在页面请求中确实有一些其他文件超出了该行,我希望让 apache 摆脱那些连接关闭。
有没有人知道如何处理这种行为?
【问题讨论】:
-
清理语言。没有理由在这里冲厕所。
标签: php apache http response keep-alive