Cache Everything is one Cloudflare cache level. Ignore Query String is another.
If you pick Cache Everything, your HTML will be cached (you can use Edge Cache TTL set as suggested by @sdayman to override origin cache-control settings if needed), but each query string will be treated as a different URL.
If you pick Ignore Query String, your static files (images, JS, CSS etc) with query strings (such as &ver=123, for example) will have the query string removed for cache purposes, but your HTML will not be cached.
EDIT: In order to mix them, you need either Enterprise Plan or Workers. If you do have an Enterprise Plan, you should use the cache key either in the same page rule that sets “cache everything” or in a worker, as explained here:
Why wouldn’t the HTML be cached under “Ignore Query String” – it’s a page rule. They said one could use page rules to cache HTML. Why would HTML be excluded from the “Ignore Query String” rule LOLOL?
OH, I get it - they introduced a bug on purpose to sell more Enterprise licenses.
Got it.
@cbrandt - I do thank you for your response, glad I only wasted 1/2 day on this. Really appreciate the reply.
Cloudflare has a right to earn money so I can’t complain too much, but this really feels like a bug that shouldn’t be there, or at best should be documented / more obvious / etc.
It also feels like it leaves the door open for someone to DOS attack. If someone wanted to hammer my site they could simply get the main page with different query parameters and overload the server. Caching HTML while ignoring query string would have prevented that.