You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无需ESI标签,如何在PHP中引入CDN缓存的完整URL HTML片段?

PHP实现外部HTML片段的CDN缓存(非ESI方式)

可以实现,但需要PHP配合CDN的缓存规则来操作,核心是把要缓存的HTML片段单独做成CDN可缓存的独立资源,再动态引入到PHP页面里,具体思路如下:

  • 第一步:配置CDN缓存目标片段
    先把https://www.example.org/abc.html这个页面配置成CDN可缓存的资源:给这个页面的响应头加上合适的缓存规则,比如设置Cache-Control: public, max-age=3600,让CDN识别到这是可以缓存的内容,后续请求直接返回CDN缓存的版本。

  • 第二步:在PHP页面中引入缓存片段
    有两种常用的实现方式:

    1. 直接请求并输出:用PHP的file_get_contents()或者curl工具请求CDN缓存后的片段地址,然后把内容输出到当前页面中。示例代码:
      // 替换成你的CDN加速后的abc.html地址
      $cached_fragment = file_get_contents('https://cdn.example.org/abc.html');
      echo $cached_fragment;
      
      要是服务器关闭了allow_url_fopen,就用curl替代:
      $ch = curl_init('https://cdn.example.org/abc.html');
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      $cached_fragment = curl_exec($ch);
      curl_close($ch);
      echo $cached_fragment;
      
      记得加上异常处理,万一请求失败可以输出备用内容:
      $cached_url = 'https://cdn.example.org/abc.html';
      $cached_fragment = @file_get_contents($cached_url);
      if ($cached_fragment === false) {
          echo '<div>加载失败,显示备用内容</div>';
      } else {
          echo $cached_fragment;
      }
      
    2. HTML标签嵌入:如果片段允许独立嵌套,可以用<iframe>或者<object>标签直接引入,但这种方式会多一次HTTP请求,还可能有样式兼容问题,一般更推荐第一种方式。
  • 关键注意点

    • 要确保动态的PHP页面本身不被CDN缓存:给PHP页面的响应头设置Cache-Control: private, no-cache,这样整个动态页面会实时生成,但其中的片段是CDN缓存好的静态内容。
    • 目标片段的缓存规则要设置合理:比如根据内容更新频率调整max-age的值,避免缓存过期后用户看不到最新内容。

内容的提问来源于stack exchange,提问作者user2193480

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 15:22:11