Webhook 要公网 HTTPS?hostc 借 Cloudflare 边缘,免注册临时穿透

Webhook 要公网 HTTPS?hostc 借 Cloudflare 边缘,免注册临时穿透

Webhook 要公网 HTTPS?hostc 借 Cloudflare 边缘,免注册临时穿透

本地 Vite、Next.js、Spring Boot 跑得好好的,产品经理突然说「手机扫一下看看」;GitHub / Stripe / 飞书 Webhook 只认公网 HTTPS;同事在另一座城市,你却不想为一次 Demo 买服务器、配 Nginx、等备案。这类「临时把 localhost 变成公网入口」的需求,过去常用 ngrok、frp、localtunnel,国内开发者圈子里也常见 bore(纯 TCP)和 tunnelto(HTTPS 子域名)。

2026 年又多了一条更「边缘化」的路径:hostc(Host + Cloudflare)。它把隧道控制面直接架在 Cloudflare Workers 与 Durable Objects 上,CLI 免注册、零配置,一行 npx 就能拿到类似 https://t-xxxx.hostc.dev 的临时 HTTPS。本文基于官方仓库 akazwz/hostc、文档 hostc.dev/docs 与本机实测,讲清它和 bore / tunnelto / cloudflared 的差异,以及什么时候该用、什么时候不该用。

封面:hostc 边缘 HTTPS 隧道


一、hostc 到底是什么:边缘临时隧道,不是生产网关

hostc 的定位写得很克制:给本地 HTTP / WebSocket 服务一个临时公网 URL,适合分享本地 Web 应用、测 Webhook、预览带 HMR 的前端,以及把短生命周期服务暴露出去——而不是替代正式部署。

名字拆开就是 Host + Cloudflare。请求路径大致是:

1. 你在本机监听某个端口(如 3000 / 5173)。

2. CLI / SDK 连到 hostc 服务端,由 Durable Object 管理一条名为 tunnel 的公共隧道。

3. 公网客户端访问 https://t-<id>.hostc.dev,流量经 Cloudflare 边缘进入 Worker,再通过二进制 data channel(WebSocket)回传到你的本机 SDK。

4. 本机把请求代理到 http://localhost:<port>;WebSocket 升级则走 ws:// → wss:// 映射。

协议侧(官方称为 v4)把概念拆得很清楚:tunnel(DO 托管的公共隧道)、client connection(当前 CLI/SDK 连接)、data channel(SDK↔服务端 WebSocket)、stream(一次公网 HTTP 或 WebSocket)、frame(通道上的协议单元)。流一旦分配到某条 data channel 就会钉住;单条流失败只关流,通道级失败则客户端会新建临时隧道——这也解释了为什么断线后 URL 往往会变。

官方明确:hostc 仍处 preview。核心穿透路径可用,但早期协议版本故意不向后兼容,协议变更时请用 npx hostc@latest,避免全局装死旧版。

它和「买 VPS + frp」「注册 ngrok 账号绑域名」的心态完全不同:默认无账号系统、无预留域名、无控制台仪表盘、无长驻守护进程——这些都在路线图里,但当前产品刻意保持简单。

插图:hostc 边缘转发架构


二、本机实测:一行命令拿到公网 HTTPS

环境要求很轻:Node.js 18+,本机已有 npx 即可。官方强烈建议用 @latest,让 CLI 与当前服务端协议对齐。

先起一个本地服务(任意静态站或开发服务器均可):

python3 -m http.server 8765 --bind 127.0.0.1

另开终端创建隧道:

npx hostc@latest 8765

本机实测输出(隧道 ID 每次不同):

Success  Tunnel ready
Public URL: https://t-cl96jgxy3i.hostc.dev
Local: http://localhost:8765/
Tunnel: t-cl96jgxy3i
Channels: 2

此时用手机或另一台电脑打开 Public URL,就能打到本机 8765。常用变体:

# Vite 默认端口
npx hostc@latest 5173

