web-dev-qa-db-ja.com

Cloudflare:URLにクエリ文字列がある場合に静的HTMLをキャッシュする

CloudFlareの「新規ユーザー」に関する簡単な質問:

背景:Originサーバーが提供するHTMLページは変更されません。ページがユーザーのブラウザにロードされた後、すべての動的コンテンツはJavaScriptを介してダウンロードされます。 JavaScriptによって派生した動的コンテンツは、URLのクエリ文字列に一部依存しますが、クエリ文字列自体は、最初にダウンロードされたHTMLコンテンツには影響しません。したがって、次のURLはすべて、ブラウザのJavaScriptによって処理される前に、Originからexactly同じHTMLを生成します。

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] はすべてのユーザーに返されますか?私が試したものは次のとおりです。

「すべてキャッシュ」:「すべてキャッシュ」ディレクティブを使用すると、HTMLがキャッシュされます(良い)が、クエリキー全体がキャッシュキーの一部として使用されます(悪い)。ユーザーが次のURLにアクセスすると...

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

...そして、10秒後に、次のような異なるクエリ文字列で同じURLにヒットします。

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

... CloudFlareは、後者のリクエストをキャッシュMISS(cf-cache-status:MISS)として処理し、Originサーバーに再度アクセスします。これは、Originから返されたHTMLが両方のURLで同一であるという事実にもかかわらずです。

「IGNORE QUERY STRING CACHING:」「IGNORE QUERY STRING CACHING」オプションを選択して、この問題を確実に解決すると思いました。ただし、ページルールでこのオプションを使用すると、HTMLはまったくキャッシュされません。 .js、.css、および.pngファイルのみがキャッシュされます。また、HTMLデータを呼び出すたびにOriginがヒットします。 :(

明らかな何かを見逃しているに違いないと思う。何かご意見は?

UPDATE:あなたが実行したいアイデアがありました。 「?」の代わりに「#」を使用するように内部URLスキームを変更して、この問題を解決できますか?のようなURLの代わりに...

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

..私は次のようなものを使用します:

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

これにより、クエリ文字列パラメーターがCloudFlareにまったく送信されなくなります...どう思いますか?

フェストゥス

10

(質問を回答済みとしてマークするために@Festus Martingaleに回答が追加されました)。

?#に置き換えると、ハッシュフラグメントとして表示されるクエリ文字列がcloudflareに送信されなくなるため、問題が解決しました。

4