I’ve been using Argo tunnel to our IIS tunnel for quite a while. I just realized something…
I’m wondering if we should be disabling server push on our IIS server to avoid always pushing files that Cloudflare already has.
First user: Requests index.html
Origin IIS server pushes:
Now the js and css are all cached by cloudflare.
They’re all set to very long TTL since the filenames have embedded thumbprints.
Second user: Requests index.html with a hard refresh
Origin IIS server pushes same js files.
Now isn’t that kind of pointless and inefficient? Even if Cloudflare aborts the push, because they’re in the cache. Isn’t it better for our server to just send the
rel=preload headers, disable push (or HTTP/2 entirely) and let cloudflare grab the individual files it needs…
Remember we may get 100,000 requests for the HTML and the JS/CSS won’t change for days or weeks.
Are all or any of these assumptions true?
Cloudflare does not care if I have actually HTTP/2 pushed a file from the origin (with the HTML) that is then pushed to the end user. It just looks at the
rel=preloadheader and gets the file however it needs it - or gets it from the CF cache.
If push is enabled from the origin server to Argo tunnel daemon - minimal bandwidth is wasted if CF cache already has the file cached as it can abort the push from the origin.
Cloudflare will just request any files it doesn’t yet have from the origin, and will push them as soon as they’re available.
I can set
rel=preloadheaders from my origin even if push is actually disabled in IIS - and everything will work ok.
If we disable the push functionality in IIS we may get slightly better overall efficiency in bandwidth and speed because it will reduce unnecessary pushing.
If disabling HTTP/2 push at my origin is advisable is there an Argo option for this or do I have to screw around in the registry.
Or does Argo cloudflared daemon not even talk to my IIS server with HTTP/2 in the first place? And if so is it to avoid these exact concerns !!!