# Address IPFS on the web
This page describes how to address a node in the IPFS network. Clients that support the IPFS protocol can ignore HTTP details and retrieve data natively, while those that don’t can fetch the resource from HTTP server at ipfs.io gateway, as long as they have the content identifier (CID). When ipfs.io or any other public gateway
(opens new window) goes down, IPFS aware clients will still be able to fetch the content from the IPFS network as long as at least one node still provides the data behind the CID to the network:
Addresses using a gateway use the following form, where is the gateway address, and is the content identifier
https://gateway>/ipfs/CID>
https://ipfs.io/ipfs/bafybeihkoviema7g3gxyt6la7vd5ho32ictqbilu3wnlo3rs7ewhnp7lly
(opens new window) can also be used, instead of ipfs.io .
# IPFS addressing in brief
In IPFS, content addresses are path-like; that is, the addresses are components separated by slashes. The first component is the protocol, which tells you how to interpret everything after it.
Content referenced by a hash may have named links. For example, a Git commit has a link named parent , which is really just a pointer to the hash of another Git commit. Components in an IPFS address after the CID are the named links.
Since content addresses aren’t URLs, using them in a web browser requires reformatting. The options for this are:
https://gateway-host>/ipfs/cid>/path>
https://cid>.ipfs.gateway-host>/path>
ipfs://cid>/path>
ipns://ipns-name>/path>
# HTTP gateways
HTTP gateways allow tools that «speak» HTTP but do not speak «IPFS» to communicate. They are the first stage of the upgrade path for the web. More information about IPFS Gateways.
One downside of HTTP gateways is centralization. Location-based addressing of a gateway depends on both DNS and HTTPS/TLS, which relies on trust in certificate authorities
(opens new window) (PKI). In the long term, these issues should be mitigated by the use of opportunistic protocol upgrade schemes.
# Protocol upgrade
Long term, deserialized responses returned by a public HTTP gateway are used only as a fallback when no native implementation of IPFS is available.
IPFS clients, user agents, tools and extensions should detect CIDs in URLs, DNSLinks or IPFS content paths and resolve them directly over the IPFS protocol. This ensures that the retrieved data matches the expected hash.
Examples of user agents that support IPFS natively are:
(opens new window) installed next to an IPFS node, such as IPFS Desktop
# Path gateway
A path gateway is the most basic scheme. In this scheme, a URL path used for content addressing is effectively a resource name without a canonical location. The HTTP server provides the location part, which makes it possible for browsers to interpret an IPFS content path relative to the current server and work without need for any conversion. Given a gateway host address (i.e. ipfs.io ), and a path to the resource, (i.e /path/to/resource ), a CID ( ), IPNS ID ( ) or DNSLink ( ) can all be used.
# CID
Given a CID , a URL path can be constructed as follows:
https://.tld/ipfs//path/to/resource
https://ipfs.io/ipfs/bafybeiemxf5abjwjbikoz4mc3a3dla6ual3jsgpdr4cjr3oz3evfyavhwq/wiki/Vincent_van_Gogh.html https://ipfs.io/ipfs/QmT5NvUtoM5nWFfrQdVrFtvGfKFmG7AHE8P34isapyhCxX/wiki/Mars.html
# IPNS
(opens new window) , a URL path can be constructed as follows:
https://.tld/ipns//path/to/resource
https://ipfs.io/ipns/k51qzi5uqu5dlvj2baxnqndepeb86cbk3ng7n3i46uzyxzyqj2xjonzllnv0v8
# DNSLink
Given a DNS name with a DNSLink
(opens new window) text record , a URL path can be constructed as follows:
https://.tld/ipns//path/to/resource
https://ipfs.io/ipns/tr.wikipedia-on-ipfs.org/wiki/Anasayfa.html
In this scheme, all pages share a single origin
(opens new window) . As such, this type of gateway should only be used when site isolation does not matter. Examples include static content without cookies, local storage, or APIs that require user permission.
# Subdomain gateway
(opens new window) is needed, a CIDv1 in a case-insensitive encoding such as Base32 or Base36 should be used in the subdomain:
https://.ipfs..tld/path/to/resource
https://bafybeiemxf5abjwjbikoz4mc3a3dla6ual3jsgpdr4cjr3oz3evfyavhwq.ipfs.dweb.link/wiki/ https://bafybeiemxf5abjwjbikoz4mc3a3dla6ual3jsgpdr4cjr3oz3evfyavhwq.ipfs.cf-ipfs.com/wiki/Vincent_van_Gogh.html https://bafybeiemxf5abjwjbikoz4mc3a3dla6ual3jsgpdr4cjr3oz3evfyavhwq.ipfs.localhost:8080/wiki/
# Native support in Kubo
(opens new window) provides native support for subdomain gateways on hostnames defined in the Gateway.PublicGateways
Learn more about Kubo configuration for hosting a public gateway:
- Some browsers and other user agents force lowercase for the authority part of URLs, breaking case-sensitive CIDs before the HTTP gateway has a chance to read them.
- DNS label length is limited to 63 characters (RFC 1034
Due to these limitations, the use of short, case-insensitive CIDv1 in a subdomain context is advised. Base32 is the safe default; the less-popular Base36 can be used for longer ED25519 libp2p keys.
See the next section to learn how to convert an existing CIDv0 to a DNS-safe representation.
# CID conversion for subdomains
If you have content identified by an older CIDv0, there are an automatic and a manual option to safely represent it as CIDv1 for use in subdomains and other case-insensitive contexts.
# Automatic — leverage the gateway in Kubo
Using a subdomain gateway as a drop-in replacement for a path one removes the need for manual CID conversion.
Requests for a content path sent to the gateway domain will return an HTTP 301 redirect to a correct subdomain version, taking care of any necessary encoding conversion if needed:
https://.tld/ipfs/ -> https://.ipfs..tld/
The gateway converts the CID to case-insensitive encoding. The multihash in CIDv1 is the same as in the original CIDv0.
# Manual — use cid.ipfs.io or the command line
The conversion can also be done manually.
To convert a CID to Base32 with no padding (RFC4648
(opens new window) , or the command line. Below is an example using the command line:
ipfs cid base32 QmbWqxBEKC3P8tqsKc98xmWNzrzDtRLMiMPL8wBuTGsMnR
The output of this is:
bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi
PeerIDs can be represented as a CID with libp2p-key multicodec
(opens new window) . Base36 is suggested as a safer default for longer keys:
ipfs key list -l --ipns-base base36 k51qzi5uqu5dh9ihj4p2v5sl3hxvv27ryx2w0xrsv6jmmqi91t9xp8p9kaipc2 self ipfs cid format -v 1 -b base36 --codec libp2p-key QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN k2k4r8jl0yz8qjgqbmc2cdu5hkqek5rj6flgnlkyywynci20j0iuyfuj
# DNSLink gateway
The gateway provided by Kubo understands the Host header present in HTTP requests and will check if DNSLink exists for a specified domain name
(opens new window) . If DNSLink is present, the gateway will return content from a path resolved via DNS TXT record. This type of gateway provides full origin isolation
An example is this website, https://docs.ipfs.tech
For a complete DNSLink guide, including tutorials, usage examples, and FAQs, see dnslink.io
# Native URLs
The native address format is the same as a subdomain gateway
(opens new window) HTTP URL, but with two differences:
- The protocol scheme is replaced by the ipfs or ipns namespace
- The location-based authority component (the gateway host and port) is replaced with a CID
ipfs:///path/to/subresource/cat.jpg
ipfs:// ipfs:///path/to/resource ipfs:///path/to/resource?query=foo#fragment ipns:// ipns:///path/to/resource ipns:///path/to/resource?query=foo#fragment
Our main goal here is to reuse existing standards that maximize interoperability with existing user-agents like browsers and CLI tools. If something is not clear, HTTP URL rules apply.
The first element after the double slash is an identifier representing the content root. It is interpreted as an authority component used for origin calculation, which provides necessary isolation between security contexts of different content trees.
ipfs://bafybeiemxf5abjwjbikoz4mc3a3dla6ual3jsgpdr4cjr3oz3evfyavhwq/wiki/Vincent_van_Gogh.html
Avoid case-sensitive CID
Some user agents will force-lowercase the CID component of URL-like address. To ensure interoperability with existing libraries and software, use case-insensitive CID encoding. Use of CIDv1 in Base32 or Base36 is advised.
# Turning native address to a canonical content path
Every «URL» address can be turned back into a content path with ease:
- ipfs:///path/to/resourceA converts to /ipfs//path/to/resourceA
- ipns:///path/to/resourceB converts to /ipns//path/to/resourceB
# Further resources
# Technical specification for implementers
# Background on address scheme discussions
Discussions around IPFS addressing have been ongoing since @jbenet
(opens new window) , with a number of other approaches being proposed. This long-standing design discussion includes many lengthy GitHub issue threads, but a good summary can be found in this PR
# IPFS Companion
(opens new window) is a browser extension that simplifies access to IPFS resources.
It provides support for native URLs and will automatically redirect IPFS gateway requests to your local Kubo daemon so that you are not relying on or trusting remote gateways.
# Shared dWeb namespace
This concept isn’t yet built, but may be explored and experimented with in the future. The distributed web community is exploring the idea of a shared dweb namespace to remove the complexity of addressing IPFS and other content-addressed protocols. Approaches currently being investigated are:
# Address IPFS on the web
This page describes how to address a node in the IPFS network. Clients that support the IPFS protocol can ignore HTTP details and retrieve data natively, while those that don’t can fetch the resource from HTTP server at ipfs.io gateway, as long as they have the content identifier (CID). When ipfs.io or any other public gateway
(opens new window) goes down, IPFS aware clients will still be able to fetch the content from the IPFS network as long as at least one node still provides the data behind the CID to the network:
Addresses using a gateway use the following form, where is the gateway address, and is the content identifier
https://gateway>/ipfs/CID>
https://ipfs.io/ipfs/bafybeihkoviema7g3gxyt6la7vd5ho32ictqbilu3wnlo3rs7ewhnp7lly
(opens new window) can also be used, instead of ipfs.io .
# IPFS addressing in brief
In IPFS, content addresses are path-like; that is, the addresses are components separated by slashes. The first component is the protocol, which tells you how to interpret everything after it.
Content referenced by a hash may have named links. For example, a Git commit has a link named parent , which is really just a pointer to the hash of another Git commit. Components in an IPFS address after the CID are the named links.
Since content addresses aren’t URLs, using them in a web browser requires reformatting. The options for this are:
https://gateway-host>/ipfs/cid>/path>
https://cid>.ipfs.gateway-host>/path>
ipfs://cid>/path>
ipns://ipns-name>/path>
# HTTP gateways
HTTP gateways allow tools that «speak» HTTP but do not speak «IPFS» to communicate. They are the first stage of the upgrade path for the web. More information about IPFS Gateways.
One downside of HTTP gateways is centralization. Location-based addressing of a gateway depends on both DNS and HTTPS/TLS, which relies on trust in certificate authorities
(opens new window) (PKI). In the long term, these issues should be mitigated by the use of opportunistic protocol upgrade schemes.
# Protocol upgrade
Long term, deserialized responses returned by a public HTTP gateway are used only as a fallback when no native implementation of IPFS is available.
IPFS clients, user agents, tools and extensions should detect CIDs in URLs, DNSLinks or IPFS content paths and resolve them directly over the IPFS protocol. This ensures that the retrieved data matches the expected hash.
Examples of user agents that support IPFS natively are:
(opens new window) installed next to an IPFS node, such as IPFS Desktop
# Path gateway
A path gateway is the most basic scheme. In this scheme, a URL path used for content addressing is effectively a resource name without a canonical location. The HTTP server provides the location part, which makes it possible for browsers to interpret an IPFS content path relative to the current server and work without need for any conversion. Given a gateway host address (i.e. ipfs.io ), and a path to the resource, (i.e /path/to/resource ), a CID ( ), IPNS ID ( ) or DNSLink ( ) can all be used.
# CID
Given a CID , a URL path can be constructed as follows:
https://.tld/ipfs//path/to/resource
https://ipfs.io/ipfs/bafybeiemxf5abjwjbikoz4mc3a3dla6ual3jsgpdr4cjr3oz3evfyavhwq/wiki/Vincent_van_Gogh.html https://ipfs.io/ipfs/QmT5NvUtoM5nWFfrQdVrFtvGfKFmG7AHE8P34isapyhCxX/wiki/Mars.html
# IPNS
(opens new window) , a URL path can be constructed as follows:
https://.tld/ipns//path/to/resource
https://ipfs.io/ipns/k51qzi5uqu5dlvj2baxnqndepeb86cbk3ng7n3i46uzyxzyqj2xjonzllnv0v8
# DNSLink
Given a DNS name with a DNSLink
(opens new window) text record , a URL path can be constructed as follows:
https://.tld/ipns//path/to/resource
https://ipfs.io/ipns/tr.wikipedia-on-ipfs.org/wiki/Anasayfa.html
In this scheme, all pages share a single origin
(opens new window) . As such, this type of gateway should only be used when site isolation does not matter. Examples include static content without cookies, local storage, or APIs that require user permission.
# Subdomain gateway
(opens new window) is needed, a CIDv1 in a case-insensitive encoding such as Base32 or Base36 should be used in the subdomain:
https://.ipfs..tld/path/to/resource
https://bafybeiemxf5abjwjbikoz4mc3a3dla6ual3jsgpdr4cjr3oz3evfyavhwq.ipfs.dweb.link/wiki/ https://bafybeiemxf5abjwjbikoz4mc3a3dla6ual3jsgpdr4cjr3oz3evfyavhwq.ipfs.cf-ipfs.com/wiki/Vincent_van_Gogh.html https://bafybeiemxf5abjwjbikoz4mc3a3dla6ual3jsgpdr4cjr3oz3evfyavhwq.ipfs.localhost:8080/wiki/
# Native support in Kubo
(opens new window) provides native support for subdomain gateways on hostnames defined in the Gateway.PublicGateways
Learn more about Kubo configuration for hosting a public gateway:
- Some browsers and other user agents force lowercase for the authority part of URLs, breaking case-sensitive CIDs before the HTTP gateway has a chance to read them.
- DNS label length is limited to 63 characters (RFC 1034
Due to these limitations, the use of short, case-insensitive CIDv1 in a subdomain context is advised. Base32 is the safe default; the less-popular Base36 can be used for longer ED25519 libp2p keys.
See the next section to learn how to convert an existing CIDv0 to a DNS-safe representation.
# CID conversion for subdomains
If you have content identified by an older CIDv0, there are an automatic and a manual option to safely represent it as CIDv1 for use in subdomains and other case-insensitive contexts.
# Automatic — leverage the gateway in Kubo
Using a subdomain gateway as a drop-in replacement for a path one removes the need for manual CID conversion.
Requests for a content path sent to the gateway domain will return an HTTP 301 redirect to a correct subdomain version, taking care of any necessary encoding conversion if needed:
https://.tld/ipfs/ -> https://.ipfs..tld/
The gateway converts the CID to case-insensitive encoding. The multihash in CIDv1 is the same as in the original CIDv0.
# Manual — use cid.ipfs.io or the command line
The conversion can also be done manually.
To convert a CID to Base32 with no padding (RFC4648
(opens new window) , or the command line. Below is an example using the command line:
ipfs cid base32 QmbWqxBEKC3P8tqsKc98xmWNzrzDtRLMiMPL8wBuTGsMnR
The output of this is:
bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi
PeerIDs can be represented as a CID with libp2p-key multicodec
(opens new window) . Base36 is suggested as a safer default for longer keys:
ipfs key list -l --ipns-base base36 k51qzi5uqu5dh9ihj4p2v5sl3hxvv27ryx2w0xrsv6jmmqi91t9xp8p9kaipc2 self ipfs cid format -v 1 -b base36 --codec libp2p-key QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN k2k4r8jl0yz8qjgqbmc2cdu5hkqek5rj6flgnlkyywynci20j0iuyfuj
# DNSLink gateway
The gateway provided by Kubo understands the Host header present in HTTP requests and will check if DNSLink exists for a specified domain name
(opens new window) . If DNSLink is present, the gateway will return content from a path resolved via DNS TXT record. This type of gateway provides full origin isolation
An example is this website, https://docs.ipfs.tech
For a complete DNSLink guide, including tutorials, usage examples, and FAQs, see dnslink.io
# Native URLs
The native address format is the same as a subdomain gateway
(opens new window) HTTP URL, but with two differences:
- The protocol scheme is replaced by the ipfs or ipns namespace
- The location-based authority component (the gateway host and port) is replaced with a CID
ipfs:///path/to/subresource/cat.jpg
ipfs:// ipfs:///path/to/resource ipfs:///path/to/resource?query=foo#fragment ipns:// ipns:///path/to/resource ipns:///path/to/resource?query=foo#fragment
Our main goal here is to reuse existing standards that maximize interoperability with existing user-agents like browsers and CLI tools. If something is not clear, HTTP URL rules apply.
The first element after the double slash is an identifier representing the content root. It is interpreted as an authority component used for origin calculation, which provides necessary isolation between security contexts of different content trees.
ipfs://bafybeiemxf5abjwjbikoz4mc3a3dla6ual3jsgpdr4cjr3oz3evfyavhwq/wiki/Vincent_van_Gogh.html
Avoid case-sensitive CID
Some user agents will force-lowercase the CID component of URL-like address. To ensure interoperability with existing libraries and software, use case-insensitive CID encoding. Use of CIDv1 in Base32 or Base36 is advised.
# Turning native address to a canonical content path
Every «URL» address can be turned back into a content path with ease:
- ipfs:///path/to/resourceA converts to /ipfs//path/to/resourceA
- ipns:///path/to/resourceB converts to /ipns//path/to/resourceB
# Further resources
# Technical specification for implementers
# Background on address scheme discussions
Discussions around IPFS addressing have been ongoing since @jbenet
(opens new window) , with a number of other approaches being proposed. This long-standing design discussion includes many lengthy GitHub issue threads, but a good summary can be found in this PR
# IPFS Companion
(opens new window) is a browser extension that simplifies access to IPFS resources.
It provides support for native URLs and will automatically redirect IPFS gateway requests to your local Kubo daemon so that you are not relying on or trusting remote gateways.
# Shared dWeb namespace
This concept isn’t yet built, but may be explored and experimented with in the future. The distributed web community is exploring the idea of a shared dweb namespace to remove the complexity of addressing IPFS and other content-addressed protocols. Approaches currently being investigated are:
Какой хост-шлюз использовать для преобразования адресов IPFS и IPNS?
IPFS (InterPlanetary File System) и IPNS (InterPlanetary Name System) — это две связанные технологии, которые позволяют создавать децентрализованное хранилище информации и поддерживать постоянные имена для этой информации.
Однако для доступа к содержимому IPFS или IPNS требуется имя хоста шлюза, который преобразует IPFS-адреса в сетевые адреса. Имя хоста шлюза может быть разным и зависит от предпочтений пользователя и настроек системы.
Возможны различные варианты имени хоста шлюза, такие как «ipfs.io», «gateway.ipfs.io» или любое другое имя хоста, которое пользователь может выбрать или настроить самостоятельно. Главное, чтобы имя хоста шлюза было доступно в сети и обеспечивало надежный и стабильный доступ к ресурсам IPFS и IPNS.
В конечном итоге, выбор имени хоста шлюза является индивидуальным и зависит от нужд и предпочтений каждого пользователя. Однако, несмотря на различные варианты имен хоста, сама концепция шлюза играет важную роль в обеспечении доступа к децентрализованному хранилищу информации, которое предоставляет IPFS и IPNS.
Имя хоста шлюза: что это и зачем нужно?
Шлюзы IPFS являются посредниками между пользователем и сетью IPFS. Они позволяют пользователям получать доступ к контенту, распределенному по всей сети IPFS, используя обычные браузеры и клиенты. Без шлюзов IPFS было бы сложно получить доступ к данным, хранящимся в IPFS, так как адресация в IPFS основана на хешах, а не на обычных URL-адресах.
Имя хоста шлюза можно использовать для обращения к определенному контенту в IPFS по удобному URL-адресу, который можно распространять и использовать в обычных сценариях. Он позволяет сделать контент IPFS более доступным для обычных пользователей, которые не знакомы с IPFS и не хотят использовать специализированные клиенты или писать сложные адреса.
Имя хоста шлюза можно использовать для получения доступа к различным типам контента, включая веб-страницы, изображения, видео и другие файлы. Использование шлюза IPFS предоставляет возможность получить доступ к этим файлам, необходимым пользователю, с использованием обычного веб-браузера.
Что такое хост и шлюз?
Хост
Хост в общем смысле – это компьютер или устройство, подключенное к сети, которое обеспечивает доступность ресурсов и предоставляет услуги другим устройствам, известным как клиенты. Хост может быть сервером, на котором хранятся и обрабатываются данные, или клиентом, который запрашивает и получает эти данные.
В контексте IPFS и IPNS, хост относится к узлу, который хранит и обеспечивает доступность контента, загруженного в сеть IPFS. Чтобы другие узлы могли получить доступ к этому контенту, они должны знать адрес хоста, чтобы установить соединение и получить данные.
Шлюз
Шлюз (Gateway) – это промежуточное устройство или сервис, которое выполняет функцию переадресации сетевых запросов с одной сети на другую. В контексте IPFS и IPNS, шлюз преобразует адреса IPFS и IPNS в адреса, понятные браузерам и другим сетевым приложениям.
Шлюз предоставляет интерфейс для пользователей, позволяя им просматривать и загружать контент, хранящийся в IPFS, через обычный веб-браузер. Он принимает запросы от клиентов, перенаправляет их к соответствующим узлам IPFS и возвращает результаты клиенту.
Использование шлюза позволяет обращаться к контенту IPFS без необходимости установки дополнительного программного обеспечения.
Однако, следует помнить, что шлюз является промежуточным звеном и может быть уязвимым для цензуры или атак. Поэтому важно выбирать надежные и проверенные шлюзы при работе с IPFS и IPNS.
Хост и шлюз – два ключевых элемента в экосистеме IPFS и IPNS, обеспечивающие доступность и удобство использования контента, хранящегося в сети IPFS.
IPFS и IPNS: немного теории
IPFS представляет собой распределенную файловую систему, которая хранит данные в виде блоков и использует хеш-функции для их идентификации. Каждый блок имеет уникальный хеш, который затем используется для получения данных. IPFS позволяет распределенно хранить и обмениваться файлами, обеспечивая высокую доступность и устойчивость к сбоям.
Однако, адресация в IPFS основана на хешах, что делает адреса нечитаемыми и неудобными для использования. И здесь на сцену выходит IPNS. IPNS предоставляет механизм преобразования адресов IPFS в удобные для использования имена. Он использует публичный и приватный ключи для создания подписанного отражения IPFS-хеша и привязки его к уникальному идентификатору документа. Таким образом, IPNS обеспечивает долговременные имена для контента в IPFS.
Для преобразования адресов IPFS в удобочитаемые имена, используется хост-шлюз. Хост-шлюз — это веб-сервер, который преобразует IPFS-хеши в удобные для использования URL-адреса. Он работает как посредник между IPFS и обычным веб-браузером, позволяя пользователям получать доступ к контенту, не зная его фактического IPFS-адреса.
Хост-шлюз предоставляет удобный способ получить доступ к контенту, хранящемуся в IPFS, однако он также имеет свои ограничения. Например, хост-шлюз может быть недоступен, если сервер вышел из строя или был удален. Кроме того, хост-шлюз может не поддерживать определенные функции IPFS, такие как версионирование и шифрование. Поэтому, для максимальной надежности и безопасности, рекомендуется использовать нативные клиенты IPFS.
| IPFS | IPNS | Хост-шлюз |
|---|---|---|
| Распределенная файловая система | Интерпланетная система имен | Веб-сервер, обеспечивающий доступ к IPFS-контенту |
| Хранение данных в виде блоков | Преобразование IPFS-адресов в имена | Преобразование IPFS-хешей в URL-адреса |
| Уникальный хеш для каждого блока | Использование ключей для создания подписанного отражения IPFS-хеша | Предоставление удобного способа доступа к IPFS-контенту |
IPFS и IPNS: взаимосвязь с хостом
IPFS
IPFS — это протокол коммуникации и распределенная файловая система, построенная на основе блокчейна и технологии peer-to-peer. Основная идея IPFS заключается в том, что вместо ссылки на файлы по URL-адресам, как в традиционном вебе, файлы в IPFS идентифицируются уникальными хешами и доступны по их хеш-адресам.
При работе с IPFS, пользователь может загружать файлы в сеть, которые будут распределены по всем узлам сети, а затем доступны для загрузки другим пользователям. Каждый файл в IPFS имеет свой уникальный хеш, который является его адресом в сети.
IPNS
IPNS — это механизм, который позволяет создавать идентифицируемые и постоянные ссылки на IPFS-ресурсы, используя понятные имена, вместо хешей. IPNS дает возможность привязать постоянное имя к хешу файла, чтобы пользователи могли легко получать доступ к файлу, не зная его актуальный адрес в IPFS.
IPNS использует публичные и закрытые ключи для создания и подписи записей имен, которые затем распространяются по сети и могут быть обновлены. Когда пользователь запрашивает IPNS-имя, клиент IPFS проверяет записи имен, чтобы найти актуальный хеш файла, и затем загружает файл с соответствующим хешем.
Взаимосвязь с хостом
Имя хоста шлюза, который используется для преобразования адресов IPFS в IPNS и обратно, играет важную роль в работе с IPFS и IPNS. Хост-шлюз — это сервер, который позволяет пользователям получать доступ к файлам IPFS через обычные URL-адреса веб-браузера.
При использовании IPFS, пользователи могут указать имя хоста шлюза в настройках IPFS-клиента. Когда пользователь запрашивает файл через IPNS-имя, IPFS-клиент использует хост-шлюз для преобразования IPNS-имени в актуальный IPFS-адрес. Затем файл загружается с хеш-адреса через хост-шлюз и отображается в браузере пользователя.
Таким образом, взаимосвязь с хостом является важным аспектом работы с IPFS и IPNS, позволяя пользователям получать доступ к файлам через привычные URL-адреса и упрощая процесс обмена и доступа к файлам в децентрализованной сети IPFS.
Что такое шлюз в контексте IPFS и IPNS?
IPNS (InterPlanetary Name System) — это система именования в IPFS, которая позволяет использовать человеко-читаемые имена вместо хэшей CID (Content Identifier). IPNS использует публичный идентификатор, который связывается с хэшем CID и позволяет обращаться к файлам и контенту по человеко-читаемым именам.
Шлюз выполняет функцию преобразования и переадресации запросов от IPFS к IPNS и наоборот. Он преобразует имена IPNS в хэши CID и наоборот, что позволяет пользователям обращаться к файлам и контенту по привычным именам. Преобразование адресов IPFS IPNS выполняется на стороне шлюза, что упрощает использование и взаимодействие с контентом IPFS.
Шлюзы также предоставляют дополнительные возможности, такие как кэширование контента, улучшение скорости доступа к файлам, поддержка различных протоколов и многое другое. Они могут быть развернуты как локально на компьютере пользователя, так и на удаленных серверах, обеспечивая гибкость и удобство использования.
| Преимущества шлюзов в контексте IPFS и IPNS: |
|---|
| 1. Упрощение доступа к контенту IPFS по человеко-читаемым именам. |
| 2. Повышение скорости доступа к файлам и контенту. |
| 3. Кэширование контента для сокращения нагрузки на сеть. |
| 4. Поддержка различных протоколов и функциональных возможностей. |
В итоге, шлюзы играют важную роль в системе IPFS и IPNS, обеспечивая удобство использования и обмена контентом. Они позволяют пользователям обращаться к файлам и контенту по привычным именам, улучшают скорость доступа и распределение нагрузки на сеть.
Зачем использовать имя хоста шлюза?
Одной из главных причин использования имени хоста шлюза является упрощение процесса доступа к контенту на IPFS. Вместо того, чтобы запоминать сложные и длинные адреса IPFS, пользователи могут просто использовать имя хоста шлюза, которое легко запоминается и удобно вводится в адресную строку браузера.
Имя хоста шлюза также позволяет обойти ограничения сетевых настроек и фаерволов, которые могут блокировать прямой доступ к IPFS. Хост шлюза выступает в роли посредника, который преобразует запросы пользователя и позволяет работать с IPFS-контентом даже в условиях ограничений сети.
Кроме того, использование имени хоста шлюза позволяет распространять контент на IPFS более широко и удобно. Пользователи могут легко поделиться ссылкой на хост шлюза, что упростит доступ к контенту другим людям. Это особенно полезно при распространении контента через социальные сети, мессенджеры и другие средства обмена информацией.
В целом, использование имени хоста шлюза существенно упрощает взаимодействие с IPFS-контентом, делая его доступным и удобным для широкого круга пользователей. Хост шлюза является важным элементом инфраструктуры IPFS, который делает технологию более доступной и простой в использовании.
Преимущества использования имени хоста шлюза
Имя хоста шлюза играет важную роль в системе IPFS IPNS, предоставляя ряд преимуществ:
1. Удобство использования
Имя хоста шлюза упрощает доступ к IPFS-ресурсам, позволяя пользователям использовать обычные URL-адреса для доступа к данным. Это существенно упрощает работу с IPFS, поскольку не требует специальных инструментов или знаний для доступа к ресурсам.
2. Поддержка резервированных имен хостов
Имя хоста шлюза может быть настроено для поддержки резервированных имен хостов. Это позволяет определить специальные адреса для доступа к определенным ресурсам, упрощая работу с IPFS IPNS и обеспечивая гибкость в настройке доступа.
3. Улучшенная безопасность
Имя хоста шлюза может быть использовано для улучшения безопасности IPFS IPNS. Путем настройки правил доступа и авторизации на уровне хоста, можно контролировать, кто имеет доступ к ресурсам IPFS. Это позволяет обеспечить безопасность данных и предотвратить несанкционированный доступ к информации.
4. Гибкость маршрутизации
Имя хоста шлюза позволяет гибко маршрутизировать запросы к ресурсам IPFS IPNS. В зависимости от настроек хоста, можно управлять тем, какие узлы IPFS используются для обработки запросов и преобразования адресов. Это позволяет улучшить производительность и эффективность системы.
Использование имени хоста шлюза в IPFS IPNS предоставляет ряд преимуществ, упрощая доступ к ресурсам, обеспечивая безопасность данных и обладая гибкостью в настройке и маршрутизации запросов.
Имя хоста шлюза: как выбрать и настроить?
1. Выбор имени хоста
- Выберите короткое и запоминающееся доменное имя для шлюза. Лучше всего использовать имя, которое легко произносится и запоминается.
- Убедитесь, что имя хоста доступно и не занято другими сервисами или сайтами.
- Рекомендуется использовать домен верхнего уровня своей компании или организации, чтобы создать уникальный идентификатор.
2. Настройка имени хоста
- Зарегистрируйте выбранное доменное имя на регистраторе доменных имен.
- Свяжите ваше доменное имя с IP-адресом вашего шлюза. Это можно сделать через DNS-записи, добавив запись типа «A» или «CNAME».
- Убедитесь, что DNS-записи правильно настроены и указывают на ваш шлюз и его IP-адрес.
- Проверьте работу имени хоста, введя его в браузере. Он должен отобразить содержимое IPFS-адресов.
3. Дополнительные рекомендации
- Настройте SSL-сертификат для вашего имени хоста, чтобы обеспечить безопасное соединение с вашим шлюзом.
- Поддерживайте свое имя хоста и шлюз в актуальном состоянии, следите за обновлениями IPFS и IPNS, чтобы улучшить производительность и безопасность.
- Убедитесь, что ваш шлюз доступен для внешних пользователей и не блокируется фаерволом или другими сетевыми настройками.
Наш сайт — это уникальный ресурс, который предоставляет доступ к статьям от профессионалов в разных областях на разные темы . Здесь вы найдете полезную информацию о многих важных аспектах жизни, начиная от здоровья и фитнеса, заканчивая бизнесом и технологиями.
Мы собрали команду экспертов, которые делятся своим опытом и знаниями с нашими читателями. Наши авторы — это профессионалы в своей области, которые имеют многолетний опыт работы и глубокие знания в своей сфере.
Мы публикуем статьи на самые разные темы, включая здоровье, красоту, фитнес, питание, бизнес, технологии и многое другое. Вы можете найти ответы на многие свои вопросы и получить полезные советы от наших экспертов.
Если у вас есть какие-либо вопросы или вы хотите узнать больше о какой-то теме, наши авторы всегда готовы помочь и ответить на ваши вопросы. Вы можете написать им через форму обратной связи, которая находится на нашем сайте.
Межпланетная файловая система — Переключаем свой сайт на localhost (локальный шлюз IPFS)
Мало смысла в IPFS, если использовать его только как бесплатный хостинг для сайта в сети интернет. Поэтому мы научимся здесь загружать наш сайт через локальный IPFS шлюз пользователя.
Пользователю это даст быстрый доступ к его локальной копии нашего сайта.
Напомню: InterPlanetary File System — это новая децентрализованная сеть обмена файлами (HTTP-сервер, Content Delivery Network). О ней я начал рассказ в статье «Межпланетная файловая система IPFS».
Содержание
- Переключаем наш сайт
1.1. DNS
1.2. Скрипты и стили
1.2.1. Проверяем локальный шлюз и переключаемся на него скриптом
1.2.2. Определяем рабочий шлюз при помощи CSS - Локализуем глобальный шлюз или сайты в IPFS
Переключаем наш сайт
DNS
У нашего сайта на данный момент уже есть как минимум 3 DNS записи:
A [Наш домен] [IP адрес хостинга] TXT [Наш домен] dnslink=/ipfs/[CID контента] TXT _dnslink.[Наш домен] dnslink=/ipfs/[CID контента]
Добавим к ним ещё 3:
A l.[Наш домен] 127.0.0.1 TXT l.[Наш домен] dnslink=/ipfs/[CID контента] TXT _dnslink.l.[Наш домен] dnslink=/ipfs/[CID контента]
[CID контента] — Это идентификатор контента (CID) раньше назывался мультихеш. Его мы получаем публикуя сайт командой ipfs add в сети IPFS.
Скрипты и стили
В HTML тегах script и link появились поля integrity и crossorigin. Они отвечают за проверку хеша до запуска скрипта или применения стилей. Их мы и используем для определения рабочего шлюза у посетителя сайта.
Расположить их лучше в конце страницы, чтобы они не задерживали загрузку и отображение.
Варианты адресов, которые нам надо проверить:
- http://l.[наш домен]:8080
8080 это стандартный порт на котором по умолчанию запускается IPFS.
Если всё настроено правильно, то с http-версии сайта браузер загрузит скрипт или стиль. - https://l.[наш домен]:8443
8443 это порт на который пользователь может настроить stunnel.
Данный вариант нам понадобится, если запрос идёт с HTTPS сайта и наш домен добавлен в локальный сертификат. - http://127.0.0.1:8080/ipns/[наш домен]
Этот вариант на случай, если мы не задали l домен для нашего сайта и запрос идёт с http. - https://127.0.0.1:8443/ipns/[наш домен]
Этот вариант на случай запроса с https. Этот вариант сработает, если не задан l домен или не добавлен в локальный сертификат.
Аналогичным образом мы можем проверить порты 80 для http и 443 для https.
Проверяем локальный шлюз и переключаемся на него скриптом
Добавив этот скрипт к странице вашего сайта вы автоматически переключите посетителя на его локальный IPFS шлюз.
var redirect_to_local; /* Эта функция добавляет к текущему домену третьим уровнем домен ```l``` */ function l_hostname() < var l_hostname = window.location.hostname.split("."); l_hostname.splice(-2,0,"l"); return l_hostname.join("."); >/* Эта функция создаёт новый элемент script и с адресом скрипта, который должен загрузиться через локальный шлюз пользователя. Также она создаёт функцию, которая будет вызвана этим скриптом в случае удачной загрузки. В случае неудачи выполнится функция из переменной onerror, которая присваивается соответствующему полю элемента script. */ function add_redirect_script(prtocol, port, use_ip, onerror)< var script = document.createElement("script"); script.onerror = onerror; script.setAttribute("integrity", "sha384-dActyNwOxNY9fpUWleNW9Nuy3Suv8Dx3F2Tbj1QTZWUslB1h23+xUPillTDxprx7"); script.setAttribute("crossorigin", "anonymous"); script.setAttribute("defer", ""); script.setAttribute("async", ""); if ( use_ip ) script.setAttribute("src", prtocol+"//127.0.0.1:"+port+"/ipns/"+window.location.hostname+"/redirect_call.js"); else script.setAttribute("src", prtocol+"//"+l_hostname()+":"+port+"/redirect_call.js"); redirect_to_local = function() < var a = document.createElement("a"); a.href = window.location; a.protocol = prtocol; a.port = port; if ( use_ip )< a.pathname = "/ipns/" + a.hostname + a.pathname; a.hostname = "127.0.0.1"; >else < var hostname = a.hostname.split("."); hostname.splice(-2,0,"l"); a.hostname = hostname.join("."); >window.location = a.href; >; document.head.appendChild(script); > /* Это главная функция, которая запускается сразу. Она проверяет, не находимся ли мы уже по адресу шлюза. Если нет, то начинает проверять его доступность, перебирая варианты адресов и протоколов. */ !function(location) < if ( location.protocol.indexOf("http") == 0 && location.hostname.length >0 && location.hostname.indexOf("l.") != 0 && location.hostname.indexOf(".l.") < 0 && location.hostname != "127.0.0.1" ) < add_redirect_script( "http:", 8080, false, function()< add_redirect_script( "https:", 8443, false, function()< add_redirect_script( "http:", 8080, true, function()< add_redirect_script( "https:", 8443, true ); >); > ); > ); > >(window.location)
В пару ему идет скрипт:
redirect_call.js (sha384-dActyNwOxNY9fpUWleNW9Nuy3Suv8Dx3F2Tbj1QTZWUslB1h23+xUPillTDxprx7)
redirect_to_local();
Integrity этого скрипта можно посчитать командой:
openssl dgst -sha384 -binary < "redirect_call.js" | openssl enc -base64 -A
У меня соответственно результат этой команды:
dActyNwOxNY9fpUWleNW9Nuy3Suv8Dx3F2Tbj1QTZWUslB1h23+xUPillTDxprx7
Если у вас результат другой, замените это значение в скрипте выше на своё.
Теперь пользователь будет автоматически перенаправлен на подходящий локальный адрес шлюза с сохранением остальных параметров адреса.
Определяем рабочий шлюз при помощи CSS
-
Создадим CSS файл который будет маяком работы шлюза.
httpl.css (sha384-4zVfUIU3jAvrXNQlD5WHMl6TI8bMiBseKrDfLJpr5Mn+xdygya+svSeP6dK/5wpu)
.httpl
.gatewaylink
Теперь даже если у пользователя отключены скрипты, он сможет перейти на шлюз самостоятельно по ссылке. Аналогично можно проверить и остальные варианты адреса шлюза.
Локализуем глобальный шлюз или сайты в IPFS
Другие мои статьи о "межпланетной файловой системе":
- "Межпланетная файловая система IPFS"
- Публикуем сайт в межпланетной файловой системе IPFS
- Хостим сайт в межпланетной файловой системе IPFS под Windows
- Больше нет необходимости копировать в сеть
- Локализуем глобальный шлюз или сайты в IPFS