【问题标题】:how to have apache always return code 200 with data instead of 304?如何让 apache 总是返回带有数据的代码 200 而不是 304?
【发布时间】:2011-04-14 17:42:44
【问题描述】:

我想让 Apache HTTPD 通过 GET 返回带有资源请求数据的响应代码 200,而不是返回没有数据的响应代码 304。任何人都知道如何做到这一点?

提前致谢

【问题讨论】:

  • 我无法完全实现与此相反的效果。对于所有缓存的内容(缓存在具有 ETag 的头文件的 Apache 服务器上)服务器返回 200,即使所有头都正确放置。 (我也禁用了 mod_deflate 模块)。知道为什么会发生这种情况吗?您为启用此 304 响应所做的任何配置更改?

标签: apache http


【解决方案1】:

去掉header,在httpd.conf文件中加入以下内容

<FilesMatch "\.(filetype1|filetype2)$">
    RequestHeader unset If-Modified-Since
    RequestHeader unset If-None-Match
</FilesMatch>

【讨论】:

    【解决方案2】:

    将以下指令添加到您的 apache 配置文件中

    RequestHeader unset If-Modified-Since

    这将忽略客户端发送的 IF-Modified-Since 标头,因此您不会收到 304 Not Modified 响应。

    【讨论】:

      【解决方案3】:

      我不确定我是否完全理解您的问题。我假设您希望在客户端使用正确的 URL 时提供正常的 HTTP 答案,并在客户端使用不存在的 URL 时提供默认页面(状态为 200)。

      如果是这样的话,可以这样实现:

      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteRule ^.*+ /dummy.html
      

      第一行是 URL 不匹配 Web 服务器上现有文件的条件。如果该条件成立,则执行第二行,为客户端提供一个虚拟页面。

      【讨论】:

      • 这不是为不存在的 URL 提供默认答案。这是关于忽略 If-Modified-Since 并像资源已更改一样返回答案。
      【解决方案4】:

      发出请求时不要向其发送任何与缓存相关的标头(If-Modified-SinceIf-None-Match 和朋友)。这会通知服务器客户端不缓存,并使其始终返回数据。

      【讨论】:

      • Matti,不幸的是,我无法控制询问/请求资源的内容。我希望有一种方法可以让 apache 只返回资源,无论是否有缓存头。
      • @rafael:如果您不想要,为什么客户端首先缓存请求呢?如何发送一些缓存控制标头告诉它不要缓存您的内容。
      • 我无法控制客户端的缓存。使用缓存控制标头不起作用。有没有办法告诉 apache 忽略 If-Modified-Since 标头,不管资源是什么?
      • @rafael:我很犹豫是否给你指示会破坏你的网络服务器......
      • 你真是太好了。我听到并理解您的担忧。也许我应该指出,我正在研究的是开发环境。我将没有任何东西是在生产中。在我的开发环境中,我只需要让 apache 忽略客户端的缓存。
      猜你喜欢
      • 2021-06-18
      • 2017-12-01
      • 1970-01-01
      • 2015-06-28
      • 1970-01-01
      • 2012-03-09
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多