Skip to content

HTTP Route 绑定

js_worker.route_name 不为 null 时,该脚本会启用 HTTP 路由入口。

路由路径:

  • http://{host}/worker-route/{route_name}
  • http://{host}/worker-route/{route_name}/*

启用方式

js-worker_createjs-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