Cloudflare Tunnel removes range HTTP header

I’ve recently been experimenting with Cloudflare Tunnel and I absolutely love the concept. I’m aware that its intended use case is for serving small HTML, CSS, and Javascript files, along with maybe some images, but as an experiment, I wanted to try serving a larger file over the proxy. For this test, I chose a (roughly) 100 MB video file and set up an HTTP server to take advantage of 206 Partial Content, sending the file in 10 MB chunks, and basing those chunks on the range header sent by the client. With this setup, I came across something interesting: It seems as if the range header is being completely removed from client requests upon passing through the proxy, as it’s absent once it reaches the server. The header is present when connecting over localhost. The result of this behaviour is that the video plays all the way through when viewing locally, but stops after the first chunk is downloaded over the proxy.

I’m aware that the ToS prohibits “serving video or a disproportionate percentage of pictures, audio files, or other non-HTML content,” and I don’t intend to use Tunnel for serving these files in production. With that said, and for experimental purposes, I’m curious if the removal of the client range header is intentional or if it’s a bug of some kind.


I’ve noticed the same - feels like a bug to me.

It is intentional.

Please check Terms Of Use

You’re only allowed to stream range request from resources provided by Cloudflare like R2, Stream, …