@arcjet/transport
运输机制 弧喷 协议.
这是什么?
这个包裹提供了一种与我们的协议交谈的方式.
我什么时候用这个?
这是内部的Arcjet包件,不为公众使用而设计. 看我们的 开始吧 指南 如何使用Arcjet 在您的 应用.
安装
这套方案只是无害环境管理. 在 Node.js 用 npm 安装 :
npm install @arcjet/transport
节点.js 版本支持
此软件包需要 >=22.21.0 <23 || >=24.5.0。代理支持依赖于
节点.js HTTP 代理代理的内置代理支持,该代理支持仅可用于
节点.js >=22.21.0 在24号线上, >=24.5.0. Node.js 20是寿终正寝
和节点23不支持。 任何人追踪一个活动 LTS 释放
不受影响.
因为每个Arcjet SDK都依赖于这个软件包,所以适用同样的要求 穿过Arcjet SDK.
使用
import { createTransport } from "@arcjet/transport";
const transport = createTransport("https://decide.arcjet.com");
// This can now be passed to `createClient` from `@arcjet/protocol`.
API 密码
此软件包导出标识符
createTransport。 。 。 .
没有默认导出 .
无条件的子路径 @arcjet/transport/http2 出口
createHttp2Transport 给那些需要
无论软件包的运行时间导出条件如何,节点 HTTP/2 连接路径
(使用时间: @arcjet/guard 在邦顿.
此套件导出 类型脚本 类型
ProxyEnvironment, (中文(简体) ),
TransportLogger,以及
TransportOptions。 。 。 .
createTransport(baseUrl[, options])
创建可与Arcjet API交谈的传输工具。 它在节点上使用
@connectrpc/connect-node 超过HTTP/2; Bun, Deno, 单独的切入点,
边光,和 workerd 使用情况 @connectrpc/connect-web 换句话说 这太瘦了
包起来 createConnectTransport。 。 。 .
直接 HTTP/2会话(和 HTTP/2-over-)CONNECT 何时 proxyHttpVersion 实值
"2")使PING能够保持活动状态,并连续回收连接
截止日期失败, 匹配 Guard 启用的恢复行为
6137号。 。 。 .
createHttp2Transport(baseUrl[, http2SessionOptions])
创建一个直接的 HTTP/2 连接传输 与 PING 保持- 恒定和
基于最后期限的连接回收。 回返 { transport, sessionManager } 这样
调用者可以将会话拆下. 从 @arcjet/transport/http2。 。 。 .
代理支持
标准代理环境变量( E)HTTP_PROXY 财务报告和审定财务报表 HTTPS_PROXY时
尊重 NO_PROXY)是自动检测的,从而有可能连接到
通过诸如Arcjet API之类的代理 乌贼。当使用代理时, a
行在启动时被记录 info 级别(如此设置) ARCJET_LOG_LEVEL=info 来看
) (中文(简体) ). 代理URL本身没有被登录,因为它可以包含证书. 怎么样
请求实际上是由运行时间决定的,使用每次运行时间
内建代理支持 :
- 节点.js - 请求通过HTTP/1.1的代理程序,使用
节点/ js HTTP 代理代理的内置代理支持; 否则会制作
直接通过 HTTP/ 2. 设定
proxyHttpVersion: "2"改为保留 HTTP/2,同时 代理(参见 HTTP/2 通过代理 页:1. - 阿宝 财务报告和审定财务报表 德诺 - 运行时间
fetch以本地方式执行代理. - 边光 财务报告和审定财务报表
workerd这些边缘运行时间不支持外出 代理环境变量,所以没有使用代理.
NO_PROXY 接受一个逗号或空格分隔的宿主后缀列表,每个后缀带有
可选线索 . 或者说 *. 和可选 :port附加时 * 绕过
每个主机的代理 。 条目被匹配为主机名; IP/ CIDR 范围( 如
10.0.0.0/8)不支持,与 卷曲。关于 Bun 和
德诺的运行时间 fetch 应用 NO_PROXY 它的精确语义是
运行时间.
HTTP/2 通过代理
默认情况下,在Node.js上代理将连接从HTTP/2降级到 HTTP/1.1,因为Node的内置代理代理支持只工作于HTTP/1.1. 对于一个对耐久性敏感的API来说,这很不幸:它放弃了HTTP/2的 多功能, 因此同时请求的突起打开新的代理连接 而不是分享一个.
设置 proxyHttpVersion: "2" 保持 HTTP/2 端对端。 运输打开一个
HTTP 密码 CONNECT 隧道到代理,然后执行 TLS 握手——和
选择的ALPN 谈判 h2 ——直接与来源相通. 只有代理服务器
盲目地推进地道,所以它从不看见,也不能降级
谈判协议.
这需要注意:
- 只有节点J. Bun和Deno不执行此构建的代理选项
打开;它们通过它们的代理
fetch(关于HTTP/1.1)无论如何 设置,边缘运行时间则根本不代理. - 需要一条地道(
CONNECT) 代理服务器 常见的HTTPS Egress, 包括 乌贼。终止 TLS 并重新生成一个 HTTP/1.1 与来源的连接( 一个 TLS- 接取 / “ MITM” 代理) 无法 保存 HTTP/2 , 无论这个选项设置到什么位置 . - 代理不能缓冲地道. HTTP/2 发送许多小的、依附的
边框。 运输功能已禁用 纳格尔的算法 (单位:千美元)
TCP_NODELAY继续 如果代理缓冲器将字节隧道(或离开) Nagle 在其上游套接字上启用) 与延迟的ACK 交互可以 每回旅行增加大约40毫秒的耐久性,从而消除受益. 斯奎德集等隧道代理TCP_NODELAY打开CONNECT隧道通过 默认; 如果您使用不同的代理, 请确认 .
当没有代理应用时, 此选项没有效果 —— 直接连接总是使用 HTTP/2 (英语).
参数
baseUrl(单位:千美元)string,例如:https://example.com/my-api(中文(简体) ) ——所有 HTTP 请求的基础 URLoptions(单位:千美元)TransportOptions,可选) - 配置
回返
连接传输 createClient 从
@arcjet/protocol。 。 。 .
ProxyEnvironment
用于检测外出代理服务器的环境变量地图( TypeScript)
类型)。 这个形状和 process.env。 。 。 .
TransportLogger
当检测到代理服务器时, Logger 在启动时打印一行( TypeScript)
类型)。 它必须提供 info 方法.
TransportOptions
配置用于 createTransport (简体中文).
字段
log(单位:千美元)TransportLogger,可选) —— 检测到代理时, 登录器用于在启动时打印行; 默认值 转换到从ARCJET_LOG_LEVEL环境变量proxyEnv(单位:千美元)ProxyEnvironment或者说false,可选) – 用于检测出局代理的环境变量;默认为process.env因此标准代理环境变量是自动检测的; 通过false忽略代理环境变量proxyHttpVersion(单位:千美元)"1.1"或者说"2"默认"1.1"(中文(简体) ) ——在节点.js上使用代理时使用的HTTP版本;"1.1"路线 通过代理,使用节点.js HTTP代理,同时"2"保持 HTTP/2 由 正在通过代理CONNECT;没有代理无效,或 bun、Deno和边缘运行时间(见 HTTP/2 通过代理(中文(简体) )