<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>ratazzi (ratazzi)</title>
    <link>https://ruby-china.org/ratazzi</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>Vibe coding 友好：开发环境专用网关，mDNS 发布主机名本地访问，一键 Cloudflare Tunnel 共享</title>
      <description>&lt;p&gt;做了一个本地开发网关 &lt;a href="https://github.com/ratazzi/coulson" rel="nofollow" target="_blank" title=""&gt;Coulson&lt;/a&gt;，灵感来自早年 macOS 上的 &lt;a href="http://pow.cx/" rel="nofollow" target="_blank" title=""&gt;Pow&lt;/a&gt;，用 Rust 重写并大幅扩展。&lt;/p&gt;

&lt;p&gt;核心思路：&lt;strong&gt;告别 &lt;code&gt;localhost:端口号&lt;/code&gt;，每个项目一个 &lt;code&gt;.local&lt;/code&gt; 域名，链接即用&lt;/strong&gt;。&lt;/p&gt;
&lt;h2 id="解决什么问题"&gt;解决什么问题&lt;/h2&gt;
&lt;p&gt;本地开发经常遇到：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;同时跑好几个项目，记不住谁是哪个端口&lt;/li&gt;
&lt;li&gt;想在手机上测试，得查 IP、开防火墙&lt;/li&gt;
&lt;li&gt;想给同事/甲方看一眼效果，搞内网穿透折腾半天&lt;/li&gt;
&lt;li&gt;调试 webhook 回调，需要一个公网能访问的地址，请求失败了还得让对方重发&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Coulson 用一套方案覆盖这些场景。&lt;/p&gt;
&lt;h2 id="使用方式"&gt;使用方式&lt;/h2&gt;
&lt;p&gt;安装：下载 &lt;a href="https://github.com/ratazzi/coulson/releases" rel="nofollow" target="_blank" title=""&gt;Coulson.app&lt;/a&gt; 打开即可，守护进程自动启动。&lt;/p&gt;
&lt;h3 id="1. 端口代理 — 一行搞定"&gt;1. 端口代理 — 一行搞定&lt;/h3&gt;
&lt;p&gt;已有服务跑在 3000 端口：&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo &lt;/span&gt;3000 &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; ~/.coulson/myapp
&lt;span class="c"&gt;# 访问 http://myapp.coulson.local:18080/&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;文件名就是域名前缀，写入端口号就完事了。&lt;/p&gt;
&lt;h3 id="2. Python / Node.js — 首次访问自动启动"&gt;2. Python / Node.js — 首次访问自动启动&lt;/h3&gt;
&lt;p&gt;软链接项目到 &lt;code&gt;~/.coulson/&lt;/code&gt;，Coulson 自动识别并管理进程：&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;ln&lt;/span&gt; &lt;span class="nt"&gt;-s&lt;/span&gt; ~/Projects/hello ~/.coulson/hello
&lt;span class="c"&gt;# 访问 http://hello.coulson.local:18080/&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Python：检测到 &lt;code&gt;app.py&lt;/code&gt; + &lt;code&gt;pyproject.toml&lt;/code&gt; → 自动用 uvicorn/granian 启动&lt;/li&gt;
&lt;li&gt;Node.js：检测到 &lt;code&gt;package.json&lt;/code&gt; → 自动识别包管理器（bun/pnpm/yarn/npm），运行 dev 脚本&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;空闲 15 分钟自动回收，下次访问再拉起。&lt;/p&gt;
&lt;h3 id="3. 手机/局域网 — mDNS 直连"&gt;3. 手机/局域网 — mDNS 直连&lt;/h3&gt;
&lt;p&gt;在 Web 控制台或菜单栏应用中给项目开启「LAN Access」，&lt;code&gt;.local&lt;/code&gt; 域名通过 mDNS 发布，同网段的手机、平板等设备即可直接访问。&lt;/p&gt;
&lt;h3 id="4. 公网分享 — 一条命令"&gt;4. 公网分享 — 一条命令&lt;/h3&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;coulson tunnel start myapp
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;生成公网链接（基于 Cloudflare Tunnel），发给任何人即可访问。支持快速隧道（随机 URL）和命名隧道（自有域名泛解析，新增项目即时可达）。&lt;/p&gt;
&lt;h3 id="5. 请求记录与重放"&gt;5. 请求记录与重放&lt;/h3&gt;
&lt;p&gt;对项目开启 Inspect，网关自动记录每个请求的完整信息，可在 Web 控制台回看并一键重放。调试 webhook 不用再让对方重发。&lt;/p&gt;
&lt;h2 id="为什么说 Vibe coding 友好"&gt;为什么说 Vibe coding 友好&lt;/h2&gt;
&lt;p&gt;在外面用手机或平板 SSH 到开发机，通过 Claude Code、OpenCode、Codex 这些终端工具 vibe coding，服务跑起来了但没法预览。开一条 Tunnel，项目即时获得公网地址，在手机浏览器里直接看效果。&lt;/p&gt;
&lt;h2 id="其他特性"&gt;其他特性&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Web 控制台 + macOS 菜单栏应用&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;sudo coulson trust&lt;/code&gt; 一键信任本地 CA，开启 HTTPS&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;sudo coulson trust --pf&lt;/code&gt; 接管 80/443，省略端口号&lt;/li&gt;
&lt;li&gt;同域名多路由（按路径前缀分发到不同后端）&lt;/li&gt;
&lt;li&gt;配置变更 2 秒内自动生效&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="技术栈"&gt;技术栈&lt;/h2&gt;
&lt;p&gt;Rust + &lt;a href="https://github.com/cloudflare/pingora" rel="nofollow" target="_blank" title=""&gt;Pingora&lt;/a&gt;（Cloudflare 开源的反向代理库）、Swift（macOS 菜单栏应用）。&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/ratazzi/coulson" rel="nofollow" target="_blank"&gt;https://github.com/ratazzi/coulson&lt;/a&gt;&lt;/p&gt;</description>
      <author>ratazzi</author>
      <pubDate>Sat, 28 Feb 2026 11:00:56 +0800</pubDate>
      <link>https://ruby-china.org/topics/44494</link>
      <guid>https://ruby-china.org/topics/44494</guid>
    </item>
    <item>
      <title>用 mruby 的来了 Hola: Brewfile + mise.toml + dotfiles = 你的开发环境</title>
      <description>&lt;p&gt;项目可以算是起源于多年前的一篇博客 &lt;a href="https://ratazzi.org/2015/03/28/more-automation-after-OS-X-installed/" rel="nofollow" target="_blank"&gt;https://ratazzi.org/2015/03/28/more-automation-after-OS-X-installed/&lt;/a&gt; 在使用 &lt;a href="https://github.com/astral-sh/uv" rel="nofollow" target="_blank" title=""&gt;uv&lt;/a&gt; &lt;a href="https://github.com/jdx/mise" rel="nofollow" target="_blank" title=""&gt;mise&lt;/a&gt; 等工具后对速度有了便有了更高的要求&lt;/p&gt;

