Cloudflare: кэшировать статический HTML, когда URL имеет строку запроса


10

Быстрый CloudFlare «новый пользователь» вопрос для вас:

ПРЕДПОСЫЛКИ: HTML-страницы, обслуживаемые моим исходным сервером, никогда не меняются. Весь динамический контент загружается через JavaScript после загрузки страницы в браузере пользователя. Динамическое содержимое, полученное с помощью JavaScript, частично зависит от строки запроса URL-адреса, но сама строка запроса не влияет на изначально загруженное содержимое HTML. Поэтому все следующие URL-адреса генерируют точно такой же HTML из источника до того, как в браузере на него воздействует JavaScript:

https://www.example.com/private/my-investments?portfolioID=296

https://www.example.com/private/my-investments?portfolioID=325

https://www.example.com/private/my-investments?portfolioID=319

ВОПРОС: Учитывая, что CloudFlare по умолчанию не кэширует HTML, как мне составить мои правила страницы, чтобы одна кэшированная копия https://www.example.com/private/my-investments?[anyValue] возвращалась всем пользователям ? Вот что я попробовал:

«CACHE EVERYTHING:» Использование директивы «Cache Everything» вызывает кэширование моего HTML (хорошо), но при этом используется вся строка запроса как часть ключа кэша (плохо). Так что, если пользователь нажимает следующий URL ...

https://www.example.com/private/my-investments?portfolioID=296

... и затем через десять секунд тот же URL попадает в другую строку запроса, например:

https://www.example.com/private/my-investments?portfolioID=325

... CloudFlare обрабатывает этот последний запрос как MISS кеша (cf-cache-status: MISS) и снова обращается к моему исходному серверу. Это несмотря на то, что HTML-код, возвращаемый из источника, идентичен для обоих URL-адресов.

«IGNORE QUERY STRING CACHING:« Я точно думал, что исправлю эту проблему, выбрав опцию «IGNORE QUERY STRING CACHING». Но при использовании этой опции в правиле страницы, HTML вообще не кэшируется; Кешируются только файлы .js, .css и .png. И снова мое происхождение получает удар для каждого отдельного вызова данных HTML. :(

Я чувствую, что, должно быть, упускаю что-то очевидное. Есть предположения?

ОБНОВЛЕНИЕ : была идея, которой я хочу управлять Вами. Могу ли я решить эту проблему, изменив мою внутреннюю схему URL-адресов на «#» вместо «?» Так что вместо URL, как ...

https://www.example.com/private/my-investments?portfolioID=296

..Я бы использовал что-то вроде:

https://www.example.com/private/my-investments#portfolioID=296

Это предотвратит передачу параметров строки запроса в CloudFlare вообще ... Как вы думаете?

Фест


Использование «#» вместо «?» в URL решена проблема. Сисопы могут пойти дальше и удалить мой вопрос.
Фест Мартингейл

4
Другие могут извлечь уроки из того, что вы выяснили здесь, так что, возможно, вы можете предоставить то, что вы сделали выше, в качестве ответа (с небольшой детализацией) и принять это, когда сможете. Спасибо.
Дан

Ответы:


4

(Ответ добавлен для @Festus Martingale, чтобы пометить вопрос как ответ).

Замена ?с #решена проблема , поскольку он предотвращает строку запроса, передаваемые от CloudFlare , как представляется в виде фрагмента хэш.


Меня зовут Фест. Я отметил это как ответ.
Фест Мартингейл
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.