本文章首发于语雀!
通过各种高科技功能同步到Hajeekn的博客
IPFS's Author
IPFS's Author 是 Juan Benet
Juan Benet
在 2014 年创建了 Protocol Labs
(协议实验室)
协议实验室旗下的项目:
- IPFS
- FileCoin
协议实验室旨在如何构建下一代互联网
What's IPFS?
依照官网的介绍,总的来说,IPFS 就是一种点对点超媒体协议,它可以使网络更快、更安全、更开放
本质上来说,它就是一种去中心化互联网(Peer to Peer) ≈ P2P
没错,就是孽种 P2P 下载器
这么牛的项目怎么是 P2P 下载器呢? P2P 下载器只是个披着羊皮的狼
P2P(Peer to Peer)依靠用户群交换信息
以 number.exe 为例
当你上传后,无数个 Node(用户) 会瓜分你的 number.exe
他们将你的文件分成许多分片,瓜分分片
他们在瓜分的同时会获得奖励
是不是听起来很神奇?对的,你没有付出任何东西,别人却能获得奖励,而且你既满足储存文件的需求,储存你文件的人也能得到金钱.这种机制,叫做FileCoin.你可以把它想象成Bittorrent+BitCoin的结合物,实际上他就是这样的.当然不完全是,但核心理念就是这样的.只不过,BitCoin付出的是算力,而FileCoin付出的是硬盘.
摘自 ChenYFanのBlog
这是 IPFSの不权威原理图(来自 ChenYFanのBlog)
所以,IPFS 相对于响应式请求(HTTP(S) / FTP)不同
传统的响应式请求由一个主服务器(或主集群)处理每一个请求,并贡献内容
而 IPFS 基于 Peer to Peer 技术,让每个 Node 都贡献,没有中心服务器(去中心化)
更细致的解释
IPFS 是一个基于 Git 模型版本管理 & DHT & CBA & Hash 等的产物
它基于 DHT(分布式哈希表) 进行寻址
而传统的响应式请求由 LBA(基于位置的寻址)
而这样,响应式请求的缺点就暴露了出来
LBA(基于位置的寻址) 它在查找时所看重的信息是位置,就好比一个网址 https://blog.slqwq.cn/link/
如果这个位置被删除了,链接位置转移了,他就会暴露出
404 Not Found 错误
而 IPFS 所采用的 DHT(CBA 基于内容的寻址)就没有这个缺点
它在查找时所看重的信息是内容,不管你位置在哪里,只要找到的内容符合要查找的信息,那他就是正确的
最后
基于响应式请求(中心化网络)还有一个超级大大大大的弊端
那就是
非常容易引入审查
也就是类似于我们国家的 Great Firewall of China
(GFW是一个分布式的入侵检测系统,并不是一个严格意义上的防火墙)
每个国家的 gov
可以很方便的 BAN
掉某个网站或者应用
引入一个具体事例
在 2017 年, Turkey's GOV
******就用国家安全的理由禁掉了维基百科**
当然,去中心化也不能避免掉 Firewall 的屏蔽,只是不那么容易屏蔽掉罢了
Use IPFS - IPFS Client
进入 IPFS-DesktopのReleases
找到需要的客户端下载并安装
弹出防火墙警报请一定要允许
在文件处可以上传文件
上传点击导入即可
接下来,重点来了!
ipfs分享文件有两种方式,是ipfs和ipns,前者采用文件hash辨别文件,文件内容一旦改变,原来的链接无法更新,链接格式为 https://ipfs.io/ipfs/QmZCvMHrE56VqsejmG53xd9bW4RZjtFpLz46QMQjA81orL ;后者采用用户id辨别,内容允许更新,但是用户在线时间过短会导致无法同步,并且有可能暴露用户信息,后者格式为: https://ipfs.io/ipfs/QmQQKZphgJdEGhTp18NRvVdSJ3RJArRst2keKk3tZvmfPz?filename=index.html .
如果你只是单个文件网页,此处比较建议使用ipfs,ipns可能离线时间过长导致无法下载。具体看个人所好。
ipfs链接获取:点击 ··· ,选择复制哈希,在前面加上网关域名即可。
ipns连接获取:点击 ··· ,选择分享,复制链接即可。
在善用技术上网的前提下访问 https://ipfs.io/ipfs/QmZCvMHrE56VqsejmG53xd9bW4RZjtFpLz46QMQjA81orL 显示目标界面
请注意,每次上传后一定要先访问一遍资源,否则文件是不会上传到ipfs服务器的!
摘自 ChenYFanのBlog
Use IPFS - IPFS Gateway
JSProxy - IPFS Gateway
因为 IPFS 默认的网关被 FW 了
所以我们可以通过 Worker JSProxy 的方式解锁你自己的网关
addEventListener(
"fetch",event => {
let url=new URL(event.request.url);
url.hostname="werevless.herokuapp.com";
let request=new Request(url,event.request);
event. respondWith(
fetch(request)
)
}
)
粘贴进去,访问 Worker 地址就能看到 404 了
然后在 IPFS Client 里复制地址,接在后面就能打开你上传的文件了
JSProxy - Cloudflare IPFS Gateway
我们可以通过 Worker JSProxy 的方式解锁你自己的 CNAME
addEventListener(
"fetch",event => {
let url=new URL(event.request.url);
url.hostname="cloudflare-ipfs.com";
let request=new Request(url,event.request);
event. respondWith(
fetch(request)
)
}
)
粘贴进去,就变成了基于 CIG 的你自己的 IPFS 网关
Use IPFS - Build Blog
dnslink绑定
这个方法无论你的dns服务商在哪都能绑定,只不过不在CloudFlare托管的用户要多一步。
1.将需要绑定的域名,以CNAME形式指向 www.cloudflare-ipfs.com ,比如我需要让 showtime.cyfan.top 成为ipfs出口,则这么设置。
2.使用txt记录绑定ipfs hash,新建txt记录,名字是 _dnslink.yourwebsite 一定要加上yourwebsite!比如我绑定的是 showtime.cyfan.top ,则名称一行填上 _dnslink.showtime !接着内容是 dnslink=/ipfs/ 后面接上hash,比如showtimehtml的hash是: QmWAvNck7QBhUAYAEgBFvbvvsMxDC9s55NXVJXeJTjTM1Y 则大概这么填:
3.如果你本来就是托管在CloudFlare上的,到此为止就可以了,如果不是托管在Cloudflare上,类似dnspod\alicdn之类的,那还要获取证书,进入https://www.cloudflare.com/distributed-web-gateway/ 拉到最底下
输入域名,获取证书即可。
但问题是,www.cloudflare-ipfs.com 已经被dns污染了,你用cname绑定是无法正常访问的啦!所以只能用Workers绕路啦!
JSProxy反代ipfs.io
老办法,Workersjsproxy反向代理ipfs网关,解决
依然来自 ChenYFanのBlog