Worker 无法监听80端口,因其运行时禁止绑定任意端口;平台统一接收80/443请求后转为fetch事件,开发者只需通过addEventListener("fetch")处理Request对象。

Worker 无法直接监听 80 端口
Cloudflare Workers、Deno Deploy、Vercel Edge Functions 等主流 Worker 运行时,**根本不允许绑定任意端口(包括 80)**。它们不是传统 Node.js 进程,没有 http.createServer() 的底层权限。所谓“监听 80”,实际是平台在边缘节点上统一接收 HTTP 请求后,按路由规则分发到你的 Worker 函数——你只负责处理 Request 对象,不碰端口。
用 addEventListener("fetch") 接收 HTTP 请求
这是所有标准 Worker 环境的入口方式。平台已帮你把 80(或 443)上的流量转成 fetch 事件,你只需响应它:
addEventListener("fetch", (event) => {
event.respondWith(handleRequest(event.request));
});
async function handleRequest(request) {
return new Response("Hello from Worker", {
status: 200,
headers: { "Content-Type": "text/plain" },
});
}
-
request.url已含完整路径和协议,无需解析原始 socket 数据 - 不能调用
net.createServer()、http.listen()或任何底层网络 API - 本地开发时用
wrangler dev或deno task dev启动的是模拟环境,它监听本地8787等端口,但上线后端口控制权完全交给平台
想暴露服务给公网?别管端口,配好路由和域
真正决定“能不能被访问”的,是平台路由配置,不是代码里写了什么端口:
- Cloudflare Workers:在仪表盘或
wrangler.toml中设置routes,例如routes = ["example.com/*"] - Deno Deploy:部署后自动分配
*.deno.dev子域;自定义域名需在项目设置中添加并验证 DNS - Vercel:根路径
/默认生效,子路径需在vercel.json中声明routes或用src/pages约定 - 错误现象:
Error: Cannot assign requested address或bind EACCES 0.0.0.0:80—— 这说明你误用了 Node.js 模式,在 Worker 环境里硬启 server
真需要本地监听 80?那已不是 Worker 场景
如果你在自己服务器上跑代码,并坚持用 80 端口,就该换技术栈:
- 用 Node.js +
http.createServer(),但必须sudo启动或用authbind,且不推荐生产直接绑80 - 更安全做法:Nginx / Caddy 反代到本地高权限端口(如
8080),Worker 不参与此层 - 混淆点:有人把 “Worker 处理来自 80 的请求” 理解为 “Worker 自己 listen(80)”——这是根本性误解,平台网络层和执行层是隔离的
最常被忽略的一点:Worker 的请求生命周期极短(通常 30–60 秒),没有长连接、没有 socket upgrade、不支持 WebSocket 服务端(仅可作为客户端)。如果业务依赖这些,Worker 就不是正确选择。