# 指定本地绑定主机 / 多通道 / 终端二维码
hostc 3000 --local-host 127.0.0.1 --data-channels 4 --qr

# 指向自建或 staging 服务端
hostc 3000 --server https://your-hostc.example.com

# 连通性自检(本机 doctor 结果:Node / 配置 / https://hostc.dev 均 OK)
npx hostc@latest doctor

全局安装也可以,但 preview 阶段更建议每次 npx hostc@latest:

npm install -g hostc@latest
hostc 5173

配置持久化走本地文件(hostc config get|set|unset|path),例如把默认 server-url 指到自托管实例。诊断命令 hostc doctor [port] 会检查 Node、配置路径、服务端健康度,以及可选的本地端口是否在听。

给 AI Agent 的 skill:如果你用 Codex / Claude Code 一类助手帮你起预览,可安装官方 skill,让 Agent 知道「优先 npx hostc@latest <port>、等 Public URL、预览结束要停进程」:

Webhook 要公网 HTTPS?hostc 借 Cloudflare 边缘,免注册临时穿透

npx skills add akazwz/hostc

停止隧道的方式就是结束 CLI 进程(交互终端通常是 Ctrl+C)。后台起的要记得 kill,否则本机端口还在被占用,公网 URL 却已失效或变成新 ID。


三、和 bore / tunnelto / cloudflared 怎么选?

仓库里我们已经写过 bore 与 tunnelto 的对比文;hostc 不是它们的「换皮」,而是第三条设计轴:把中继能力外包给 Cloudflare 边缘。下面这张表按「你真正要什么」来选。

维度 hostc tunnelto bore cloudflared
一句话 Cloudflare 边缘上的临时 HTTPS / WS Rust HTTPS 子域名 + 本地调试面板 极简 TCP 管道 Cloudflare Tunnel 官方客户端
公网形态 https://t-*.hostc.dev https://*.tunnelto.dev bore.pub:端口(裸 TCP) 你的域名 / trycloudflare 临时域
是否要账号 公共实例免注册 免费可用,绑子域名需 key 公共实例免注册 正式隧道通常要 Cloudflare 账号
协议范围 HTTP + WebSocket 偏 Web HTTP(S) 任意 TCP HTTP/TCP 等,能力完整
HTTPS 证书 边缘侧自带 SaaS 自带 不管证书 Cloudflare 侧终结
典型场景 临时 Demo、Webhook、Agent 预览 联调 + 请求面板 SSH / DB / 游戏端口 长期稳定、自有域名生产入口
断线行为 常换新 tunnel id / URL 视会话而定 重连端口可能变 Named tunnel 可稳定

选型口诀(更新版):

  • 只要「手机扫一下 / Webhook 打一下 / Agent 分享预览」,且不想注册 → 优先 hostc。
  • 需要本地 HTTP 流量面板、固定子域名(有 API key)→ tunnelto。
  • 要穿透 MySQL、SSH、非 HTTP → bore(或 frp / rathole)。
  • 要绑自己的域名、做长期入口、团队统一运维 → cloudflared(或自建 frp)。
  • 只要 SSH 一行、接受限时随机域 → 也可看 Pinggy / localhost.run;它们和 hostc 同属「临时档」,但中继栈不同。

hostc 的差异化卖点有三点:① 默认走 Cloudflare 全球边缘,延迟与证书链路「借」成熟基础设施;② 对带 HMR 的前端 / WebSocket 做了一等公民支持;③ 提供可嵌入的 @hostc/client SDK,方便 Electron、守护进程、自定义 CLI 把隧道嵌进产品,而不只是给人敲命令。

代价同样清楚:你依赖 Cloudflare 可达性;公共实例是匿名临时隧道,断线换 URL;暂无账号级 ACL、预留域名和长驻 daemon。把它当「演示胶布」,别当「生产前门」。

插图:穿透工具选型对比


四、进阶:SDK 嵌入、自托管与安全边界

4.1 用 @hostc/client 嵌进自己的工具

