@@ -4,15 +4,23 @@ description: >
44 The comprehensive low-level HTTP Gateway enables the integration of IPFS
55 resources into the HTTP stack through /ipfs and /ipns namespaces, supporting
66 both deserialized and verifiable response types.
7- date : 2024-04-17
7+ date : 2025-10-13
88maturity : reliable
99editors :
1010 - name : Marcin Rataj
1111 github : lidel
1212 url : https://lidel.org/
1313 affiliation :
14- name : Protocol Labs
15- url : https://protocol.ai/
14+ name : Shipyard
15+ url : https://ipshipyard.com
16+ former_editors :
17+ - name : Henrique Dias
18+ github : hacdias
19+ url : https://hacdias.com/
20+ affiliation :
21+ name : Shipyard
22+ url : https://ipshipyard.com
23+ thanks :
1624 - name : Adrian Lanzafame
1725 github : lanzafame
1826 affiliation :
@@ -28,17 +36,15 @@ editors:
2836 affiliation :
2937 name : Protocol Labs
3038 url : https://protocol.ai/
31- - name : Henrique Dias
32- github : hacdias
33- url : https://hacdias.com/
34- affiliation :
35- name : Protocol Labs
36- url : https://protocol.ai/
3739xref :
3840 - url
3941 - trustless-gateway
42+ - subdomain-gateway
43+ - dnslink-gateway
4044 - ipip-0402
4145 - ipip-0412
46+ - ipip-0288
47+ - ipns-record
4248tags : ['httpGateways', 'lowLevelHttpGateways']
4349order : 0
4450---
@@ -328,6 +334,11 @@ Gateways MUST use 404 to signal that content is not available, particularly
328334when the gateway is [ non recursive] ( #recursive-vs-non-recursive-gateways ) , and only provides access to a known
329335dataset, so that it can assess that the requested content is not part of it.
330336
337+ NOTE: Gateways MUST return 404 for missing root blocks. However, for streaming
338+ responses (such as CAR), once HTTP 200 OK status is sent, gateways cannot
339+ change it. If a child block is missing during streaming, the gateway SHOULD
340+ terminate the stream. Clients MUST verify response completeness.
341+
331342### ` 410 ` Gone
332343
333344Error to indicate that request was formally correct, but this specific Gateway
@@ -635,6 +646,10 @@ Indicates the original, requested content path before any path resolution and tr
635646
636647Example: ` X-Ipfs-Path: /ipns/k2..ul6/subdir/file.txt `
637648
649+ This header SHOULD be returned with deserialized responses.
650+ Implementations MAY omit it with trustless response types
651+ (` application/vnd.ipld.raw ` and ` application/vnd.ipld.car ` ).
652+
638653### ` X-Ipfs-Roots ` (response header)
639654
640655Used for HTTP caching.
@@ -664,6 +679,15 @@ NOTE: while the first CID will change every time any article is changed,
664679the last root (responsible for specific article or a subdirectory) may not
665680change at all, allowing for smarter caching beyond what standard Etag offers.
666681
682+ This header SHOULD be returned with deserialized responses.
683+ Implementations MAY omit it with trustless response types
684+ (` application/vnd.ipld.raw ` and ` application/vnd.ipld.car ` ).
685+
686+ NOTE: Gateways that stream responses (e.g., CAR) without pre-resolving the
687+ entire path MAY only include the root CID for simple ` /ipfs/{cid} ` requests, or
688+ MAY omit this header for path requests where intermediate CIDs are not known
689+ when headers are sent.
690+
667691### ` X-Content-Type-Options ` (response header)
668692
669693Optional, present in certain response types:
0 commit comments