&lt;p&gt;我用 &lt;a href="https://docs.chef.io/ruby/" rel="nofollow" target="_blank" title=""&gt;Chef&lt;/a&gt; 很久了，因为我早已经受不了敲一堆 apt install 所以都是用 Chef 配置，Ruby 作为 DSL 太合适了，简直就像是英语，个人不喜欢 Ansible 和 Salt 那种，我宁愿敲命令也不想写巨复杂的 yaml，但是 Chef 依赖还是太重，最重要的是在 macOS 安装会多一堆乱七八糟的，甚至建一个用户&lt;/p&gt;

&lt;p&gt;为什么不用现成的 dotfiles 管理工具，我在大概了解了几个流行的工具之后发现他们的学习成本太高，我觉得 dotfiles 就应该简单的所见即所得，直接链接过去就好&lt;/p&gt;

&lt;p&gt;因为 &lt;a href="https://ghostty.org" rel="nofollow" target="_blank" title=""&gt;Ghostty&lt;/a&gt; 和 &lt;a href="https://bun.sh" rel="nofollow" target="_blank" title=""&gt;Bun&lt;/a&gt; 的火爆对 Zig 产生了兴趣，特别是对交叉编译和轻松使用 C 语言生态的能力，当然还有 mise 和 homebrew 这两个优秀的工具，所以在借助 AI 的能力快速验证想法后我觉得很可行，然后就有了这个项目：&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/ratazzi/hola" rel="nofollow" target="_blank"&gt;https://github.com/ratazzi/hola&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;理念：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;约定胜于配置，dotfiles 就是简单的软链接&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;目标：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;链接 dotfiles&lt;/li&gt;
&lt;li&gt;安装软件包&lt;/li&gt;
&lt;li&gt;管理配置文件&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;目前来说这个项目最大的吸引力可能是配置 Dock 等，相比 Chef 多了一些桌面端的能力：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;# provision.rb&lt;/span&gt;
&lt;span class="n"&gt;macos_dock&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="n"&gt;apps&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="s1"&gt;'/Applications/Zed Preview.app/'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s1"&gt;'/Applications/Ghostty.app/'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;]&lt;/span&gt;
  &lt;span class="n"&gt;orientation&lt;/span&gt; &lt;span class="ss"&gt;:bottom&lt;/span&gt;
  &lt;span class="n"&gt;autohide&lt;/span&gt; &lt;span class="kp"&gt;false&lt;/span&gt;
  &lt;span class="n"&gt;magnification&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt;
  &lt;span class="n"&gt;tilesize&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;
  &lt;span class="n"&gt;largesize&lt;/span&gt; &lt;span class="mi"&gt;40&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;hola provision resources.rb

