RASL is a URL scheme used to identify content-addressed DASL resources along with a simple HTTP-based retrieval method.
Content-addressed resources are "self-certifying," which is to say that you don't need any external authority to certify that the content you have when you resolve the identifier is correct: because the identifier contains a hash, you can (and should) verify that you obtained the right content yourself ([[ipfs-principles]]). The identifier is enough to certify the content. This has several implications, but two are particularly relevant for this specification:
https URL — is the
CID itself ([[cid]]).
Taking these aspects into consideration, this specification defines a URL scheme in which the CID is the authority, along with optional hints of potential look-up locations, and defines a retrieval method but does not mandate that RASL retrieval rely on it.
rasl URL Scheme
RASL URLs look like this:
rasl://bafkreifn5yxi7nkftsn46b6x26grda57ict7md2xuvfbsgkiahe2e7vnq4/?hint=berjon.com&hint=bsky.app.
This breaks down into the following components:
rasl scheme. This is simply used as an entry point into RASL semantics.
bafkreifn5yxi7nkftsn46b6x26grda57ict7md2xuvfbsgkiahe2e7vnq4.
/) that is empty or / and that is expected
to be ignored since RASL is only used for raw data retrieval.
hint entries, each of which is a host from which
that CID can be obtained.
Use the following steps to parse a RASL URL:
host part of the parsed URL and store that in cid.hint. Each value must match the syntax of a valid host for the
https scheme and values which do not match this syntax must be ignored
and removed from this list. Store the remaining values in hints. If there were none
then hints is an empty array.
A user agent may retrieve a CID in whichever way it prefers. This section provides a simple standard for HTTP-based CID retrieval, to make it easy for authors to publish content to their own sites and have it retrieved, without having to worry about operating any infrastructure beyond the web server they already have.
Use the following steps to fetch a RASL URL:
https://,
the hint as host, /.well-known/rasl/, and the cid.
GET or HEAD,
that it is stateless (no cookies, no credentials of any kind), and that it uses no content
negotiation.
.well-known path may redirect, so be ready to handle that.
This makes it possible to create sites that are published the usual way and to have a RASL that
is simply a redirect to the resource. So for instance, you may have an existing
https://berjon.com/kitten.jpg the CID for which is
bafkreifn5yxi7nkftsn46b6x26grda57ict7md2xuvfbsgkiahe2e7vnq4.
This can be published as this RASL URL:
rasl://bafkreifn5yxi7nkftsn46b6x26grda57ict7md2xuvfbsgkiahe2e7vnq4/?hint=berjon.com.
A client can retrieve it by constructing a request to this URL:
https://berjon.com/.well-known/rasl/bafkreifn5yxi7nkftsn46b6x26grda57ict7md2xuvfbsgkiahe2e7vnq4.
In turn, the latter may simply return a 307 redirect back to https://berjon.com/kitten.jpg.
(Yes, this is HTTP with extra steps, but the extra steps get you self-certifying content.)
application/octet-stream. (The server should have
done that already, but may not have done so, notably if it relied on a redirect.) The purpose
of RASL is to retrieve data in ways that are independent of the server — any media type
processing must therefore take place at another layer. Without this, we lose the self-certifying
nature of the system. (Note that servers are encouraged to enforce that so as not to have their
RASL endpoints used for general-purpose web serving, which can be a security vector depending on
where the data being served came from.)
Implementations should ignore paths in RASL URLs. They may be used in a future iteration of this specification.