HTTP Route 绑定
当 js_worker.route_name 不为 null 时,该脚本会启用 HTTP 路由入口。
路由路径:
http://{host}/worker-route/{route_name}http://{host}/worker-route/{route_name}/*
启用方式
在 js-worker_create 或 js-worker_update 里传入 route_name。
约束:
route_name必须唯一(数据库唯一索引)- 只允许字符:
a-z A-Z 0-9 . _ - - 请求体大小限制为 8 MB,超出会返回 HTTP 413 错误
脚本入口
开启路由后,脚本需要实现:
js
export default {
async onRoute(request, env, ctx) {
return new Response("ok", { status: 200 });
}
};request为 Fetch 标准Request对象- 返回值必须是 Fetch 标准
Response对象
请求来源 IP(NG-Connecting-IP)
onRoute 收到的 request.headers 中会包含 NG-Connecting-IP(头名大小写不敏感)。
- 值为 Server 看到的 TCP 对端 IP 地址。
- 若请求经过本机反向代理,通常会是
127.0.0.1(或::1)。 - 若前面是 CDN/边缘节点,通常会是该 CDN/边缘节点的出口 IP。
示例:
js
const peerIp = request.headers.get("NG-Connecting-IP");完整示例
脚本:
js
export default {
async onRoute(request, env, ctx) {
return new Response(
JSON.stringify({
ok: true,
method: request.method,
path: new URL(request.url).pathname,
trace_id: ctx.uuid()
}),
{
status: 200,
headers: { "content-type": "application/json; charset=utf-8" }
}
);
}
};请求:
bash
curl -i http://127.0.0.1:3000/worker-route/demo_route/hello