【问题标题】:How to prevent apache from sending connection close header <s>on 304 answers</s>如何防止 apache 发送连接关闭标头<s>on 304 answers</s>
【发布时间】: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


【解决方案1】:

P.S.:一天(睡个好觉)之后,事情就变好了:

在这种情况下,罪魁祸首是一个短视的(代表我)复制的示例 sn-p,其中包含“HTTP/1.>>>0

这个协议版本号(正确地)由 apache 进行后处理(在其他所有事情 - 包括任何 apache 模块工作 - 最终确定之后),因为它决定不通过线路发送“连接:保持活动”,因为该功能在 HTTP/1.0 版本中不存在。

在这种情况下,问题在于将注意力集中在 php 和 apache 模块中的所有内容都正常工作而它们的外部环境中的某些内容一定是错误的事实上,然后将视图转移到代码中的任何内容可能会影响外部环境(例如协议版本)。

【讨论】:

    猜你喜欢
    • 2018-11-04
    • 1970-01-01
    • 2015-02-08
    • 2011-09-23
    • 2017-05-29
    • 2011-04-05
    • 1970-01-01
    • 2018-05-04
    • 2017-04-05
    相关资源
    最近更新 更多