Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add HTTP Gateway Specs #283

Merged
merged 26 commits into from
Jul 1, 2022
Merged
Changes from 1 commit
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
a28d1de
feat: initial HTTP gateway specs
lidel Jun 2, 2022
6e24eb0
gateway: add Content-Range
lidel Jun 3, 2022
2e4374f
gateway: registerProtocolHandler uri router
lidel Jun 3, 2022
101fa5e
CODEOWNERS: add lidel for ./http-gateways
lidel Jun 3, 2022
7be0611
gateway: resolving an advanced DNSLink chain
lidel Jun 8, 2022
6a0e2fc
gateway: only-if-cached HEAD behavior
lidel Jun 8, 2022
13f53a8
gateway: suggestions from reviewers
lidel Jun 8, 2022
a414411
gateway: include CIDv1 node in summary
lidel Jun 8, 2022
af0363e
gateway: reorder URI router section
lidel Jun 8, 2022
4156b43
gateway: add Denylists section
lidel Jun 8, 2022
5435910
gateway: switch only-if-cached miss to 412
lidel Jun 9, 2022
176133a
gateway: apply suggestions from review
lidel Jun 9, 2022
cad7046
gateway: apply suggestions from Cloudflare
lidel Jun 15, 2022
04111e6
gateway: add X-Content-Type-Options
lidel Jun 15, 2022
ce193e6
gateway: simplify dnslink summary
lidel Jun 23, 2022
ffe8af9
gateway: document 412 Precondition Failed
lidel Jun 23, 2022
7e65a76
gateway: link to ipld codecs explainer
lidel Jun 23, 2022
e3637e5
gateway: stub about handling traversal errors
lidel Jun 23, 2022
2c731d3
gateway: expand HTTP caching considerations
lidel Jun 23, 2022
6787fd8
gateway: editorial fixes
lidel Jun 23, 2022
25497a4
gateway: expand on Host header parsing
lidel Jun 23, 2022
4b57971
gateway: editorial fixes
lidel Jun 23, 2022
75543c3
gateway: X-Forwarded-Proto and X-Forwarded-Host
lidel Jun 24, 2022
849a7e3
gateway: editorial fixes
lidel Jun 24, 2022
e06249f
gateway: X-Trace-Id
lidel Jun 24, 2022
9fc9a9c
gateway: Generated HTML with directory index
lidel Jun 28, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
gateway: resolving an advanced DNSLink chain
  • Loading branch information
lidel committed Jun 8, 2022
commit 7be06110cf4a377adeda57a16c9b270a6287bb3e
32 changes: 25 additions & 7 deletions http-gateways/DNSLINK_GATEWAY.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,15 +55,33 @@ Same as GET, but does not return any payload.

### `Host` (request header)

Defines the [DNSLink](https://docs.ipfs.io/concepts/glossary/#dnslink) name
to RECURSIVELY resolve into an immutable `/ipfs/{cid}/` prefix that should
be prepended to the `path` before the final IPFS content path resolution
is performed.

Defines the DNSLink name to resolve into `/ipfs/{cid}/` prefix that should be
prepended to the `path` before the final IPFS content path resolution is
performed.
Implementations MUST ensure DNSLink resolution is safe and correct:
- each DNSLink may include an additional path segment, which MUST be preserved
- each DNSLink may point at other DNSLink, which means there MUST be a hard
recursion limit (e.g. 32) and HTTP 400 Bad Request error MUST be returned
when the limit is reached.

**Example: resolving an advanced DNSLink chain**

To illustrate, given DNSLink records:

- `_dnslink.a.example.com` TXT record: `dnslink=/ipns/b.example.net/path-b`
- `_dnslink.b.example.net` TXT record: `dnslink=/ipfs/bafy…qy3k/path-c`

HTTP client sends `GET /path-a` request with `Host: a.example.com` header
which recursively resolves all DNSLinks and produces the final immutable
content path:

1. `Host` header + `/path-a` → `/ipns/a.example.net/path-a`
2. Resolving DNSlink at `a.example.net` replaces `/ipns/a.example.net` with `/ipns/b.example.net/path-b`
3. Resolving DNSlink at `b.example.net` replaces `/ipns/b.example.net` with `/ipfs/bafy…qy3k/path-c`
4. The immutable content path is `/ipfs/bafy…qy3k/path-c/path-b/path-a`

Example: if client sent HTTP GET request for `/sub-path` path and `Host:
example.com` header, and DNS at `_dnslink.example.com` has TXT record with
value `dnslink=/ipfs/cid1`, then the final content path is
`/ipfs/cid1/sub-path`

# Appendix: notes for implementers
lidel marked this conversation as resolved.
Show resolved Hide resolved

Expand Down