<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Posts on Upsonar Blog</title><link>https://upsonar.io/blog/posts/</link><description>Recent content in Posts on Upsonar Blog</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Sat, 11 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://upsonar.io/blog/posts/index.xml" rel="self" type="application/rss+xml"/><item><title>SRI Hash Mismatches: The Silent Dependency Failure Your Monitor Says Is Up</title><link>https://upsonar.io/blog/sri-hash-mismatches-silent-failure/</link><pubDate>Sat, 11 Apr 2026 00:00:00 +0000</pubDate><guid>https://upsonar.io/blog/sri-hash-mismatches-silent-failure/</guid><description>&lt;p>Subresource Integrity is one of the few web-platform security features with zero downsides in theory and a real footgun in practice. The theory is simple: you pin a cryptographic hash of the file you expect, and if a CDN is ever compromised and starts serving something different, the browser refuses to run it. In practice, the browser also refuses to run the file when nothing malicious happened at all — someone just released a patch version, or the minifier output shifted, or a new encoding header changed the bytes. From the browser&amp;rsquo;s point of view, the two cases are indistinguishable.&lt;/p></description></item><item><title>Why Your Uptime Monitor Silently Ignored the Last CDN Outage</title><link>https://upsonar.io/blog/why-uptime-monitors-miss-cdn-outages/</link><pubDate>Sat, 11 Apr 2026 00:00:00 +0000</pubDate><guid>https://upsonar.io/blog/why-uptime-monitors-miss-cdn-outages/</guid><description>&lt;p>June 8, 2021, 9:58 UTC. Fastly pushes a configuration change. A latent bug in their Varnish-based edge detonates globally. For the next hour, Reddit, Amazon, The New York Times, The Guardian, CNN, Gov.uk, Twitch, Shopify, and Stack Overflow are all broken.&lt;/p>
&lt;p>During that hour, every one of those sites&amp;rsquo; uptime monitors reported them as &lt;strong>up&lt;/strong>.&lt;/p>
&lt;p>Not &amp;ldquo;up but degraded&amp;rdquo;. Not &amp;ldquo;warning&amp;rdquo;. Up. HTTP 200 OK.&lt;/p>
&lt;p>This is not a bug in any specific uptime monitor. It is a fundamental category limit of how they work. Here is the technical gap.&lt;/p></description></item><item><title>Free Automated Status Pages That Detect CDN and Third-Party Outages</title><link>https://upsonar.io/blog/free-automated-status-pages/</link><pubDate>Mon, 16 Mar 2026 00:00:00 +0000</pubDate><guid>https://upsonar.io/blog/free-automated-status-pages/</guid><description>&lt;p>A status page is a public-facing dashboard that shows the real-time operational health of your services to customers and stakeholders. Upsonar status pages are now live — create a page, connect your monitors, and publish. Your page updates automatically when something goes down.&lt;/p>
&lt;p>No manual toggling. No &amp;ldquo;we&amp;rsquo;ll update this shortly.&amp;rdquo; Your monitoring data drives the status page in real time.&lt;/p>
&lt;h2 id="why-most-status-pages-fail-during-outages">Why most status pages fail during outages&lt;/h2>
&lt;p>Most status pages today are disconnected from actual monitoring. Someone has to manually change component status during an incident — if they remember. The result: your CDN goes down, your site breaks, but the status page still says &amp;ldquo;All Systems Operational.&amp;rdquo;&lt;/p></description></item><item><title>How to Monitor Third-Party Dependencies on Your Website</title><link>https://upsonar.io/blog/how-to-monitor-third-party-dependencies/</link><pubDate>Thu, 12 Mar 2026 00:00:00 +0000</pubDate><guid>https://upsonar.io/blog/how-to-monitor-third-party-dependencies/</guid><description>&lt;p>Your website loads dozens of external resources on every page view — CDN-hosted JavaScript, Google Fonts, analytics scripts, payment forms, chat widgets. When any of them fails, your page breaks. But most monitoring tools only check your server.&lt;/p>
&lt;p>This guide shows you how to find every external dependency on your site and set up monitoring so you know when one fails — before your users report it.&lt;/p>
&lt;h2 id="step-1-find-your-dependencies">Step 1: Find your dependencies&lt;/h2>
&lt;p>Before you can monitor dependencies, you need to know what they are. Most website owners don&amp;rsquo;t have a complete list of the external resources their pages load.&lt;/p></description></item><item><title>What Is Website Dependency Monitoring (And Why Your Uptime Monitor Isn't Enough)</title><link>https://upsonar.io/blog/what-is-dependency-monitoring/</link><pubDate>Thu, 12 Mar 2026 00:00:00 +0000</pubDate><guid>https://upsonar.io/blog/what-is-dependency-monitoring/</guid><description>&lt;p>Your website doesn&amp;rsquo;t run in isolation. It loads JavaScript from CDNs, fonts from Google, payment forms from Stripe, analytics from third-party vendors. When any of these fail, your users see a broken page — even though your server is perfectly fine.&lt;/p>
&lt;p>Website dependency monitoring is the practice of tracking every external resource your site loads and alerting you when any of them fails. Unlike traditional uptime monitors that only check if your server responds, dependency monitoring checks what your users actually see.&lt;/p></description></item><item><title>Beyond Soft 404s: 5 Ways Your Website Can Return 200 OK But Still Be Broken</title><link>https://upsonar.io/blog/beyond-soft-404s/</link><pubDate>Sun, 08 Mar 2026 00:00:00 +0000</pubDate><guid>https://upsonar.io/blog/beyond-soft-404s/</guid><description>&lt;p>Your uptime monitor says 100% uptime. Google Search Console reports soft 404 errors. Your customers see an error page.&lt;/p>
&lt;p>The status code says 200 OK. The page is broken. Your monitor doesn&amp;rsquo;t know the difference.&lt;/p>
&lt;p>&lt;strong>Key takeaway:&lt;/strong> A 200 OK status code only means your server responded — not that users see the right content. &lt;a href="https://upsonar.io/keyword-monitoring">Keyword monitoring&lt;/a> checks actual page content, catching soft 404s, error pages, and broken deployments that status code monitoring misses.&lt;/p></description></item><item><title>How We Measure HTTP Timing: DNS, TCP, TLS, TTFB Breakdown</title><link>https://upsonar.io/blog/how-we-measure-http-timing/</link><pubDate>Wed, 25 Feb 2026 00:00:00 +0000</pubDate><guid>https://upsonar.io/blog/how-we-measure-http-timing/</guid><description>&lt;p>When you check a website&amp;rsquo;s response time, &amp;ldquo;847ms&amp;rdquo; doesn&amp;rsquo;t tell you much. Is it slow DNS? Network latency? The server itself? You need a breakdown.&lt;/p>
&lt;p>At &lt;a href="https://upsonar.io/blog/">upsonar.io&lt;/a> we show exactly where the time goes. Here&amp;rsquo;s how we do it with Go&amp;rsquo;s &lt;code>net/http/httptrace&lt;/code> package.&lt;/p>
&lt;h2 id="the-problem">The problem&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-go" data-lang="go">&lt;span class="line">&lt;span class="cl">&lt;span class="nx">start&lt;/span> &lt;span class="o">:=&lt;/span> &lt;span class="nx">time&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nf">Now&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">resp&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">_&lt;/span> &lt;span class="o">:=&lt;/span> &lt;span class="nx">http&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nf">Get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;https://example.com&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">fmt&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nf">Println&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">time&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nf">Since&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">start&lt;/span>&lt;span class="p">))&lt;/span> &lt;span class="c1">// 847ms&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>847ms. But why? Could be anything.&lt;/p>
&lt;h2 id="the-solution">The solution&lt;/h2>
&lt;p>&lt;code>httptrace&lt;/code> hooks into every phase of an HTTP request. You attach callbacks, and they fire as each phase completes:&lt;/p></description></item><item><title>Why .dev, .app, .page (and 40+ Other TLDs) Don't Respond to WHOIS</title><link>https://upsonar.io/blog/why-dev-app-page-dont-respond-to-whois/</link><pubDate>Sun, 22 Feb 2026 00:00:00 +0000</pubDate><guid>https://upsonar.io/blog/why-dev-app-page-dont-respond-to-whois/</guid><description>&lt;p>I was building &lt;a href="https://upsonar.io/blog/">upsonar.io&lt;/a> — it monitors uptime, SSL certificates, and domain expiration. When I got to domain expiry alerts, I hit a wall.&lt;/p>
&lt;p>Checked &lt;code>.com&lt;/code>, &lt;code>.org&lt;/code>, &lt;code>.net&lt;/code> — worked fine. Then I tried &lt;code>google.dev&lt;/code>.&lt;/p>
&lt;p>Connection refused.&lt;/p>
&lt;h2 id="the-investigation">The investigation&lt;/h2>
&lt;p>First thought: maybe Google blocks WHOIS queries for their domains? Let me check the WHOIS server for &lt;code>.dev&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">$ whois -h whois.iana.org dev
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Output (trimmed):&lt;/p>
&lt;pre tabindex="0">&lt;code>domain: DEV
organisation: Charleston Road Registry Inc.
...
whois:

status: ACTIVE
remarks: Registration information: https://www.registry.google
&lt;/code>&lt;/pre>&lt;p>See that empty &lt;code>whois:&lt;/code> field? There&amp;rsquo;s no WHOIS server for &lt;code>.dev&lt;/code> at all.&lt;/p></description></item><item><title>Why Most SSL Certificate Monitors Are Blind (And How to Fix It)</title><link>https://upsonar.io/blog/why-most-ssl-monitors-are-blind/</link><pubDate>Thu, 19 Feb 2026 00:00:00 +0000</pubDate><guid>https://upsonar.io/blog/why-most-ssl-monitors-are-blind/</guid><description>&lt;p>Google &amp;ldquo;golang check ssl certificate&amp;rdquo; and every example looks like this:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-go" data-lang="go">&lt;span class="line">&lt;span class="cl">&lt;span class="nx">conn&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">_&lt;/span> &lt;span class="o">:=&lt;/span> &lt;span class="nx">tls&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nf">Dial&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;tcp&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s">&amp;#34;example.com:443&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">&amp;amp;&lt;/span>&lt;span class="nx">tls&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">Config&lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="nx">InsecureSkipVerify&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="kc">true&lt;/span>&lt;span class="p">})&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">cert&lt;/span> &lt;span class="o">:=&lt;/span> &lt;span class="nx">conn&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nf">ConnectionState&lt;/span>&lt;span class="p">().&lt;/span>&lt;span class="nx">PeerCertificates&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">fmt&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nf">Println&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">cert&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">NotAfter&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="c1">// 2026-03-16&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>53 days left. Great. Ship it.&lt;/p>
&lt;p>But your monitor just became blind to 3 out of 4 certificate problems.&lt;/p>
&lt;h2 id="the-insecureskipverify-trap">The InsecureSkipVerify trap&lt;/h2>
&lt;p>&lt;code>InsecureSkipVerify: true&lt;/code> skips all certificate validation - expiry, trust chain, hostname match. The connection is still encrypted, but Go won&amp;rsquo;t check if the cert is actually valid.&lt;/p>
&lt;p>Why do examples use it? Without it, Go refuses to connect if anything is wrong. You get an error instead of certificate details. For a quick script, that&amp;rsquo;s inconvenient.&lt;/p></description></item><item><title>When 200 OK Doesn't Mean Everything Is OK</title><link>https://upsonar.io/blog/when-200-ok-doesnt-mean-everything-is-ok/</link><pubDate>Mon, 16 Feb 2026 00:00:00 +0000</pubDate><guid>https://upsonar.io/blog/when-200-ok-doesnt-mean-everything-is-ok/</guid><description>&lt;p>Last year my site went down. Well, not really &amp;ldquo;down&amp;rdquo; — the server was fine. But users saw a broken page because Cloudflare had issues and my CSS wasn&amp;rsquo;t loading.&lt;/p>
&lt;p>My uptime monitor? Green checkmarks everywhere. 100% uptime. Great job.&lt;/p>
&lt;p>That&amp;rsquo;s when I realized: traditional monitoring is broken.&lt;/p>
&lt;h2 id="the-lie-of-200-ok">The lie of &amp;ldquo;200 OK&amp;rdquo;&lt;/h2>
&lt;p>Every uptime tool does the same thing:&lt;/p>
&lt;pre tabindex="0">&lt;code>GET https://your-site.com → 200 OK → &amp;#34;All good!&amp;#34;
&lt;/code>&lt;/pre>&lt;p>But your site isn&amp;rsquo;t just your server. It&amp;rsquo;s:&lt;/p></description></item><item><title>What Happens When Your Domain Expires (And How to Prevent It)</title><link>https://upsonar.io/blog/what-happens-when-domain-expires/</link><pubDate>Fri, 13 Feb 2026 00:00:00 +0000</pubDate><guid>https://upsonar.io/blog/what-happens-when-domain-expires/</guid><description>&lt;p>Your domain is the foundation of your online presence. Every page, every email, every API endpoint depends on it. When it expires, everything stops — instantly.&lt;/p>
&lt;p>Yet thousands of domains expire every day, often belonging to active businesses that simply forgot to renew. Here&amp;rsquo;s exactly what happens, day by day, and how to make sure it never happens to you.&lt;/p>
&lt;h2 id="the-domain-expiration-timeline">The Domain Expiration Timeline&lt;/h2>
&lt;h3 id="day-0-expiration-date">Day 0: Expiration Date&lt;/h3>
&lt;p>The moment your domain registration expires:&lt;/p></description></item><item><title>Domain Expiration Monitoring: The Complete Guide</title><link>https://upsonar.io/blog/domain-expiration-monitoring-guide/</link><pubDate>Tue, 10 Feb 2026 00:00:00 +0000</pubDate><guid>https://upsonar.io/blog/domain-expiration-monitoring-guide/</guid><description>&lt;p>Domain expiration monitoring is the practice of regularly checking when your domains expire and alerting you before they lapse. It sounds simple, but the consequences of getting it wrong are severe — complete website downtime, lost email, damaged SEO, and potentially losing your domain to squatters.&lt;/p>
&lt;p>This guide covers everything you need to know about monitoring domain expiration effectively.&lt;/p>
&lt;h2 id="why-you-need-domain-expiration-monitoring">Why You Need Domain Expiration Monitoring&lt;/h2>
&lt;p>Most domain owners assume their registrar handles everything. In reality:&lt;/p></description></item><item><title>WHOIS vs RDAP: The Future of Domain Lookups</title><link>https://upsonar.io/blog/whois-vs-rdap/</link><pubDate>Sat, 07 Feb 2026 00:00:00 +0000</pubDate><guid>https://upsonar.io/blog/whois-vs-rdap/</guid><description>&lt;p>For over 40 years, WHOIS has been the go-to protocol for looking up domain registration data. But it&amp;rsquo;s showing its age. RDAP (Registration Data Access Protocol) is the modern replacement that ICANN has been rolling out since 2019.&lt;/p>
&lt;p>If you manage domains, monitor domain expiration, or work with DNS infrastructure, here&amp;rsquo;s what you need to know about both protocols.&lt;/p>
&lt;h2 id="the-short-version">The Short Version&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Feature&lt;/th>
 &lt;th>WHOIS&lt;/th>
 &lt;th>RDAP&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;strong>Created&lt;/strong>&lt;/td>
 &lt;td>1982&lt;/td>
 &lt;td>2015 (RFC 7480-7484)&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;strong>Response format&lt;/strong>&lt;/td>
 &lt;td>Free-form text&lt;/td>
 &lt;td>Structured JSON&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;strong>Authentication&lt;/strong>&lt;/td>
 &lt;td>None&lt;/td>
 &lt;td>Optional (tiered access)&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;strong>Standardization&lt;/strong>&lt;/td>
 &lt;td>Informal&lt;/td>
 &lt;td>IETF standards (RFC)&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;strong>HTTPS support&lt;/strong>&lt;/td>
 &lt;td>No (port 43, plain text)&lt;/td>
 &lt;td>Yes (HTTPS by default)&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;strong>Internationalization&lt;/strong>&lt;/td>
 &lt;td>Limited&lt;/td>
 &lt;td>Full Unicode support&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;strong>Server discovery&lt;/strong>&lt;/td>
 &lt;td>Manual / hardcoded&lt;/td>
 &lt;td>IANA bootstrap registry&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;strong>Status&lt;/strong>&lt;/td>
 &lt;td>Being phased out&lt;/td>
 &lt;td>Replacing WHOIS&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>&lt;strong>For everyday domain checks&lt;/strong>, both give you the same essential information: registration dates, expiry date, registrar, name servers, and status codes.&lt;/p></description></item></channel></rss>