<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Https · XB 现场笔记</title><link>https://www.xbcatm.com/zh/tags/https/</link><description>基于 HTTP、DNS、TLS、Caddy、SSH、发布与恢复的可复现运维现场笔记。</description><generator>Hugo</generator><language>zh-CN</language><atom:link href="https://www.xbcatm.com/zh/tags/https/index.xml" rel="self" type="application/rss+xml"/><item><title>用两条命令读取公共边缘</title><link>https://www.xbcatm.com/zh/notes/read-the-public-edge-in-two-commands/</link><pubDate>Mon, 24 Aug 2026 00:00:00 +0000</pubDate><guid>https://www.xbcatm.com/zh/notes/read-the-public-edge-in-two-commands/</guid><description>对活动站点运行只读探针，让响应头与证书日期确认你以为部署的东西。</description><content:encoded>&lt;p&gt;一次部署，是当公共边缘与你选择的文件一致时才完成，而不是因为最后一条上传命令退出码为零。操作套件里的两个只读小工具，能让任何能到达主机的机器看到这种一致性。&lt;/p&gt;
&lt;h2 id="检查响应头"&gt;检查响应头&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;check-http-headers.sh&lt;/code&gt; 抓取一个 URL，并打印响应行、响应头与重定向后的最终 URL：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;check-http-headers.sh https://www.xbcatm.com/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;最近对本站一次运行的结果：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;HTTP/2 200
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;server: nginx
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;content-type: text/html; charset=utf-8
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;content-security-policy: default-src &amp;#39;self&amp;#39;; script-src &amp;#39;none&amp;#39;; ...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;strict-transport-security: max-age=31536000; includeSubDomains
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;x-content-type-options: nosniff
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;注意正文被丢弃，只显示响应线之外的状态行。要比较一次发布前后的变化，保存一份基线并把新的输出与之相减。&lt;/p&gt;
&lt;h2 id="读取证书日期"&gt;读取证书日期&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;check-tls-expiry.sh&lt;/code&gt; 从 TLS 握手读取服务器证书的过期日期，而不改变服务：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;check-tls-expiry.sh www.xbcatm.com &lt;span class="m"&gt;30&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;它打印证书的 &lt;code&gt;notAfter&lt;/code&gt; 以及到该日期剩余的天数。如果剩余天数低于阈值，它以非零状态退出——适合加进发布冒烟测试。&lt;/p&gt;
&lt;h2 id="发布冒烟测试里它们配合使用"&gt;发布冒烟测试里它们配合使用&lt;/h2&gt;
&lt;p&gt;排定发布冒烟测试时，让一个命令确认法着陆状态，另一个确认即将过期的证书。剩下的剩余风险是活动报表之外、真正浏览无法发现的内容——例如重量级第三方脚本，或是仅在大流量出现的缓存问题。一条只读输出现场完成不了这些，仍需一次真实的浏览器会话。&lt;/p&gt;
&lt;h2 id="来源"&gt;来源&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.rfc-editor.org/rfc/rfc9110.html"&gt;RFC 9110 — HTTP Semantics&lt;/a&gt;，响应语义与条件请求，已核验 2026-08-24。&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.openssl.org/3.0/man1/openssl-s_client/"&gt;OpenSSL &lt;code&gt;s_client&lt;/code&gt;&lt;/a&gt;，TLS 连接与证书日期检查，已核验 2026-08-24。&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.xbcatm.com/zh/resources/"&gt;制品 HTTP 响应头检查&lt;/a&gt;，贯穿本记录使用的只读检查。&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item></channel></rss>