惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
Jina AI
Jina AI
小众软件
小众软件
GbyAI
GbyAI
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 【当耐特】
D
DataBreaches.Net
腾讯CDC
V
Visual Studio Blog
博客园 - 叶小钗
B
Blog
Apple Machine Learning Research
Apple Machine Learning Research
T
The Blog of Author Tim Ferriss
S
SegmentFault 最新的问题
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
V2EX
博客园 - 三生石上(FineUI控件)
云风的 BLOG
云风的 BLOG
The Cloudflare Blog
MongoDB | Blog
MongoDB | Blog
有赞技术团队
有赞技术团队
U
Unit 42
博客园 - 司徒正美
博客园 - 聂微东

暗无天日

读:AI Agent 安全日志——从可见性与隐私的两难说起 - 暗无天日 读:AI Agent 生产化——一份从原型到上线的速查清单 - 暗无天日 AI写作的语言指纹——如何让文字不那么像机器 - 暗无天日 读:50 条 Claude Code 技巧——一个工程经理的六个月使用心得 读:AI 辅助开发为什么让 E2E 测试更有价值 - 暗无天日 读:在Emacs中使用Claude Code(Spacemacs适配版) - 暗无天日 Claude Code 背后的工程哲学——读 Agent Harness Engineering 读:Agent Harness Engineering——AI 智能体不只是模型,还有套件 - 暗无天日 browser-harness:让 AI 直接接管你的浏览器 - 暗无天日 读:Security-First CI/CD —— DevSecOps 自动化实践指南 TIL: 数字小键盘的小数点陷阱与行内算术求值 - 暗无天日 读:Immutability 不是万能药,它是一种权衡 - 暗无天日 Conducty:给 Claude Code 加上项目记忆和并行执行能力 - 暗无天日 读 — GitHub Trending 里的 Claude Code 技能包 读 — Prompt Caching 省钱指南 TIL: Emacs 中那些跟鼠标配合的冷门快捷键 - 暗无天日 读:Anvil——把 Emacs 变成 AI 的工具服务器 读:Emacs 代码折叠终极指南 - 暗无天日 读:Clojure 搭车客指南 - 暗无天日 git推送失败后恢复仓库损坏的完整记录 - 暗无天日 多智能体系统的两个有效模式——以及对 Claude Code 用户的启示 - 暗无天日 用 Org Babel 写 Literate 博文:扩展执行 + 定制导出 proced:Emacs 内置的进程查看器 - 暗无天日 从 proced 定制中学到的 Elisp 模式 读:让 Emacs proced 在 macOS 上显示 CPU 和内存 异步编程的函数着色税 - 暗无天日 链式调用的代价:JavaScript 和 Clojure 的共同教训 - 暗无天日 hyperfine:命令行基准测试工具 - 暗无天日 管道中的变量去哪了?——子 shell 作用域陷阱 - 暗无天日 开源包装器的信任陷阱:四个危险信号 - 暗无天日
一条命令让本地开发用上 HTTPS —— slim 工具介绍
2026-04-19 · via 暗无天日

本地开发 HTTPS 的痛点

做本地 Web 开发时,你可能经常看到浏览器提示"您的连接不是私密连接"。这不影响开发,但会带来两个问题:

  1. 开发体验差 — 每次打开页面都要点"继续前往"
  2. 功能受限 — 很多浏览器 API 只在 HTTPS(安全来源)下可用:
    • Service Worker(PWA 开发必备)
    • Geolocation API
    • Clipboard API
    • Camera / Microphone (getUserMedia)
    • HTTP/2(浏览器只在 TLS 上协商 HTTP/2)
    • Secure Cookies(带 Secure 标志的 Cookie 只在 HTTPS 下发送)

传统做法是手动生成自签名证书、添加到系统信任库、改 /etc/hosts 、配反向代理——第一次折腾半小时,之后每次都嫌麻烦。

slim 是什么

slim 是一个 Go 写的轻量级反向代理和本地域名管理器。一条命令搞定上述所有事情:

slim start myapp --port 3000

执行后,项目通过 https://myapp.test 访问,有合法证书,无浏览器警告。支持 HTTP/2、WebSocket、HMR(热模块替换),Next.js、Vite 等开发服务器开箱即用。

工作原理

slim start 第一次运行时自动完成四件事:

  1. 证书颁发机构(CA) — 生成本地根 CA,注册到系统信任库(Linux CA store 或 macOS Keychain)。之后每个域名按需签发叶子证书,通过 SNI 提供。
  2. 反向代理 — 启动后台守护进程,用 Go 内置的 httputil.ReverseProxy ,把 HTTPS 流量从域名转发到本地开发服务器的端口。
  3. 本地 DNS — 在 /etc/hosts 中添加条目,让域名解析到 127.0.0.1 ,不需要额外的 DNS 服务器。
  4. 端口转发 — 用 iptables(Linux)或 pfctl(macOS)把 80/443 端口重定向到 10080/10443,代理进程不需要 root 权限。

安装

一行命令安装:

curl -sL https://slim.sh/install.sh | sh

安装前可以先审查脚本内容:在浏览器中打开 https://slim.sh/install.sh 查看源码。

确认安装成功:

slim --version

实际使用

假设你的开发服务器运行在 3000 端口,启动 slim:

slim start myapp --port 3000

第一次运行时,slim 会生成根 CA、注册系统信任库、为 myapp.test 签发证书、更新 /etc/hosts 、启动后台代理。

打开浏览器访问 https://myapp.test ,项目通过 HTTPS 加载,证书有效,没有警告。

Note: slim 默认使用 .test 域名。不要用 .local —— 它保留给 mDNS 使用,在 macOS/Linux 上可能导致 DNS 解析缓慢或不一致。 .test 是 RFC 2606 专门为本地开发保留的域名。

日常管理

查看所有活跃域名:

slim list

停止指定域名:

slim stop myapp

完全卸载(删除 CA、证书、hosts 条目、端口转发规则、配置文件):

slim uninstall

诊断检查:

slim doctor

启动时的有用选项:

slim start myapp --port 3000 --log verbose  slim start myapp --port 3000 --log quiet    slim start myapp --port 3000 --wait         

所有运行时数据在 ~/.slim/ 目录下。需要手动检查或备份证书时去那里。

为什么本地开发需要 HTTPS

即使不考虑浏览器警告,本地开发环境应该尽量接近生产环境。以下功能在 HTTP 下行为不同或完全不工作:

Service Worker 正常注册和运行 无法注册 (除 localhost 外) Geolocation 需要用户授权后可用 直接被拒绝 Clipboard API 读写剪贴板 不可用 Camera / Microphone getUserMedia 正常工作 被浏览器阻止 HTTP/2 正常协商 不支持(浏览器只在 TLS 上用 HTTP/2) Secure Cookies 正常设置和发送 永远不会被发送
API / 功能 HTTPS 下的行为 HTTP 下的行为

如果你的项目依赖这些功能,在 HTTP 下测试的结果和生产环境不一致。slim 让本地 HTTPS 变得几乎零成本。