&lt;span class="c"&gt;# 迁移当前 Dock&lt;/span&gt;
hola dock &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; resources.rb

&lt;span class="c"&gt;# 链接 dotfiles，安装 Homebrew 包，运行 mise install，执行 provision&lt;/span&gt;
hola apply
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;我已经把所有自建节点的 Chef 都换成了 Hola，内存占用从几百 MB 降到个位数，小内存机器没压力了&lt;/p&gt;</description>
      <author>ratazzi</author>
      <pubDate>Fri, 28 Nov 2025 09:16:45 +0800</pubDate>
      <link>https://ruby-china.org/topics/44400</link>
      <guid>https://ruby-china.org/topics/44400</guid>
    </item>
    <item>
      <title>关于 Postgresql 使用 NULLS NOT DISTINCT 还是无法唯一索引允许多个 NULL</title>
      <description>&lt;p&gt;因为原帖关闭了回复，所以单独发一个，我喜欢用 PostgreSQL 的一个原因就是条件索引（Partial Indexes）&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;add_index&lt;/span&gt; &lt;span class="ss"&gt;:users&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:auth_token&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;unique: &lt;/span&gt;&lt;span class="kp"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;where: &lt;/span&gt;&lt;span class="s2"&gt;"auth_token IS NOT NULL"&lt;/span&gt;
&lt;span class="n"&gt;add_index&lt;/span&gt; &lt;span class="ss"&gt;:users&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:password_reset_token&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;unique: &lt;/span&gt;&lt;span class="kp"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;where: &lt;/span&gt;&lt;span class="s2"&gt;"password_reset_token IS NOT NULL"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;</description>
      <author>ratazzi</author>
      <pubDate>Wed, 17 Sep 2025 21:23:44 +0800</pubDate>
      <link>https://ruby-china.org/topics/44317</link>
      <guid>https://ruby-china.org/topics/44317</guid>
    </item>
    <item>
      <title>Rails 单体应用的极简架构</title>
      <description>&lt;p&gt;本着极简化的原则，通过限定具体技术栈来简化架构和开发流程。遵循 Rails "约定胜于配置" 的哲学，最大化利用框架本身的效率和优势。不使用微服务、不做前后端分离、不引入 K8s 等复杂基础设施。&lt;/p&gt;
&lt;h2 id="开发环境"&gt;开发环境&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;使用 &lt;strong&gt;Hotwired&lt;/strong&gt; 避免 SPA 带来的复杂性，回归服务端渲染的高效开发模式&lt;/li&gt;
&lt;li&gt;采用现代原生 ES6 + Import Maps 方案，完全 &lt;strong&gt;#NOBUILD&lt;/strong&gt;，告别构建工具的复杂配置&lt;/li&gt;
&lt;li&gt;直接引入 Tailwind CSS：&lt;code&gt;&amp;lt;script src="https://cdn.tailwindcss.com"&amp;gt;&amp;lt;/script&amp;gt;&lt;/code&gt;，零构建步骤&lt;/li&gt;
&lt;li&gt;使用 &lt;strong&gt;Solid Queue&lt;/strong&gt; + PostgreSQL 实现异步任务处理，无需额外的消息队列或 Redis&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="生产环境"&gt;生产环境&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Rails Puma&lt;/strong&gt; 或 &lt;strong&gt;Thruster&lt;/strong&gt; 直接面对 ALB，省去 Nginx 等反向代理层，因为主要处理动态请求&lt;/li&gt;
&lt;li&gt;使用 &lt;strong&gt;Propshaft&lt;/strong&gt; 进行静态资源构建和管理&lt;/li&gt;
&lt;li&gt;结合 &lt;strong&gt;Cloudflare HTTP 103 Early Hints&lt;/strong&gt; 在首次请求时告知浏览器预加载 CSS 资源，显著提升页面渲染速度&lt;/li&gt;
&lt;li&gt;通过 &lt;strong&gt;Cloudflare Workers&lt;/strong&gt; 处理静态文件和 S3 请求，实现边缘计算网关，提升性能和可靠性&lt;/li&gt;
&lt;li&gt;基于 &lt;code&gt;rails routes&lt;/code&gt; 生成白名单路径规则，在边缘层直接拦截无效请求，减少服务器负载并提升安全性&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;写了几年 Rails 之后真的是不想再用别的了，而且越来越懒，不想用复杂的技术&lt;/p&gt;</description>
      <author>ratazzi</author>
      <pubDate>Sun, 31 Aug 2025 00:41:20 +0800</pubDate>
      <link>https://ruby-china.org/topics/44262</link>
      <guid>https://ruby-china.org/topics/44262</guid>
    </item>
    <item>
      <title>使用 Turbo Frame 和 Stimulus 实现 Modal</title>
      <description>&lt;p&gt;作为一个全栈工程师，以前很怕写 Modal，要写一堆 HTML 生成复杂表单还要写一堆 JS 逻辑&lt;/p&gt;

