用途:HTTPS Outcalls 允许容器(canister)从链上代码直接向外部 Web 服务发起 HTTPS 请求。默认的复制模式下,子网每个节点都发出相同请求,必须对响应达成一致;转换函数(transform)用于剥离时间戳、请求 ID、字段顺序等非确定性内容,使各副本看到相同响应。
主要能力与模式:复制模式(默认,全部节点发送,得到一个共识响应);非复制模式(is_replicated = false,由系统选一个节点发送);灵活模式(flexible_http_request,由一组节点返回各自响应)。复制模式实际必须提供转换函数;非复制与灵活模式中转换函数可选。灵活模式始终使用定价版本 2。
使用方式:Rust 使用 ic-cdk 0.20.3+ 与 ic-cdk-management-canister 0.2+ 的 HttpRequest::new(url) 构建器与 .send();Motoko 使用 ic 4.x(mops)的 Call.httpRequest(args)。两者都会自动计算并附加所需 cycles。管理容器 ID 为 aaaaa-aa,无需额外部署。
限制与注意:仅支持 HTTPS,纯 HTTP 被拒绝,目标服务器须有有效 TLS 证书;不能访问 localhost 或私有 IP。必须附加 cycles,附加零会失败。max_response_bytes 覆盖响应头加正文,上限 2_000_000 字节;另有 64 个响应头、单个头 8 KiB、全部头合计 48 KiB、URL 8192 字节的限制。省略 max_response_bytes 会按 2MB 预留并计费。非幂等 POST 在复制模式下会被每个副本各调用一次。远程服务器 30 秒无响应或子网 60 秒无响应会以 reject 返回,需处理错误。Motoko 目前仅支持定价版本 1,且无灵活 outcall;版本 2 相关字段与灵活模式在 Motoko 暂未提供。