Search code examples
magnoliashare-open-graphrange-header

Magnolia: Range request doesn't serve content when cache filter enabled resulting in Facebook Sharing not to work


When sending an HTTP request with a Range header to Magnolia I get a Response with 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

However, when I disable the Magnolia Cache Module I get the expected response:

/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

I got the problem that the Facebook crawler isn't able to detect any open graph meta tags when trying to crawl my website. I think the reason is the above described problem with sending range requests to Magnolia (What the Facebook crawler does).

My Open Graph tags are properly set (Working for opengraphcheck and Twitter Card Validator).

I'm using Magnolia 5.7.1.


Solution

  • The simplest work around is to configure request header voter to bypass cache when range header is present.
    See RequestHeaderPatternSimpleVoter and/or RequestHeaderPatternRegexVoter for more details on how to set it, but I would still consider it workaround and not final solution.

    It seems weird that such thing should be happening. Could you replicate it against e.g. https://demo.magnolia-cms.com?