php - 按需生成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 文件?
解决方案
让我们退后一步,看看实际的问题:
- 您想使用 PHP 生成 CSS
- 您不希望浏览器在每次加载新页面时都重新请求它
这个问题的解决方案是缓存。
您似乎试图通过在 URL 中使用来获得缓存的效果,但是无论 URL 是什么样子.css
,HTTP 服务器通常都会为静态文件设置“缓存我”规则,而为动态文件设置“不要缓存我”规则。
你应该回到开始,你有一个简单的 PHP 程序,.php
在 URL 中,然后从你的 PHP 输出缓存控制头。
我建议您阅读一个出色的缓存教程,以确定哪些缓存规则最适合您。
header("Cache-Control: max-age=86400");
… 可能适合“缓存 1 天”。
推荐阅读
- javascript - 使用 jquery 而不是第一个单词在引导模式中显示完整字符串
- r - 在具有唯一行的多列中计算是/否
- java - 如何从另一个类调用一个类的方法?
- swiftui - 无法使用结合 SwiftUI 从 URL 获取响应
- perl - 如何在 List::Util 中使用与 sort 或 reduce 相同的签名编写子代码
- python - 更改值中的特定位
- powershell - powershell decode gzip stream 编码字符串
- json - Azure 中从 API 到 SQL 的平面 JSON
- makefile - 当 SHELL 包含包含时,make 命令返回根文件夹而不是 WSL2 中的当前文件夹
- javascript - 如何使用 Google Apps 脚本在 Charts Service 中生成带有甜甜圈洞的 3D 图表?