我想知道是否存在类似私有(private) ESI 片段的东西。在 the docs 我读到:

  • "设置共享的最大年龄 - 这也将响应标记为公共(public) "
  • "一旦你开始使用 ESI,记住 总是使用 s-maxage 指令而不是 max-age。因为浏览器只接收聚合资源,它不知道子组件,所以它会服从max-age 指令并缓存整个页面。你不希望那样。”

  • 我不完全了解我是否能够基于每个用户缓存我页面的某些部分。有人可以解释一下吗?

    提前致谢!

    最佳答案

    您可以基于每个用户缓存页面的某些部分。

    他们的关键是清漆配置,你为你的 ttl 设置共享最大年龄,并且
    然后将为该用户缓存该 esi 请求。

    那就看看这个Varnish cookbook caching for logged in users的key
    是您需要一个带有散列用户 ID 的唯一 cookie,并将示例中的 myapp_unique_user_id 替换为您的 cookie 名称。

    这是一个示例 Controller ,其中包含缓存和非缓存操作。

    <?php
    
    namespace MyTest\Bundle\HomepageBundle\Controller;
    
    use Symfony\Bundle\FrameworkBundle\Controller\Controller;
    use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
    use Symfony\Component\HttpFoundation\Response;
    
    class TestController extends Controller
    {
        /**
         * UnCached html content
         *
         * @Route("/test_cache", name="homepage")
         *
         * @return \Symfony\Component\HttpFoundation\Response
         */
        public function homepageAction()
        {
            return $this->render('MyTestHomepageBundle::index.html.twig');
        }
    
        /**
         * Cached user specific content
         *
         * @param integer $myTestUserId
         *
         * @return \Symfony\Component\HttpFoundation\Response
         *
         * @Route("/test_user_cached/{myTestUserId}", name="homepage_user_specific_content")
         */
        public function userSpecificContentAction($myTestUserId)
        {
            $response = $this->render('MyTestHomepageBundle::userSpecificContent.html.twig', array('userId' => $myTestUserId));
            $response->setPublic();
            $response->setSharedMaxAge(3600);
    
            return $response;
        }
    }
    

    这是你的 index.html
    <!DOCTYPE html>
    <head></head>
    <body>
    
    <h1>My Test homepage - {{ "now"|date("F jS \\a\\t g:i:s") }}</h1>
    {{ render_esi(url('homepage_user_specific_content')) }}
    </body>
    

    和 userSpecificContent.html.twig
    UserId: {{ userId }}  - {{ "now"|date("F jS \\a\\t g:i:s") }}
    

    关于caching - Symfony2 : Private ESI Fragment,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17926367/

    10-12 01:23