<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>HTTP foundations · XB Field Notes</title><link>https://www.xbcatm.com/series/http-foundations/</link><description>Illustrated field notes on HTTP, DNS, TLS, Caddy, SSH, releases, and recovery.</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://www.xbcatm.com/series/http-foundations/index.xml" rel="self" type="application/rss+xml"/><item><title>Content-Type should describe the bytes you actually send</title><link>https://www.xbcatm.com/notes/content-type-should-describe-the-bytes-you-actually-send/</link><pubDate>Sun, 23 Aug 2026 00:00:00 +0000</pubDate><guid>https://www.xbcatm.com/notes/content-type-should-describe-the-bytes-you-actually-send/</guid><description>Check media types at the public edge and use nosniff to make mismatches fail visibly.</description></item><item><title>HEAD should describe the same representation as GET</title><link>https://www.xbcatm.com/notes/head-should-describe-the-same-representation-as-get/</link><pubDate>Sun, 23 Aug 2026 00:00:00 +0000</pubDate><guid>https://www.xbcatm.com/notes/head-should-describe-the-same-representation-as-get/</guid><description>Compare HEAD and GET metadata without confusing a missing body with a different resource.</description></item><item><title>Range requests should prove which bytes were selected</title><link>https://www.xbcatm.com/notes/range-requests-should-prove-which-bytes-were-selected/</link><pubDate>Sun, 23 Aug 2026 00:00:00 +0000</pubDate><guid>https://www.xbcatm.com/notes/range-requests-should-prove-which-bytes-were-selected/</guid><description>Verify partial responses, Content-Range, and the behavior of unsatisfiable byte ranges.</description></item><item><title>Cache headers are a contract with two clocks</title><link>https://www.xbcatm.com/notes/cache-headers-are-a-contract-with-two-clocks/</link><pubDate>Sat, 22 Aug 2026 00:00:00 +0000</pubDate><guid>https://www.xbcatm.com/notes/cache-headers-are-a-contract-with-two-clocks/</guid><description>Choose freshness and revalidation rules from how often a representation can change.</description></item><item><title>Compression changes the selected HTTP representation</title><link>https://www.xbcatm.com/notes/compression-changes-the-selected-http-representation/</link><pubDate>Sat, 22 Aug 2026 00:00:00 +0000</pubDate><guid>https://www.xbcatm.com/notes/compression-changes-the-selected-http-representation/</guid><description>Treat content encoding, validators, and Vary as one observable response contract.</description></item><item><title>Redirects and error codes should preserve the story</title><link>https://www.xbcatm.com/notes/redirects-and-error-codes-should-preserve-the-story/</link><pubDate>Sat, 22 Aug 2026 00:00:00 +0000</pubDate><guid>https://www.xbcatm.com/notes/redirects-and-error-codes-should-preserve-the-story/</guid><description>Use permanent redirects and absence codes to describe what happened, not to hide a broken route.</description></item><item><title>robots.txt and sitemaps answer different questions</title><link>https://www.xbcatm.com/notes/robots.txt-and-sitemaps-answer-different-questions/</link><pubDate>Sat, 22 Aug 2026 00:00:00 +0000</pubDate><guid>https://www.xbcatm.com/notes/robots.txt-and-sitemaps-answer-different-questions/</guid><description>Keep crawler preferences, URL discovery, and access control separate.</description></item></channel></rss>