# Tutorial: The Myriad ways to Access and Distribute IPFS Content

These Lessons are tested with go-ipfs version 0.5.0. *Please update this file on github to reflect any other versions that have been tested.*

IPFS hashes are permanent, content-addressed identifiers for your content. This means that you can use many different ways to access, replicate, and/or redistribute the same content using the same link/identifier. The lessons in this tutorial explore many of the ways that you can do this. If you want to learn about why its valuable to have all of these options, read the lesson on [the power of content-addressing](https://github.com/flyingzumwalt/ipfs-primer/tree/f98db30ee4ed47979a1a55d509900cf6a0fe7c88/avenues-for-access/lessons/power-of-content-addressing.md)

(based on <https://en.wikipedia.org/wiki/Content_addressable_network>)

All of the lessons use the same content: a snapshot of the Turkish version of Wikipedia.

## Learning Objectives

These Lessons will teach you how to

* Define *content addressing* and compare it with *location-addressing*
* Use IPFS content hashes to access the same content in many ways with the same link
* Access content through the public IPFS gateways at ipfs.io
* Access content through any IPFS node's http gateway
* Access content using the IPFS browser extension
* Access IPFS content through Tor
* Use a sneakernet to move and redistribute IPFS content
* Explain the implications of being able to access IPFS content through so many different paths

## Lessons

1. Read about [The Power of Content-addressing](https://github.com/flyingzumwalt/ipfs-primer/tree/f98db30ee4ed47979a1a55d509900cf6a0fe7c88/avenues-for-access/lessons/power-of-content-addressing.md)
2. Review the lesson on [Retrieving content from a peer](https://github.com/flyingzumwalt/ipfs-primer/tree/f98db30ee4ed47979a1a55d509900cf6a0fe7c88/going-online/lessons/retrieve-from-peer.md)
3. Review these lessons from the Tutorial on Interacting with the Classical (HTTP) Web
   * Review: [Lesson: Using an HTTP browser to retrieve files from local IPFS gateway](/ipfs-primer/avenues-for-access/local-gateway.md)
   * Review: [Lesson: Using the public IPFS gateways at ipfs.io](/ipfs-primer/avenues-for-access/public-gateways.md)
   * Review: [Lesson: Access IPFS content through any IPFS gateway](https://github.com/flyingzumwalt/ipfs-primer/tree/f98db30ee4ed47979a1a55d509900cf6a0fe7c88/classical-web/lessons/other-gateways.md)
4. [Lesson: Access IPFS content through Tor gateways (experimental)](/ipfs-primer/avenues-for-access/review-access-ipfs-content-through-any-ipfs-gateway/tor-gateways.md)
5. [Lesson: Run IPFS over Tor transport (experimental)](/ipfs-primer/avenues-for-access/review-access-ipfs-content-through-any-ipfs-gateway/tor-transport.md)
6. [Lesson: Access IPFS content through a browser extension](/ipfs-primer/avenues-for-access/review-access-ipfs-content-through-any-ipfs-gateway/browser-extension.md)
7. [Lesson: Sneakernets - moving the data on USB Drives and other Hardware](/ipfs-primer/avenues-for-access/review-access-ipfs-content-through-any-ipfs-gateway/sneakernets.md)

## Next Steps

If you're wondering how to update content after you've shared it, see the [Tutorial: Publishing Changes on the Permanent Web](/ipfs-primer/publishing-changes.md)

If you want to know more about how IPFS stores this content intrernally using Merkle DAGs, go to the [Tutorial: Merkle Trees and the IPFS DAG](/ipfs-primer/ipfs-dag.md)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://therealflyingzumwalt.gitbook.io/ipfs-primer/avenues-for-access.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
