# 运行时能力 (/docs/cloud/services/application/runtime-capabilities)



下表是应用当前的运行时能力。

## 发布与部署 [#发布与部署]

| 能力               | 状态  | 说明                                               |
| ---------------- | --- | ------------------------------------------------ |
| Worker → 版本 → 部署 | 支持  | 创建版本不会上线；部署后才成为线上版本。创建版本时设置 `deploy: true` 可一步完成 |
| 回滚               | 支持  | 对旧版本再创建一次部署，无需重新上传文件                             |
| 整站替换             | 支持  | 每个版本的文件清单必须完整列出站点的全部文件；只有内容变化的文件需要上传，没变的不会重传     |
| 灰度发布             | 不支持 | 一个部署只能让一个版本占 100%                                |
| 保留版本数            | 限制  | 最近 100 个版本                                       |
| 单个脚本大小           | 限制  | 压缩后 10 MiB                                       |
| 部署超时             | 限制  | 10 分钟内没有完成即失败                                    |

## 静态资源 [#静态资源]

| 能力                   | 状态 | 说明                                                                           |
| -------------------- | -- | ---------------------------------------------------------------------------- |
| 内容寻址去重               | 支持 | 相同内容只存一份，重复发布不会重复上传                                                          |
| 路径与大小                | 限制 | 每个版本最多 100000 个文件，单个文件最大 25 MiB                                              |
| `html_handling`      | 支持 | 可选 `auto-trailing-slash`、`force-trailing-slash`、`drop-trailing-slash`、`none` |
| `not_found_handling` | 支持 | 可选 `none`、`404-page`、`single-page-application`                               |
| `_headers`           | 支持 | 仅作用于静态资源的响应，最多 100 条规则，每行最多 2000 字符                                          |
| `_redirects`         | 支持 | 仅作用于静态资源的响应，最多 2000 条静态规则和 100 条动态规则，每行最多 1000 字符                            |

`_headers` 和 `_redirects` 不会作用于 Worker 代码生成的响应。需要跨域访问时，在代码里自己设置 CORS 头：

```js
const CORS = {
  "access-control-allow-origin": "*",
  "access-control-allow-methods": "GET, POST, OPTIONS",
  "access-control-allow-headers": "content-type",
};

export default {
  async fetch(request) {
    if (request.method === "OPTIONS") return new Response(null, { status: 204, headers: CORS });
    return Response.json({ ok: true }, { headers: CORS });
  },
};
```

## 出站请求 [#出站请求]

| 能力         | 状态 | 说明                        |
| ---------- | -- | ------------------------- |
| 访问公网地址     | 支持 | 代码里的 `fetch()` 可以请求任意公网地址 |
| 访问平台上的其他应用 | 支持 | 请求其他应用的地址，得到的是对方应用的响应     |

## 绑定 [#绑定]

| 类型                                                        | 状态  | 说明                              |
| --------------------------------------------------------- | --- | ------------------------------- |
| `d1`                                                      | 支持  | 在创建版本时声明                        |
| `kv_namespace`                                            | 支持  | 在创建版本时声明                        |
| `r2_bucket`                                               | 支持  | 在创建版本时声明                        |
| `secret_text`                                             | 支持  | 在创建版本时声明；值通过密钥接口写入              |
| `plain_text`                                              | 支持  | 在创建版本时声明                        |
| `json`                                                    | 支持  | 在创建版本时声明                        |
| `praxis_token`                                            | 支持  | 启用 owner 组织的平台 API 访问，不注入 token |
| `praxis_vault_ref`                                        | 不可用 | 当前不能使用                          |
| 其他类型（如 `service`、`queue`、`durable_object_namespace`、`ai`） | 不支持 | 创建版本时返回 `UNSUPPORTED`           |

## 密钥 [#密钥]

| 能力    | 状态  | 说明                                                                     |
| ----- | --- | ---------------------------------------------------------------------- |
| 写入密钥  | 支持  | `PUT /application/v1/workers/{id}/secrets/{name}`。写入后会基于当前版本派生一个新版本并部署 |
| 读回密钥值 | 不支持 | 值只写不读，任何接口都不会返回                                                        |

## 兼容标志 [#兼容标志]

| 能力                             | 状态   | 说明                                                                                         |
| ------------------------------ | ---- | ------------------------------------------------------------------------------------------ |
| `compatibility_flags`          | 支持   | 创建版本时传入，会原样生效                                                                              |
| `global_fetch_strictly_public` | 固定开启 | 每个版本都会带上，不能关闭；传入 `global_fetch_private_origin` 或 `no_global_fetch_strictly_public` 会返回 400 |

## 调用平台 API [#调用平台-api]

在要部署的版本中声明绑定：

```json
{ "type": "praxis_token", "name": "PRAXIS_API_TOKEN" }
```

应用可以不带 API Key 调用 Develop API：

```js
export default {
  async fetch() {
    return fetch("https://api-develop.deepraxis.com/application/v1/workers");
  }
};
```

应用拥有与 owner 组织 API Key 相同的组织访问权限。其他组织的资源返回不存在。应用代码不会收到 token 或密钥，也不会生成 `env.PRAXIS_API_TOKEN`。未声明该绑定时，受保护接口返回 401，除非请求自行提供有效凭证。其他目标域名的请求保持原样。

Praxis SDK 使用同一条访问路径：省略 `apiKey`，将 `baseUrl` 设为 Develop API 地址，无需修改 SDK。已有应用需要部署声明该绑定的版本后才能启用。移除绑定会在新部署生效、路由缓存刷新后停止注入身份（最多 10 秒）。
