как узнать, с какого узла был извлечен файл / блок при запросе https://ipfs.io/ipfs/ - PullRequest
2 голосов
/ 19 мая 2019

Когда файл запрашивается из общедоступного шлюза с использованием хэша, шлюз запрашивает узлы-равноправные узлы и возвращает содержимое в виде ответа http.

Например,

  • файл, добавленный локально, сгенерировал хеш QmXjFR1MiAMYprPjwLQwXXonYK52FihQVEL6a2dh3uhUey, который
  • при использовании в качестве https://ipfs.io/ipfs/QmXjFR1MiAMYprPjwLQwXXonYK52FihQVEL6a2dh3uhUey шлюз запрашивает мой локальный узел (у которого есть файл) и возвращает полученный контент в браузере.

Вопрос:

  • существует ли какой-либо способ, скажем, заголовок ответа или каким-либо другим способом, узнать от , какой одноранговый / удаленный компьютер шлюз извлек содержимое? (в приведенном выше примере peer-id ) моей машины

1 Ответ

0 голосов
/ 22 мая 2019

Я думаю, что ответ нет (по состоянию на v0.4.20).Процесс IPFS проходит, когда извлекается блок:

  1. Одновременно выполняйте следующие действия:
    1. Сообщите всем текущим одноранговым узлам, что вам нужен блок (например, QmXjFR1...)
    2. Попросите сеть найти поставщиков нужного вам блока (например, QmXjFR1...)
  2. Если у пира есть блок, он отправит его, и вы проигнорируетелюбые найденные поставщики.
  3. Если ни у одного узла нет блока, и поставщик найден, то поставщик добавляется в качестве узла и уведомляется о том, что вы хотите этот блок (например, QmXjFR1...), после чегоодноранговый узел начинает отправку блока.

Теоретически, если вы запустите узел IPFS, вы, возможно, сможете что-то сделать, чтобы определить, с какого узла поступает блок.Но шлюз не предоставляет эту информацию через интерфейс AFAIK.

Во всяком случае, я ничего не вижу в заголовках ответа.Вот пример использования API шлюза:

λ curl -v https://gateway.ipfs.io/api/v0/cat/QmT78zSuBmuS4z925WZfrqQ1qHaJ56DQaTfyMUF7F8ff5o
*   Trying 2602:fea2:2::1...
* TCP_NODELAY set
* Connected to gateway.ipfs.io (2602:fea2:2::1) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations:
*   CAfile: /etc/ssl/cert.pem
  CApath: none
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
* TLSv1.2 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
* TLSv1.2 (IN), TLS handshake, Server finished (14):
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
* TLSv1.2 (OUT), TLS change cipher, Client hello (1):
* TLSv1.2 (OUT), TLS handshake, Finished (20):
* TLSv1.2 (IN), TLS change cipher, Client hello (1):
* TLSv1.2 (IN), TLS handshake, Finished (20):
* SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384
* ALPN, server accepted to use h2
* Server certificate:
*  subject: CN=ipfs.io
*  start date: May  7 21:37:01 2019 GMT
*  expire date: Aug  5 21:37:01 2019 GMT
*  subjectAltName: host "gateway.ipfs.io" matched cert's "*.ipfs.io"
*  issuer: C=US; O=Let's Encrypt; CN=Let's Encrypt Authority X3
*  SSL certificate verify ok.
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
* Using Stream ID: 1 (easy handle 0x7ff002806600)
> GET /api/v0/cat/QmT78zSuBmuS4z925WZfrqQ1qHaJ56DQaTfyMUF7F8ff5o HTTP/2
> Host: gateway.ipfs.io
> User-Agent: curl/7.54.0
> Accept: */*
>
* Connection state changed (MAX_CONCURRENT_STREAMS updated)!
< HTTP/2 200
< server: nginx
< date: Wed, 22 May 2019 04:32:43 GMT
< content-type: text/plain
< vary: Accept-Encoding
< trailer: X-Stream-Error
< vary: Origin
< x-content-length: 12
< x-stream-output: 1
< access-control-allow-origin: *
< access-control-allow-methods: GET, POST, OPTIONS
< access-control-allow-headers: X-Requested-With, Range, Content-Range, X-Chunked-Output, X-Stream-Output
< access-control-expose-headers: Content-Range, X-Chunked-Output, X-Stream-Output
< x-ipfs-pop: gateway-bank2-sjc1
< strict-transport-security: max-age=31536000; includeSubDomains; preload
<
hello world
* Connection #0 to host gateway.ipfs.io left intact
...