首页 > 解决方案 > 按需生成css,但我得到 net::ERR_ABORTED 404

问题描述

我正在使用 php 即时生成 css 文件。因此,我的 HTML 包含以下代码:

    <link rel="stylesheet" href="/ap.css.php">

因为它是 PHP,浏览器(正确)不会缓存它。但是,这会导致后续页面访问的不必要开销,因为所有页面都使用相同的结果 CSS(尽管对于不同的用户可能会有所不同)。

我想我可能只在出现 404 错误时生成一个常规的 CSS 文件。我假设客户端会缓存它。IOW 我输入了 HTML:

    <link rel="stylesheet" href="/ap.css">

...然后我编写了一个 404 脚本,它会巧妙地间接调用 /ap.css.php。

我的意图是客户端将因此只请求一次并将缓存的结果用于所有后续页面访问,从而减少页面负载和数据使用(尤其是对于手机)。

现在我可以在地址栏上输入 ap.css 文件名,果然,404 处理程序提供了所需的 CSS 输出,但是当使用 HTML 中的链接时,它仍然会因 404 而中止。

...所以我尝试放入一个特殊的 text/css 标题。唉,根据标题给出错误消息没有任何区别。

<?php
    header_remove(); // try to remove any file not found header that might have been queued
    header('Content-Type: text/css');
?>

有什么方法可以禁用此 404 中止,还是我必须选择为每个页面访问一遍又一遍地生成 CSS,或者使其成为每个人的相同常规静态 CSS 文件?

标签: phpcssfile-not-found

解决方案


让我们退后一步,看看实际的问题:

  • 您想使用 PHP 生成 CSS
  • 您不希望浏览器在每次加载新页面时都重新请求它

这个问题的解决方案是缓存

您似乎试图通过在 URL 中使用来获得缓存的效果,但是无论 URL 是什么样子.css,HTTP 服务器通常都会为静态文件设置“缓存我”规则,而为动态文件设置“不要缓存我”规则。

你应该回到开始,你有一个简单的 PHP 程序,.php在 URL 中,然后从你的 PHP 输出缓存控制头。

我建议您阅读一个出色的缓存教程,以确定哪些缓存规则最适合您。

header("Cache-Control: max-age=86400");

… 可能适合“缓存 1 天”。


推荐阅读