本页内容
使用 Web 平台 API
Deno 简化 Web 和云开发的一种方式是使用 Web 平台 API(如 fetch
)而不是专有 API。这意味着如果您曾经为浏览器构建过应用程序,您可能已经熟悉 Deno,如果您正在学习 Deno,您也在投资您的 Web 知识。
支持的 API 跳转到标题
以下是 Deno 中支持的 Web 平台 API 的部分列表
- Blob
- BroadcastChannel
- 缓存
- 通道消息 API
- 压缩流 API
- 控制台
- DOM API
- DOM
CustomEvent
、EventTarget
和EventListener
- 编码 API
- Fetch API
FormData
- 位置 API
navigator.language
API- 性能 API
setTimeout
、setInterval
、clearInterval
- 流 API
URL
URLPattern
URLSearchParams
- Web Crypto API
- Web 文件 API
- Web 存储 API
- Web Workers API
WebSocket
您可以在 此处 找到这些 API 的 Deno 参考。要检查 Deno 中是否可以使用 Web 平台 API,请点击 MDN 上的接口 并参考 其浏览器兼容性表(链接作为示例)。
fetch
API 跳转到标题
概述 跳转到标题
fetch
API 可用于发出 HTTP 请求。它按照 WHATWG fetch
规范 中的规定实现。
您可以在 MDN 上找到有关此 API 的文档。
规范偏差 跳转到标题
- Deno 用户代理没有 cookie 存储器。因此,响应中的
set-cookie
标头不会被处理或从可见的响应标头中过滤掉。 - Deno 不遵循同源策略,因为 Deno 用户代理目前没有起源的概念,也没有 cookie 存储器。这意味着 Deno 不需要防止跨域泄露经过身份验证的数据。因此,Deno 没有实现 WHATWG
fetch
规范的以下部分- 第
3.1. 'Origin' 标头
节。 - 第
3.2. CORS 协议
节。 - 第
3.5. CORB
节。 - 第
3.6. 'Cross-Origin-Resource-Policy' 标头
节。 原子 HTTP 重定向处理
.opaqueredirect
响应类型。
- 第
- 具有
redirect
模式为manual
的fetch
将返回basic
响应,而不是opaqueredirect
响应。 - 规范对如何 处理
file:
URL 模糊不清。Firefox 是唯一实现获取file:
URL 的主流浏览器,即使这样,它默认情况下也不起作用。从 Deno 1.16 开始,Deno 支持获取本地文件。有关详细信息,请参见下一节。 request
和response
标头保护已实现,但与浏览器不同,它们对允许的标头名称没有任何限制。referrer
、referrerPolicy
、mode
、credentials
、cache
、integrity
、keepalive
和window
属性及其在RequestInit
中的相关行为未实现。相关字段不存在于Request
对象上。- 支持请求主体上传流(在 HTTP/1.1 和 HTTP/2 上)。与当前的 fetch 提案不同,该实现支持双工流。
- 当在
headers
迭代器中迭代时,set-cookie
标头不会被连接。此行为正在 指定过程中。
获取本地文件 跳转到标题
从 Deno 1.16 开始,Deno 支持获取 file:
URL。这使得编写在服务器和本地使用相同代码路径的代码变得更容易,也更容易编写既可以在 Deno CLI 中使用,又可以在 Deno Deploy 中使用的代码。
Deno 仅支持绝对文件 URL,这意味着 fetch("./some.json")
无法正常工作。需要注意的是,如果指定了 --location
,则相对 URL 将使用 --location
作为基准,但 file:
URL 无法作为 --location
传递。
为了能够获取相对于当前模块的某些资源,无论模块是本地还是远程,都可以使用 import.meta.url
作为基准。例如,类似于以下代码:
const response = await fetch(new URL("./config.json", import.meta.url));
const config = await response.json();
关于获取本地文件的说明
- 权限适用于读取资源,因此需要适当的
--allow-read
权限才能读取本地文件。 - 本地获取仅支持
GET
方法,其他任何方法都会拒绝 Promise。 - 不存在的文件会简单地拒绝 Promise,并返回一个模糊的
TypeError
。这样做是为了避免潜在的指纹攻击。 - 响应中没有设置任何标头。因此,由使用者来确定诸如内容类型或内容长度之类的信息。
- 响应主体从 Rust 端进行流式传输,因此大型文件可以分块提供,并且可以取消。
CustomEvent
、EventTarget
和 EventListener
跳转到标题
概述 跳转到标题
DOM 事件 API 可用于调度和监听应用程序中发生的事件。它按照 WHATWG DOM 规范 中的规定实现。
您可以在 MDN 上找到有关此 API 的文档。
规范偏差 跳转到标题
- 事件不会冒泡,因为 Deno 没有 DOM 层次结构,因此事件没有树来冒泡/捕获。
timeStamp
属性始终设置为0
。
类型定义 跳转到标题
已实现的 Web API 的 TypeScript 定义可以在 lib.deno.shared_globals.d.ts
和 lib.deno.window.d.ts
文件中找到。
特定于工作者的定义可以在 lib.deno.worker.d.ts
文件中找到。
其他 API 与规范的偏差 跳转到标题
缓存 API 跳转到标题
仅实现以下 API
- CacheStorage::open()
- CacheStorage::has()
- CacheStorage::delete()
- Cache::match()
- Cache::put()
- Cache::delete()
与浏览器相比,有一些不同之处
- 您不能将相对路径传递给 API。请求可以是 Request 或 URL 的实例,也可以是 URL 字符串。
match()
和delete()
还不支持查询选项。