CLI 只是薄产品层;协议与重连逻辑在 SDK。Node / 桌面应用可以这样起隧道:

npm install @hostc/client
import { HostcClient, localOriginAdapter } from "@hostc/client";

const client = new HostcClient({
serverUrl: "https://hostc.dev",
upstream: localOriginAdapter({
origin: "http://localhost:5173/",
}),
});

client.on("ready", (event) => {
console.log(event.publicUrl);
});

client.on("reconnecting", (event) => {
console.error(`reconnecting: ${event.reason}`);
});

await client.start();

应用代码应依赖 @hostc/client,不要直接依赖内部的 @hostc/protocol(协议包是 wire contract 的源码真源,已打进 SDK)。

4.2 自托管:Workers + 自己的域名

官方 monorepo 拆成 packages/protocol、packages/client、apps/server(Worker + Durable Object)、apps/cli。本地开发需要 Node 18+、pnpm 与 Cloudflare 账号;pnpm dev:server 起本地 Worker 后,用 HOSTC_SERVER_URL=http://127.0.0.1:8787 指向自建端。正式自托管则把 Worker 部署到自己的账号,并把 CLI --server / config set server-url 指过去。

源文与官方限制可汇总为:

限制 说明
子域名 公共实例自动分配;CLI 暂不支持自定义友好名
会话 客户端断开后需重连;重连常得到新 tunnel id
默认域名 公共实例用 hostc.dev
账号能力 尚无预留隧道、稳定域名、仪表盘、长驻 daemon
协议兼容 preview 期不保证旧 CLI 能连新服务端

4.3 安全与合规提醒

临时隧道等于把本机某个端口「短暂挂到公网」。务必做到:

1. 只暴露开发端口,不要穿透数据库、SSH、管理后台默认口。

2. 演示接口加 Basic Auth / Token / IP 限制(应用层自己做;hostc 公共实例目前不是安全网关)。

3. 演示结束立即 Ctrl+C;不要在 CI 里把永久密钥打进临时隧道日志。

4. 公司内网 / 合规环境先确认是否允许流量经 Cloudflare 出境。

5. 国内部分网络访问 Cloudflare 不稳定时,体验会抖——这是架构边界,不是配置手残。


五、场景清单与落地建议

场景 是否推荐 hostc 备注
前端本地联调给测试 / 产品看 ✅ 一行命令 + HTTPS,手机真机友好
GitHub / 支付 / 飞书 Webhook ✅ 填 Public URL 即可;注意 URL 会变
Vite / Next HMR、WebSocket Demo ✅ 官方强调 WS / HMR 路径
Agent 自动起公网预览 ✅ 配合 npx skills add akazwz/hostc
长期生产 API 入口 ❌ 用 cloudflared / 正规部署
穿透 SSH / MySQL ❌ 用 bore / frp / Tailscale 等
需要固定子域名与流量面板 ⚠️ 更看 tunnelto 或自建方案

实践建议:把 hostc 放进个人「应急工具箱」——alias 或 Makefile 里留一行 npx hostc@latest $(PORT);真正对外服务仍走 CI/CD 与云主机。若团队已经深度使用 Cloudflare,可评估自托管 hostc server,把临时隧道收拢到自己的账号与域名策略下。

项目地址:https://github.com/akazwz/hostc(Apache-2.0)
官网与文档:https://hostc.dev / https://hostc.dev/docs

一句话收尾:hostc 不是又一个 bore/tunnelto 仿品,而是「用 Cloudflare 边缘做临时 HTTPS 胶布」——快、免注册、适合 Demo 与 Webhook;一旦你开始在乎稳定域名与权限模型,就该毕业去更重的方案。

💻 配套实训环境与动手练习

本文涉及的相关技术指令、开发环境与工具链已内置在边学边练在线实验室中,无需繁琐安装配置,随时在浏览器中实践体验:

文章版权声明:除非注明,否则均为边学边练网络文章,版权归原作者所有

最新文章

热门文章

本栏目文章