Skip to main content
On this page

暴露 HTTP

您可以在任意端口运行开发服务器、预览应用、Webhook 接收器或框架 CLI,并即时将它们发布到安全的随机 HTTPS URL。

await sandbox.writeTextFile(
  "server.js",
  "Deno.serve(() => new Response('Hello from Sandboxes'));",
);
const runtime = await sandbox.createJsRuntime({ entrypoint: "server.js" });
const publicUrl = await sandbox.exposeHttp({ port: 8000 });
console.log(publicUrl); // https://<random>.sandbox.deno.net

此 URL 在沙箱生命周期内保持有效,非常适合短期的 QA 链接或代理生成的预览。

何时暴露 HTTP Jump to heading

每当您需要与团队成员、机器人或外部服务共享沙箱时,请暴露 HTTP:

  • AI 生成的 Web 应用或即时演示的预览链接
  • 必须能被 Stripe、GitHub 等访问的 Webhook 接收器
  • 需要从浏览器检查的框架开发服务器(例如 next devastro devdeno task dev
  • 临时 API、健康检查或可观测性探针

由于沙箱是临时性的,您无需管理 DNS 或证书。每次调用 exposeHttp() 都会返回一个在 *.sandbox.deno.net 下的唯一主机名,并自动配置 TLS。

所有访问沙箱 URL 的请求都会将 HTTP 流量转发到该沙箱。

步骤详解 Jump to heading

  1. 在沙箱内启动服务器。 监听任意非特权端口(例如,30008080)。
  2. 暴露端口:const url = await sandbox.exposeHttp({ port: 3000 });
  3. 共享或通过该 URL 进行请求。 请求会经过 Deploy 的全球边缘网络,直接隧道传输到您的沙箱。

通过对每个端口调用多次 exposeHttp(),可同时暴露多个端口。只要沙箱保持存活,重新启动服务器后也可以复用相同的暴露 URL。

观察流量 Jump to heading

通过暴露的 URL 路由的请求会与您的 Deploy 日志和跟踪一起显示。可在仪表板中:

  • 按沙箱 ID 或时间范围过滤日志
  • 检查请求跟踪,追踪边缘与虚拟机之间的延迟
  • 如果预览表现异常,可以取消或重启沙箱

安全与网络 Jump to heading

  • 暴露的 URL 是长度长且随机生成的子域,极难猜测。
  • TLS 终止发生在 Deploy 边缘;流量端到端加密。

清理与限制 Jump to heading

  • 当沙箱生命周期结束时,暴露的 URL 将停止接收流量。如有需要,可调用 sandbox.kill() 提前终止沙箱(及 URL)。
  • 对于持久服务,应将代码升级为 Deploy 应用,而非依赖长时间运行的沙箱。

使用框架的完整示例 Jump to heading

import { Sandbox } from "@deno/sandbox";

await using sandbox = await Sandbox.create();

// 安装依赖
await sandbox.writeTextFile(
  "package.json",
  JSON.stringify(
    {
      private: true,
      scripts: { dev: "next dev" },
      dependencies: {
        next: "^15.0.0",
        react: "^19.0.0",
        "react-dom": "^19.0.0",
      },
    },
    null,
    2,
  ),
);
await sandbox.sh`npm install`;

// 启动开发服务器
const server = await sandbox.spawn("npm", {
  args: ["run", "dev"],
  stdout: "inherit",
  stderr: "inherit",
});

// 发布它
const previewUrl = await sandbox.exposeHttp({ port: 3000 });
console.log(`预览已准备好,访问地址为 ${previewUrl}`);

await server.status; // 保持运行直到进程退出

此模式允许代理或开发者启动高保真预览,分享获取反馈,并通过单击 Ctrl+C 一键清理。

你找到了你需要的东西吗?

编辑此页面
隐私政策