&lt;p&gt;现在使用这个技术栈配合 simple_form 可以非常简单，这里只是讲下核心逻辑，实际要复杂一些&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;lazy 的 frame 在显示时会加载内容&lt;/li&gt;
&lt;li&gt;默认的 spinner 作为初始的 loading 在替换后自动消失&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="highlight erb"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"modal-body"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="n"&gt;turbo_frame_tag&lt;/span&gt; &lt;span class="ss"&gt;:webhook_form_frame&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;src: &lt;/span&gt;&lt;span class="n"&gt;new_webhook_path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;loading: :lazy&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
    &lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="n"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'shared/spinner'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
  &lt;span class="cp"&gt;&amp;lt;%&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;pre class="highlight erb"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="n"&gt;turbo_frame_tag&lt;/span&gt; &lt;span class="ss"&gt;:webhook_form_frame&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
  &lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="n"&gt;simple_form_for&lt;/span&gt; &lt;span class="vi"&gt;@webhook&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;url: &lt;/span&gt;&lt;span class="n"&gt;webhook_path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="vi"&gt;@webhook&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="ss"&gt;method: :post&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
    &lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;input&lt;/span&gt; &lt;span class="ss"&gt;:name&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
    &lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;input&lt;/span&gt; &lt;span class="ss"&gt;:url&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
    &lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;input&lt;/span&gt; &lt;span class="ss"&gt;:event&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
    &lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;button&lt;/span&gt; &lt;span class="ss"&gt;:submit&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
  &lt;span class="cp"&gt;&amp;lt;%&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
&lt;span class="cp"&gt;&amp;lt;%&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;</description>
      <author>ratazzi</author>
      <pubDate>Fri, 29 Aug 2025 00:05:58 +0800</pubDate>
      <link>https://ruby-china.org/topics/44254</link>
      <guid>https://ruby-china.org/topics/44254</guid>
    </item>
    <item>
      <title>一个 side project https://httpspot.dev httpbin 的替代</title>
      <description>&lt;p&gt;之前一直用 &lt;a href="https://httpbin.org" rel="nofollow" target="_blank" title=""&gt;httpbin&lt;/a&gt;，但是很慢，所以基于 Cloudflare Workers 做了这个项目
而且现代化的 HTTP 特性都拉满了&lt;/p&gt;

&lt;p&gt;&lt;a href="https://httpspot.dev" rel="nofollow" target="_blank" title=""&gt;httpspot.dev&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HTTP/3&lt;/li&gt;
&lt;li&gt;HTTP 103 (Early Hints)&lt;/li&gt;
&lt;li&gt;0-RTT&lt;/li&gt;
&lt;li&gt;brotli&lt;/li&gt;
&lt;li&gt;zstd&lt;/li&gt;
&lt;li&gt;ECC 证书&lt;/li&gt;
&lt;/ul&gt;</description>
      <author>ratazzi</author>
      <pubDate>Wed, 30 Apr 2025 23:17:29 +0800</pubDate>
      <link>https://ruby-china.org/topics/44147</link>
      <guid>https://ruby-china.org/topics/44147</guid>
    </item>
  </channel>
</rss>
