Cloudflare Pages

Cloudflare Pages is a fast, free, and surprisingly painless way to host static sites. Think of it as GitHub Pages, but with fewer quirks and a lot more control. I ended up using it after bouncing between a few hosting options that either broke my .mobileconfig MIME type, forced sign‑ups, or tried to "helpfully" rewrite my headers into oblivion.

Pages doesn't do that. It just serves what you give it — which is exactly what I needed.

Key Features

⚡ Fast global CDN

My files deploy to Cloudflare's edge network, which means they load quickly everywhere. Even when I was testing from a mobile hotspot, the response times were solid.

🔐 Built‑in SSL

No configuration, no certificates, no fiddling. The moment your site goes live, HTTPS is already handled.

🔄 Git‑based deployments

Every push to my GitHub repo triggers a new build. This was especially useful when I was iterating on my _headers file to get the correct MIME type for .mobileconfig.

🛠 Custom headers

This is the feature that saved me. I dropped a _headers file into the repo, deployed, and Pages served the exact Content-Type I specified. No silent overrides. No "helpful" transformations. Just… correct behavior.

Why I Use It

Performance without babysitting

I don't have to think about caching, regions, or build servers. It just works, and it works everywhere.

Security by default

Automatic SSL and Cloudflare's edge protections mean I don't have to worry about someone intercepting a config profile or messing with the delivery.

Zero friction

I've used Netlify, GitHub Pages, and a few random "free static hosts." Cloudflare Pages is the only one that didn't fight me when I needed a very specific MIME type. When you're distributing a .mobileconfig, that matters.

My Workflow Example

Here's the exact flow I used when hosting my .mobileconfig file:

  1. Create a GitHub repo — Just a simple folder with my HTML, assets, and the .mobileconfig file.
  2. Add a _headers file — Mine looked like this:
    /profile.mobileconfig
      Content-Type: application/x-apple-aspen-config
  3. Connect the repo to Cloudflare Pages — One click, choose the repo, and Pages handles the rest.
  4. Deploy — Every push triggers a new build. I used this to test MIME types quickly — commit, push, test on iOS, repeat.
  5. Verify headers — I used PowerShell to confirm the server was returning the correct Content-Type. Pages passed on the first try.
  6. Test on iOS — The profile installed cleanly with no warnings, no corruption, and no "this file cannot be opened" errors.

This workflow took minutes, not hours, and required zero hacks.

Getting Started

If you want to try it yourself:

  1. Create a GitHub repo
  2. Add your static files
  3. Add a _headers file if you need custom MIME types
  4. Connect the repo to Cloudflare Pages
  5. Deploy and test

That's it. No YAML, no build scripts, no platform‑specific magic.

Final Thoughts

Cloudflare Pages has become my go‑to for hosting anything static — especially files that require precise headers. It's fast, predictable, and doesn't get in your way. I'll be writing more about my setup soon, including how I validated MIME types, how I structured the repo, and how I tested installation flows on iOS.