HTTP 200 OK x-cache: Hit from edge

This page is just an object in a bucket.

No origin server. No runtime. No request-time build. Everything you're reading was uploaded as static files to an Amazon S3 bucket, then handed straight to your browser over HTTPS from the nearest edge. And yes — the JavaScript still runs.

bucket objectly-demo-site region eu-central-1 rendered (UTC) 

The request lifecycle

Four hops from your address bar to a stored object.

A static site skips the application tier entirely. The bytes you're reading travelled a fixed, cacheable path — which is exactly why it's fast, cheap, and hard to knock over.

Browser

GET / HTTP/2

Resolves DNS and asks for the page over TLS.

CloudFront

edge cache · TLS 1.3

The nearest edge serves a cached copy — or fetches once from origin.

S3 bucket

static website hosting

The origin: a bucket with website hosting on and a read-only access policy.

The object

key: index.html

One object, Content-Type text/html, streamed back byte-for-byte.

round-trip demo · — ms
0
S3 designed availability, Standard storage class
0
Servers to patch, restart, or SSH into
0
Nines of object durability by design
0
CloudFront points of presence worldwide

Why static, why S3

The whole surface area is a folder of files.

Fewer moving parts is a feature. Here's what you inherit for free when the site is just objects.

Edge-fast by default

Cached at 600+ CloudFront locations, so the first byte comes from a city near the visitor — not a single region.

HTTPS end to end

A free ACM certificate on CloudFront terminates TLS 1.3 at the edge. No cert-renewal cron jobs, ever.

Eleven nines of durability

Every object is redundantly stored across multiple facilities. You lose sleep over deploys, not disks.

Zero runtime to attack

No app server, no database, no interpreter at request time. The attack surface is a read-only file listing.

Deploy is a sync

Push new files with one aws s3 sync, invalidate the cache, and you're live. Roll back by re-syncing.

Scales to a spike

A launch, a front-page link, a bot storm — S3 absorbs it without an autoscaling group in sight.

Ship it

Three commands from a folder to a live URL.

This exact page went live the same way. Build your static files, sync them to the bucket, and let CloudFront invalidate the old copy.

  • Create the bucket and enable static website hosting with index.html as the index document.
  • Sync your files with the right cache headers and content types.
  • Invalidate the edge so visitors get the new version immediately.
deploy.sh — bash
$ aws s3 sync ./dist s3://objectly-demo-site \
    --delete --cache-control "max-age=31536000"
upload: dist/index.html → s3://objectly-demo-site/index.html
✓ 1 file uploaded · 0 removed

$ aws cloudfront create-invalidation \
    --distribution-id E1XY2Z --paths "/*"
✓ invalidation IXN…7QA created
aws s3 sync ./dist s3://objectly-demo-site --delete --cache-control "max-age=31536000"

Your turn

Point a bucket at a folder. Ship the whole web.

Everything here is one HTML file. Copy the deploy command, drop your own files in a bucket, and you'll be serving from the edge in minutes.

Copied to clipboard