This specification describes how HTTP Gateway semantics and APIs can be used over libp2p transports.
The libp2p+HTTP specification describes how to use HTTP semantics over stream transports, as well as how to do discovery of what protocols are available (and where they are mounted).
.well-known/libp2p/protocols
libp2p application sub-protocols exposed behind /http/1.1
protocol can be
discovered by the well-known resource ([rfc8615]) at .well-known/libp2p/protocols
.
In order for a given HTTP Gateway protocol like the [trustless-gateway] to
work in this environment it requires a protocol identifier to act as a key in
the .well-known/libp2p/protocols
mapping file.
The /http/1.1
sub-protocol identifier for the IPFS Gateway when used over libp2p is:
/ipfs/gateway
A reference .well-known/libp2p/protocols
JSON body with mapping that assumes the gateway to be mounted at /
:
{
"protocols": {
"/ipfs/gateway": {"path": "/"},
}
}
The protocol identifier is shared among Gateway specifications.
HTTP server mounted behind the /ipfs/gateway
identifier MUST expose
[trustless-gateway], but is free to also support other gateway types and
features.
Signaling Features on HTTP Gateways is wip in IPIP-425.
Until the IPIP is finalized, client implementations SHOULD perform feature detection on their own, or assume only the most basic block (application/vnd.ipld.raw) response type from [trustless-gateway] is available.
We gratefully acknowledge the following individuals for their valuable contributions, ranging from minor suggestions to major insights, which have shaped and improved this specification.