Magnolia:启用缓存过滤器导致 Facebook 共享无法正常工作时,范围请求不提供内容

Posted

技术标签:

【中文标题】Magnolia:启用缓存过滤器导致 Facebook 共享无法正常工作时,范围请求不提供内容【英文标题】:Magnolia: Range request doesn't serve content when cache filter enabled resulting in Facebook Sharing not to work 【发布时间】:2019-12-19 09:14:48 【问题描述】:

当向 Magnolia 发送带有 Range 标头的 HTTP 请求时,我得到一个响应 Content-Length: 0:

        curl -I -X GET \
          http://localhost:8080/ \
          -H 'Accept-Encoding: gzip, deflate' \
          -H 'Cache-Control: no-cache' \
          -H 'Range: bytes=0-2000'
        HTTP/1.1 206
        Set-Cookie: SID=C36D961EC92D152724BBCD0C34EC6536; Path=/; HttpOnly
        X-Magnolia-Registration: Registered
        Accept-Ranges: bytes
        Cache-Control: no-cache, no-store, must-revalidate, max-age=0
        ETag: 8B4901E7DD862E5E74287A0F538DCDDFEB78DE77
        Content-Range: bytes 0-2000/23529
        Content-Encoding: gzip
        Vary: Accept-Encoding
        Pragma: no-cache
        Expires: Thu, 01 Jan 1970 00:00:00 GMT
        Last-Modified: Thu, 19 Dec 2019 08:52:49 GMT
        Content-Type: text/html;charset=UTF-8
        Content-Length: 0
        Date: Thu, 19 Dec 2019 08:52:49 GMT

但是,当我禁用 Magnolia 缓存模块时,我得到了预期的响应:

/server/filters/cache -> enabled: false

        curl -I -X GET \
          http://localhost:8080/ \
          -H 'Accept-Encoding: gzip, deflate' \
          -H 'Cache-Control: no-cache' \
          -H 'Range: bytes=0-2000'
        HTTP/1.1 206
        Set-Cookie: SID=FF557EC1F0653E5CBD81A57D599091AE; Path=/; HttpOnly
        X-Magnolia-Registration: Registered
        Accept-Ranges: bytes
        ETag: 2A9DE4F4B2ACDDE22BAC3C07784CD65693574B67
        Content-Range: bytes 0-2000/2147483647
        Content-Type: text/html;charset=UTF-8
        Content-Length: 2001
        Date: Thu, 19 Dec 2019 08:51:49 GMT

我遇到的问题是 Facebook 爬虫在尝试爬取我的网站时无法检测到任何打开的图元标记。我认为原因是上述向 Magnolia 发送范围请求的问题(Facebook crawler 的作用)。

我的 Open Graph 标签设置正确(适用于 opengraphcheck 和 Twitter Card Validator)。

我正在使用 Magnolia 5.7.1。

【问题讨论】:

localhost:8080 - 是作者还是公共实例? @Jan 这是公共实例 嗯,当你刷新缓存然后尝试卷曲页面时?你得到了什么?还是坏了吗? 【参考方案1】:

最简单的解决方法是配置请求标头投票器以在存在范围标头时绕过缓存。 有关如何设置它的更多详细信息,请参阅RequestHeaderPatternSimpleVoter 和/或RequestHeaderPatternRegexVoter,但我仍然认为它是解决方法而不是最终解决方案。

这样的事情应该发生似乎很奇怪。你能复制它吗? https://demo.magnolia-cms.com?

【讨论】:

使用RequestHeaderPatternRegexVoter 可以解决问题,谢谢!但是,正如您提到的,这是针对不应发生的意外行为的解决方法。我无法在 Magnolia 6.1.4 上运行的 demopublic.magnolia-cms.com 上重现该问题。也许我的旧版本(5.7.1)会导致问题。我向 Magnolia 支持人员报告了该问题。 谢谢,也解决了我的问题,之前在 LinkedIn 条目中插入 url 失败(LinkedIn Post Inspector 中的错误)。玉兰 5.7.9。现在检查 Magnolia 支持。

以上是关于Magnolia:启用缓存过滤器导致 Facebook 共享无法正常工作时,范围请求不提供内容的主要内容,如果未能解决你的问题,请参考以下文章

Magnolia“页面感知”缓存

Magnolia:如何在多值复合字段中启用 I18N?

JcrExportCommand 过滤器以排除 magnolia cms 中的“mgnl:page”

org.quartz.SchedulerException:调度程序已在 Magnolia 中关闭

Magnolia 5.5.5 Magnolia 中的索引配置

在 ASP.NET MVC 5 应用程序中启用 SSL 会导致 OpenIdConnectProtocolValidator 问题