ipfs://网址支持curl
CURL 8.4.0附带内置支持ipfs://和ipns://地址。
这使得能够curl与用户首选的IPFS 网关无缝集成(打开新窗口)通过IPFS_GATEWAY环境变量或gateway文件。最重要的是,这些功能现在可以立即使用:
export IPFS_GATEWAY="http://127.0.0.1:8080" # local (trusted) gateway provided by ipfs daemon like Kubo
curl ipfs://bafkreih3wifdszgljcae7eu2qtpbgaedfkcvgnh4liq7rturr2crqlsuey
hello from IPFS
在这篇博文中,我们将:
一个简短的历史
之前已经尝试过在 CURL 中支持 IPFS (打开新窗口)作为 CURL 库功能。一些讨论导致人们相信这应该在 CURL 工具本身而不是其库中实现。新的实施尝试(打开新窗口)采用了最终被接受的工具端方法,并且现在可以在 CURL 8.4.0 中使用!
CURL 中对 IPFS 的支持实际上由两个实现细节组成。
CURL 尝试查找本地安装或配置的网关。
ipfs://bafybeigagd5nmnn2iys2f3doro7ydrevyr2mzarwidgadawmamiteydbzi重写为为网关 URL。这就是curl 在内部处理它的方式,你看不到这个URL 重写。
如果您在本地安装了 IPFS,则运行curl ipfs://将 Just Work™。如果没有,CURL 将返回错误,并提供有关如何设置网关首选项的详细信息。这确保了用户代理受到尊重,没有第三方网关被用作隐式默认。
为什么ipfs://URL 支持如此重要?
为什么不能
同样被接受?或者为什么本地 URL 不行
:8080/ipfs/bafybeigagd5nmnn2iys2f3doro7ydrevyr2mzarwidgadawmamiteydbzi?
两个地址都与特定位置相关联。
IPFS 是一套模块化协议,专门用于组织和传输内容寻址(打开新窗口)数据。内容在哪里应该不重要。内容标识符(CID (打开新窗口)) 就是所需的全部内容。“哪里”部分是 IPFS 系统负责的实现细节。除了 CID(如特定的 HTTP 网关)之外,还对位置进行硬编码,从而限制最终用户通过该特定的集中入口点获取可用的 IPFS 资源。
如果我们将 URL 分开,我们会看到:
娜娜项目网每日更新创业和副业项目
网址:nanaxm.cn 点击前往娜娜项目网
站 长 微 信: nanadh666
IPFS 系统的用户不应该关心where部分,也不应该被迫使用特定的、硬编码的系统入口点。
像这样的公共网关ipfs.io总是由某个实体拥有,并且可能随时受到审查或关闭。许多网关不允许播放反序列化视频或仅响应白名单中的 CID,以降低成本。其他网关将出于法律原因阻止特定 CID 在特定司法管辖区进行解析。社区运行的公共网关将受到限制并限制使用。
这些不是 IPFS 的限制,而纯粹是特定网关通过自定义配置设置的限制。如果 IPFS 用户选择自行托管并使用本地网关运行自己的 IPFS 节点,那么他们应该始终能够避免此类限制。
CURL 如何找到 IPFS 网关?
任何支持IPIP-280的 IPFS 实现公开一个 IPFS 网关,CURL(和ffmpeg) 可以使用。在撰写本文时,这只是Kobo。
CURL 8.4.0 及更高版本按以下顺序查找网关:
IPFS_GATEWAY,如果设置则使用它。
CLI参数–ipfs-gateway。
文件~/.ipfs/gateway默认网关不可用,读取第一行的位置。
如果在任何这些位置找到网关提示,并且这是有效的 HTTP URL,则 CURL 将使用它。如果没有,那么您将收到一条错误消息,指向与IPFS 相关的 CURL 文档 进一步帮助您。
可以指定任何符合网关规范的IPFS网关。强烈建议使用本地网关,因为它提供最好的安全保证。
恶意网关和数据完整性?
请求反序列化响应并将哈希验证委托给第三方网关会带来风险。公共网关可能是恶意的。或者,知名且受人尊敬的网关被黑客攻击并更改为返回与请求的 CID 不匹配的有效负载。一个人如何保护自己免受这种影响呢?
如果需要反序列化响应,则应在本地受控环境中运行自己的网关。通过自托管 IPFS 网关检索的每个数据块都经过验证,以匹配来自 CID 的哈希值。为了获得最大的灵活性和安全性,请找到提供网关端点的实现(即Kubo)并自己运行!
当使用不能完全信任的第三方网关时,唯一安全的选择是请求可验证的响应类型例如应用程序/vnd.ipld.raw(单个块)或application/vnd.ipld.car (CAR 存档中的多个块)。两者都允许在本地验证网关返回的数据是否与请求的 CID 匹配,从而消除中间人攻击的表面。
CURL示例
反序列化响应
默认情况下,受信任的本地网关充当传统 HTTP 客户端和 IPFS 之间的桥梁。
它执行必要的哈希验证、UnixFS反序列化并将重新组装的文件返回给客户端,就像它们存储在传统的 HTTP 服务器中一样。这意味着所有验证都发生在网关上,并且客户端相信网关在将内容寻址数据返回给他们之前正确验证了内容寻址数据。
使用 CURL 从 IPFS 下载文件
$ curl ipfs://bafkreih3wifdszgljcae7eu2qtpbgaedfkcvgnh4liq7rturr2crqlsuey -o out.txt
如果curl 响应curl: IPFS automatic gateway detection failure,请确保IPFS_GATEWAY已设置(请参阅下面的示例)。
显式指定网关
要在自定义端口 48080 上使用本地网关:
$ export IPFS_GATEWAY=http://127.0.0.1:48080
$ curl ipfs://bafkreih3wifdszgljcae7eu2qtpbgaedfkcvgnh4liq7rturr2crqlsuey
hello from IPFS
当设置环境变量不可行时,可以使用–ipfs-gateway:
$ curl --ipfs-gateway http://127.0.0.1:48080 ipfs://bafkreih3wifdszgljcae7eu2qtpbgaedfkcvgnh4liq7rturr2crqlsuey
hello from IPFS
遵循子域重定向
默认情况下,URL 解析curl不遵循 HTTP 重定向,并假定端点实现反序列化路径网关,或者至少是不信任的网关。
当指向curl子域网关时(如或:8080由本地 Kubo 节点提供)必须传入-Lcurl 命令才能遵循重定向。
$ IPFS_GATEWAY=https://localhost:8080 curl -s -L ipfs://bafkreih3wifdszgljcae7eu2qtpbgaedfkcvgnh4liq7rturr2crqlsuey
hello from IPFS
管道和流响应
CURL 返回的反序列化响应可以直接通过管道传输到视频播放器:
$ curl ipfs://bafybeigagd5nmnn2iys2f3doro7ydrevyr2mzarwidgadawmamiteydbzi | ffplay -
可验证的回应
通过显式请求application/vnd.ipld.raw(一个块)或application/vnd.ipld.car(块流)响应,通过Trustless Gateway 规范中定义的方式默认网关不可用,用户能够获取原始内容寻址数据并自行执行哈希验证。
从不受信任的网关获取并验证目录
要求去信任且可验证通过 HTTP 标头的 CAR 响应Accept:
export IPFS_GATEWAY="https://ipfs.io" # using untrusted public gateway
"Accept: application/vnd.ipld.car" "ipfs://bafybeiakou6e7hnx4ms2yangplzl6viapsoyo6phlee6bwrg4j2xt37m3q" > dag.car curl -H
然后,CAR 可以移动并导入到其他 IPFS 节点中:
$ ipfs dag import dag.car
或者使用go-car等工具在本地进行验证和解压,无需运行完整的 IPFS 节点或ipfs-car:
npm i -g ipfs-car
ipfs-car unpack dag.car --output dag.out
ls dag.out
1007 - Sustainable - alt.txt
1007 - Sustainable - transcript.txt
1007 - Sustainable.png
下一步是什么?
更多支持 IPFS 地址的地方。每个人都可以将 URL 支持集成ipfs://到ipns://他们的应用程序中。请参阅IPIP-280中提出的规范()了解技术细节。我们正在追踪潜在项目()整合有意义!如果您愿意接受挑战,请随时对其中一个潜在项目发表评论如需 IPFS URL 集成或通过以下方式找到我们:
或者其他许多IPFS 社区活跃的地方。
娜娜项目网每日更新创业和副业项目
网址:nanaxm.cn 点击前往娜娜项目网
站 长 微 信: nanadh666