【问题标题】:Is Apache caching request URLs?Apache 是否缓存请求 URL?
【发布时间】:2023-03-17 08:50:01
【问题描述】:

我正坐在这里,试图为我的新网站寻找一种绕过 URL 重写的方法。这将是一个完全基于 AJAX 的站点,其中 URL 在 90% 的 URL 中不重要。

在 Chrome 中按 F12 并进入网络后,我开始监控响应性,因为我更改了 .htaccess 中的参数。

我发现当输入一个服务器重启后没有看到的地址时,它花费了 80-100ms 来处理请求(等待时间)。这是在本地主机上运行的。这发生在更改 GET 请求的动态部分 ?id=changeThis 和输入新 URL(如 /id/changeThis..)时。然而,下一次处理需要 8-12 毫秒...

如果我使用^(.*) 将所有请求重定向到 index.php 没有影响。

问题:如果我使用^([a-zA-Z\-/]*)(注意没有句号)使 main.css 等静态文件不被重写,或者最好将所有文件放在静态文件夹中(因此松散的灵活性)并且仍然使用^(.*) 来重定向所有不在静态异常文件夹中的请求。 (我在这里考虑速度。)

问题:任何人都可以批准我的发现吗? Apache 是否真的“缓存”了请求,以便对特定 URL 的第一个请求需要时间来处理?

【问题讨论】:

  • Apache 本身不做任何“缓存”。但是,根据您使用的编程语言或框架,第一次点击 URL 可能需要额外的时间来加载实际运行的代码。
  • @GregHewgill 实际上我在请求不存在的文件。所以 PHP 从来没有真正加载过..
  • 文件缓存的可能位置:浏览器、防火墙、路由器、isp、主机和用户之间的任何服务器。
  • @Dagon 好的,所以它不可能是浏览器(我清除了缓存),它不可能是路由器(它是 localhost),因此也不是 isp,让我们试试 flushdns。
  • @Dagon 不,不能是其中任何一个......

标签: php regex apache mod-rewrite


【解决方案1】:

回答您的问题:

使用更少的子句和更简单的正则表达式,处理速度会更快 - 但我们讨论的是几毫秒的数量级。

Apache 不会按照您的想法缓存请求 - 但是,您的 linux 系统可能正在缓存文件,因此后续加载速度更快。我认为这就是您所看到/想到的 - apache 和网站文件都缓存在页面中的操作系统中,以便更快地访问。重新启动应该会使这些页面变脏并需要重新加载它们。

【讨论】:

    【解决方案2】:

    从 Apache 配置中禁用 mod_cache。 在我的配置中,它默认是启用的。

    【讨论】:

    • 这里默认不开启。
    • @StudentofHogwarts 有什么问题?我想你是想知道 apache 是否缓存响应?
    • 我发现 mod_cache 在两次影响响应 - 一次它没有选择对文件的更改(例如,如果我上传了更新的页面,它没有被选择)并添加启用客户端缓存的标题 -这是我不想要的(我的网站完全动态)。当然,Web 服务器使用 url 来寻址缓存,相同的 URL 将在第二次请求时命中缓存,如果您稍微更改 url(不同的页面但也不同/附加参数)服务器无法告诉页面不会有所不同,并且必须返回“真实”的未缓存版本
    • 您认为它已打开,即使在 httpd.conf 文件中找不到它?
    • 在我的系统中,除了 httpd.conf 文件,我还有 httpd.d 文件夹,里面有各种设置。有办法转储所有已加载模块的列表 - 但你这样做的方式取决于系统
    猜你喜欢
    • 2017-11-22
    • 2017-09-07
    • 2011-02-19
    • 2020-04-09
    • 1970-01-01
    • 1970-01-01
    • 2020-01-26
    • 1970-01-01
    • 2018-02-10
    相关资源
    最近更新 更多