CrazyAirhead

疯狂的傻瓜,傻瓜也疯狂——傻方能执著,疯狂才专注!

0%

原因

因为使用Angular来调用ipfs的API时出现403禁止访问错误,首先判断的是跨域问题,尝试如下内容:直接在浏览器中输入URL访问可以,通过代理或浏览器的允许跨域设置依然是403错误。
通过查看ipfs的文档(https://github.com/ipfs/js-ipfs-api),IPFS服务器默认不支持跨域请求,需要修改配置文件。

1
2
3
$ ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin "[\"http://example.com\"]"
$ ipfs config --json API.HTTPHeaders.Access-Control-Allow-Credentials "[\"true\"]"
$ ipfs config --json API.HTTPHeaders.Access-Control-Allow-Methods "[\"PUT\", \"POST\", \"GET\"]"

修改配置,重启IPFS之后正常访问IPFS的API。

分析

对于CORS没有理解,通过查看Wiki整理下对CORS,加深理解。为什么浏览器中可以访问而前端调用不行?
直接在浏览器中可以直接访问是因为他是第一下资源地址,是一个GET请求,不是跨域请求。
Angular中请求时,是一个XHR请求,且与第一个资源地址不同,是跨域请求。

跨域资源共享

跨域资源共享是一种机制,它允许受限的访问第一个访问资源域以外的资源(如字体)的机制。一张网页通常包含了很多跨域的图片,样式,脚本,iframes,或者视频。一些跨域请求,尤其是Ajax请求,会因为默认的同源安全策略而被禁止访问。

CORS定义了浏览器和服务器如何来决定一个跨域请求是安全的。它比完全同源请求有更多的自由和功能,但不要只是简单地允许所有跨源请求。CORS规范最初是作为W3C推荐标准发布的,但该文档已经过时。 Fetch Living Standard是当前维护活跃的规范。

同源判断规则

绝对路径,需要是协议,域名,端口号三者与第一个访问的资源(浏览器中输入的URL)相同,才被认为是同源。

CORS工作机制

CORS标准新增了一组HTTP消息头,它为浏览器和服务器之间提供了一种有权限时才请求远程URL的方法。虽然服务器可以执行一些验证和授权,但浏览器通常有责任支持这些消息头并执行相关限制。

对于可以修改数据的Ajax和HTTP请求方法(通常是GET以外的HTTP方法,或者用于某些MIME类型的POST使用),规范要求浏览器“预先执行”请求,使用HTTP的OPTIONS方法从服务器请求受支持的方法,然后在服务器“批准”后,使用实际的HTTP请求方法发送实际请求。服务器还可以通知客户端是否应该通过请求发送“凭据”(包括Cookies和HTTP身份验证数据)。
cors

CORS相关消息头

请求头

  • Origin
  • Access-Control-Request-Method
  • Access-Control-Request-Headers

    响应头

  • Access-Control-Allow-Origin
  • Access-Control-Allow-Credentials
  • Access-Control-Expose-Headers
  • Access-Control-Max-Age
  • Access-Control-Allow-Methods
  • Access-Control-Allow-Headers

Access-Control-Allow-Origin: *

“*”的值是特殊的,因为它不允许请求提供凭据,这意味着不允许发送HTTP身份验证、客户端SSL证书和Cookie等原因。

概述

你可以在ZeroNet上发布静态和动态的网站。
虽然ZeroNet不能运行像PHP或者Ruby这样的脚本语言,你可以通过ZeroNet的API(叫做ZeroFrame),和JavaScript(或者CoffeScript)及内置的SQL数据库来创建动态网站。

ZeroChat教程

在这个教程中,我们会通过不到100行的代码创建一个P2P的,去中心化,无服务器的聊天站点

基于对微服务架构的理解,整理出来以下几下微服务相关的基础概念。

  • 授权认证服务
  • 服务注册和发现
  • 配置服务
  • 服务网关
  • 调用链监控
  • 限流熔断
  • 指标监控
  • 健康检查与告警
  • 日志监控
  • 其他

参考

(一个可供中小团队参考的微服务架构技术栈)[https://www.infoq.cn/article/china-microservice-technique]
(微服务基础架构的 5 个关键问题)[https://www.infoq.cn/article/btx6geZA_qwmyr07LbOb]

推荐

(JSkillCloud)[http://jskillcloud.com/]

最简单的方式:使用页面

  • 在ZeroHello站点时,点击左边栏的“⋮ ”>”创建新的空站点”菜单
  • 你会跳转到一个只有你可以修改的全新站点
    You can find and modify your site’s content in data/[yoursiteaddress] directory
  • 你可以在data/[你的地址]目录找到和修改你的站点内容
    After the modifications open your site, drag the topright “0” button to left, then press sign and publish buttons on the bottom
  • 当你修改好你的站点后,拖动右上的”0”按钮到左边,然后点击底部的签名和发布按钮。

    手动方式:使用命令行

  1. 创建站点结构
  • 如果ZeroNet在运行需要关闭
  • 进入ZeroNet的安装目录,然后运行:
    1
    2
    3
    4
    5
    6
    7
    8
    $ zeronet.py siteCreate
    ...
    - Site private key: 23DKQpzxhbVBrAtvLEc2uvk7DZweh4qL3fn3jpM3LgHDczMK2TtYUq
    - Site address: 13DNDkMUExRf9Xa9ogwPKqp7zyHFEqbhC2
    ...
    - Site created!
    $ zeronet.py
    ...
  • 这样会创建你的站点的初始文件
    data/13DNDkMUExRf9Xa9ogwPKqp7zyHFEqbhC2

    注意:使用bundle版本的Windows的用户需要进入ZeroBudle/ZeroNet目录,然后执行"../Python/python.exe" zeronet.py siteCreate

  1. 创建/修改站点
  • 更新data/[your site address key]目录下的网站文件(比如:13DNDkMUExRf9Xa9ogwPKqp7zyHFEqbhC2)
  • 当你的站点准备好时运行:
    1
    2
    3
    $ zeronet.py siteSign 13DNDkMUExRf9Xa9ogwPKqp7zyHFEqbhC2
    - Signing site: 13DNDkMUExRf9Xa9ogwPKqp7zyHFEqbhC2...
    Private key (input hidden):
  • 输入你创建网站时的私钥。这一步会对所有的文件进行签名,所以节点可以验证网站所有者的身份
  1. 发布网站更新
  • 为了通知节点你修改了站点内容,你需要运行如下命令:
    1
    2
    3
    4
    5
    $ zeronet.py sitePublish 13DNDkMUExRf9Xa9ogwPKqp7zyHFEqbhC2
    ...
    Site:13DNDk..bhC2 Publishing to 3/10 peers...
    Site:13DNDk..bhC2 Successfuly published to 3 peers
    - Serving files....
  • 这样就好了,你已经成功的将你的修改签名和发布出去了。
  • 你的站点可以通过这个网址访问:
    http://localhost:43110/13DNDkMUExRf9Xa9ogwPKqp7zyHFEqbhC2

ZeroHello

ZeroNet的主页

  • 列出所有添加的站点:名称,节点数,修改时间
  • 站点操作:更新,暂停,继续,删除
  • 克隆站点转换成你的博客或者论坛
  • 一键更新

    地址:1HeLLo4uzjaLetFx6NH3PMwFP3qbRbTf3D
    源码

ZeroBorad

消息公告示例

  • 通过授权码动态生成用户
  • 实时消息更新

工作原理

  • 你发送消息给站点所有者的机器人
  • 机器人修改message.json文件,然后签名并发布给其他节点
  • 如果网站的更新到达你的客户端,他就会显示在你的浏览器上。

    地址:1Gfey7wVXXg1rxk751TBTxLJwhddDNfcdp
    源码

ZeroBlog

个人博客示例

  • 内置内容编辑器
  • Markdown语法
  • 代码高亮
  • 只要网页就可以签名和发布网站

    工作原理?

  • 你可以通过页面修改data.json
  • 点击Sign & Publsh new conent按钮时会要求私钥(创建新站点时生成
  • 你的ZeroNet客户端签名新的,修改的文件并把文件发布到其他节点。
  • 只要还有一个节点是活动的,你的站点就可以访问。

    地址:1BLogC9LN4oPDcruNz3qo1ysa133E9AGg8
    或者blog.zeronetwork.bit
    源码

ZeroTalk

去中心化的,P2P论坛示例

  • 创建,修改,删除主题和消息
  • 主题和消息投票
  • 仅有一次和站点所有者的联系,就是在请求修改网站授权的时候。
  • 留言和内容修改直接会推送给其他节点
  • 只有你可以签名和修改你的文件。
  • 实时的消息显示

    工作原理

  • 要参与网站的互动,你需要从ZeroID提供者那里注册一个证书(一个加密签名)
  • 有了证书之后,你就可以发布内容(消息,主题,投票)给其他节点了。

    地址:1TaLkFrMwvbNsooF4ioKAY9EuxTBTjipT 或者talk.zeronetwork.bit

源码

ZeroMail

端到端加密,分布式,点对点消息站点。为了提高隐私安全使用了与比特消息类似的解决方案,这样就不会暴露收件人信息。

  • 使用ECISE用于私密传输,采用AES256进行消息编码。
  • 当你第一次访问网站的时候,你的公钥会添加到你的数据文件中,这样其他人就可以给你发消息了。
  • 每个人都尝试解密消息,这使得要找出消息接收人成为不可能,从而提高了隐私性。
  • 为了减少消息负载和加快消息解密速度,我们重用了AES密钥,但是每次都会生成一个新的IV。

    地址:1MaiL5gfBM1cyb4a8e3iiL8L5gXmoAJu27或者mail.zeronetwork.bit
    源码

ZeroChat

一个完整的网站用于演示如何使用ZeroNet在不到用不到时100行的代码创建一个server-less,SQL后台,实时更新的P2P聊天应用。

ZeroMe

去中心化的,类Twitter的P2P社交网络。

  • 在ZeroMe的用户注册表中存储用户信息
  • 将发布和留言存储在叫Hub的MergeSite中
  • 通过选择文件来上传图片。
  • 实时显示活动订阅

    地址:1MeFqFfFFGQfa1J3gJyYYUvb5Lksczq7nH
    源码

ReactionGIFs

选择文件示例,视频文件只有浏览器请求时才会下载。

地址1Gif7PqWTzVWDQ42Mo7np3zXmGAo3DXc7h
源码

安装ZeroNet

  • 下载ZeroNet安装包:Microsoft Windows,Apple macOS, Linux 64bit,Linux 32bit
  • 解压
  • 运行 ZeroNet.exe (win), ZeroNet(.app) (macOS), ZeroNet.sh(linux)

    Debian Linux手动安装

  • sudo apt-get update
  • sudo apt-get install msgpack-python python-gevent
  • wget https://github.com/HelloZeroNet/ZeroNet/archive/master.tar.gz
  • tar xvpfz master.tar.gz
  • cd ZeroNet-Master
  • 运行python zeronet.py
  • 浏览器中打开http://127.0.0.1:43110

Vagrant

  • vagrant up
  • 访问VMvagrant sh
  • cd /vagrant
  • 运行python zeronet.py --ui_ip 0.0.0.0
  • 浏览器中打开http://127.0.0.1:43110

Docker

  • docker run -d -v <local_data_folder>:/root/data -p 15441:15441 -p 43110:43110 nofish/zeronet
  • 这个Docker镜像包含了Tor代理,默认是关闭的。注意有些节点不允许在你运行Tor。如果你需要开启,将环境变量ENABLE_TOR设置为true(默认是false)。比如:
    docker run -d -e "ENABLE_TOR=true" -v <local_data_folder>:/root/data -p 15441:15441 -p 127.0.0.1:43110:43110 nofish/zeronet
  • 浏览器中打开http://127.0.0.1:43110

Virtualenv

  • virtualenv env
  • source env/bin/activate
  • pip install msgpack-python gevent
  • python zeronet.py
  • 浏览器中打开http://127.0.0.1:43110

我需要开放端口么?

这个是可选的,如果你只是浏览和使用ZeroNet,你可以不需要开放端口。如果你要创建一个站点,强烈推荐你要开放一个端口。
ZeroNet在启动时会尝试用UPnP来打开一个端口,如果失败了,你需要手动开启:

  • 通过http://192.168.1.1 或者 http://192.168.0.1来访问你的路由器页面。
  • 查找开启UPnP支持的类似选项,然后重启ZeroNet。
    如果还是不起作用,查看端口转发章节。不同的路由器各有不同。转发端口是15441。

ZeroNet是匿名的么?

ZeroNet没有比BitTorrent提供更多的匿名性,但随着节点的增加,隐私(找到评论或站点所有者)会变得严峻。
ZeroNet在匿名网络中也做了一些工作:你可以使用Tor网络轻松的隐藏你的IP。

在Tor浏览器中如何使用ZeroNet?

推荐使用Tor浏览器来使用ZeroNet:

  • 启动Tor Browser
  • 打开abaut:perferences#advanced
  • 点击设置
  • 在不需要代理的输入框中填入127.0.0.1
  • 在浏览器中打开http://127.0.0.1:43110
    如果你看到的是空白页面,点击工具栏上的无脚本按钮,选择临时允许所有页面,重新加载页面。

在ZeroNet中如何使用Tor?

如果你希望隐藏你的IP,安装ZeroNet的最新版本然后点南Tor>每个连接都启动Tor。

在Windows上Tor和ZeroNet是打包在一起的,ZeroNet在第一次运行的时启尝试下载和解压Tor。如果因为某些情况安装失败了,可以根据core\tools\tor\manual_install.txt的说明来安装。

其他操作系统根据安装说明进行安装,修改你的torrc的配置文件,把# ControlPort 9051#去掉,然后重启你的Tor服务和ZeroNet。

提示:你可以通过ZeroNet的状态页来验证你的IP。
提示:如果你连接时发生错误,请检查你是否安装了最新版本的Tor(需要0.2.7.5以上版本)

Linux系统中ZeroNet如何使用Tor?

更新最新版本的Tor(我们需要0.2.7.5+版本),执行这些操作。以Debian为例:

1
echo 'deb http://deb.torproject.org/torproject.org jessie main'>> /etc/apt/sources.list.d/tor.list
1
gpg --keyserver keys.gnupg.net --recv 886DDD89
1
gpg --export A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89 | apt-key add -
1
apt-get update
1
apt-get install tor

修改配置文件开启控制协议:

1
mcedit /etc/tor/torrc

删除ControlPort 9051CookieAuthentication 1(大概在57行)的#字符。

1
/etc/init.d/tor restart

通过usermod -a -G debian-tor [yourlinuxuser]来授权访问cookie。(如果不是使用Debian通过ls -al /var/run/tor/control.authcookie的查看文件的用户组)。
注销/登录来使修改生效。

提示:可以通过echo 'PROTOCALINFO' | nc 127.0.0.1 9051来验证Tor是否正常运行。
提示:你可以不修改Tor的配置,仅通过zeronet.py --tor disabe --proxy 127.0.0.1:9050 --disable_udp来使用Tor,但这样你会失去与其他.onion地址通话的能力。

能否使用一个配置文件?

你可以把选项配置在zeronet.conf文件中。比如:

1
2
3
4
5
6
[global]
data_dir = my-data-dir
log_dir = my-log-dir
ui_restrict =
1.2.3.4
2.3.4.5

使用zeronet.py --help命令查看所有的选项。

如果ISP和政府屏蔽了Tor如何使它工作?

ZeroNet暂时未包含Tor pluggable transports。访问Tor网络的最简单的方法就是使用Tor浏览器。修改它的配置开启可拨插传输,然后修改ZeroNet的配置,使用Tor浏览器代理和控制端口。
通过--tor_controller 127.0.0.1:9151 --tor-proxy 127.0.0.1:9150来启动ZeroNet或者在zeronet.conf中添加如下参数:

1
2
3
[global]
tor_controller = 127.0.0.1:9151
tor_proxy = 127.0.0.1:9150

不同机器可以使用相同用户名么?

可以,只要你把data/user.json文件拷贝到时你的新机器就可以了。

如何创建一个“特殊”的网站地址?

通过vanitygen来生成。一旦你生成了你的key,创建data/你的key目录。在这个目录下放一些文件。
然后访问http://127.0.0.1:43110/你的key/.将0按钮拖到左边,然后用侧边栏来注册你的网站。

如何注册一个.bit的域名。

你可以通过Namacoin来注册一个.bit域名。通过GUI客户端或者命令行接口来管理你的域名。
一旦你注册完成,你需需增加一个zeronet节点来记录它。比如:

1
2
3
4
5
6
7
8
9
10
{
...
"zeronet": {
"": "1EU1tbG9oC1A8jz2ouVwGZyQ5asrNsE4Vr",
"blog": "1BLogC9LN4oPDcruNz3qo1ysa133E9AGg8",
"talk": "1TaLk3zM7ZRskJvrh3ZNCDVGXvkJusPKQ"
},
...
}

“”是顶级域名,其他的是子域名。

提示:你可以通过shapeshift.io来购买比特币或者其他加密货币的Namecoin。
提示:一些可以注册.bit域名的站点:domaincoin.net, peername.com, dotbit.me
提示:你可以在namecha.in中验证你的域名。比如:zeorid.bit
提示:在域名中只能使用小写字母,数字和-。
提示:要让ZeroHello显示你的域名而不是比特币网址,你需要在content.json中增加domain键.比如:

1
2
3
4
5
6
7
{
"address": "1BLogC9LN4oPDcruNz3qo1ysa133E9AGg8",
"background-color": "white",
"cloneable": true,
"description": "Blogging platform Demo",
"domain": "Blog.ZeroNetwork.bit",
}

我是否可以通过生成的网站地址/私钥来接收比特币支付?

是的,这个地址是一个标准的比特币地址。私钥也是WIF格式的,因此你可以把它导到大部分的客户端里。

提示:建议不要在你的网站地址中放太多钱,因为每次更新你的网站的时候就需要使用你的私钥。

当有人托管恶意内容时会发生什么?

Zeronet的网站是沙箱化的,他们的拥有权限和你在互联网上访问的其他站点一样。你可以完全控制托管理的内容。如果你发现可疑内容,你随时都可以停止托管。

能否通过远程的方式来安装ZeroNet?

有什么方式可以跟踪ZeroNet使用的带宽?

ZeroNet的侧边栏会展示发送和接收的字节(将0按钮拖到左边打开侧边栏)。

提示:所有连接的统计http://127.0.0.1:43110/Stats

当两个人用相同的key来更新网站时会发生什么?

每个content.json是有时间戳的,所有的客户端只接收最新的那个。

ZeroNet是否使用了比特币的区块链?

没有,Zeronet只是使用了比特币的加密算法用于网站地址和内容签名和验证。用户的标识是基于比特币的BIP32格式

Namecoin的区块链用于域名注册。

ZeroNet是否只支持HTML和CSS的网站?

ZeroNet is built for dynamic, real-time updated websites, but you can serve any kind of files using it. (VCS repositories, your own thin-client, database, etc.)

ZeroNet用于构建动态和实时更新的站,或者任何的文件类型(VCS仓库,瘦客户端,数据库等等)

如何创建一个ZeroNet网站?

操作说明

运行的原理是什么?

  • 当你打开一个新的站点,需要访问者在BitTorrent网络的IP地址。
  • 首先下载content.json文件,这个文件包含了所有的文件名,散列和网站所有者的加密签名。
  • 通过网站地址和文件中的网站所有者的签名来验证下载的content.json文件。
  • 下载其他文件(html,css,js……)并通过content.json中的SHA512散列值进行验证。
  • 你会托管所有你访问过的网站。
  • 如果网站的所有者(拥有网站私钥的人)修改了网站,然后他签名一个新的content.json并发布到各个节点。当节点验证了content.json的真实性(通过签名),下载修改的文件并发布给其他节点。
    更多信息:ZeroNet简单网站介绍ZeroNet工作原理幻灯片

ZeroNet是什么?

ZeroNet是使用比特币加密技术和BitTorrent网络协议构建的一个去中心化的无审查网络。

用户可以在ZeroNet上发布静态或者动态的站点。访问者可以决定是否成为服务节点。只要还有一个服务节点站点就会在线。

当站点的所有者更新站点的时候,所有服务的节点(以前的访问者)就会增量更新站点内容。

ZeroNet comes with a built-in SQL database. This makes content-heavy site development easy. The DB is also synced with hosting nodes with incremental updates.

ZeroNet自带内置数据库,这使得重内容的站点的开发更容易。数据库也会在节点增量更新。

为什么?

  • 我们相信开放的,自由的,无审查的网络。
  • 去中心化:只要一发布就无法删除。
  • 无单点故障:只要还有一个服务节点,内容就会一直在线。
  • 不法关闭:无处不在。内容会被访问者进行托管。
  • 高速:ZeroNet使用BitTorrent技术比中心化服务器快。
  • 离线访问:在没有互联网连接的情况下也可以浏览保存过的站点。
  • 安全:使用与比特币钱包相同的加密方法来保护内容所有权。

特性

  • 简单,零配置。
  • 基于BIP32的无密码授权,使用与比特币钱包相同的加密方法来保护你的账户。
  • 实时更新
  • 支持Namecoin的.bit域名
  • 数据库支持:更简单的站点开发和更快的页面加载速度。
  • 匿名:全面支持Tor网络,支持通过.onion隐藏服务相互连接,而不是通过IPv4地址。
  • TLS加密连接
  • 自动打开uPnP端口。
  • 插件和多用户 (开放式代理) 支持
  • 跨平台,支持任何浏览器和系统

原理

  • 在你运行ZeroNet后,你可以通过http://127.0.0.1:43110/{zeronet_site_address} (比如:http://127.0.0.1:43110/1HeLLo4uzjaLetFx6NH3PMwFP3qbRbTf3D)来访问网站。
  • ZeroNet会通过BitTorrent网络来查找可用的节点,并下载需要的文件 (html, css, js…)。
  • 你会托管理每一个你访问过的网站。
  • 每个网站都有一个列表文件,存储了网站所有文件的SHA512哈希值和网站所有者的私钥生成的签名。
  • 如果站点的所有者 (拥有私钥的那个人) 修改了站点, 并且他/她签名了新的列表文件,然后推送给其他节点, 那么所有节点将会在验证列表的真实性(使用签名)后, 下载修改后的文件并推送给其他节点。

限制

  • 不支持大文件拆分
  • 文件传输未压缩
  • 不支持私有站点

赞助

Bitcoin: 1QDhxQ6PraUZa21ET5fYUCPgdrwBomnFgX

谢谢!

说明

主要是测试封面和图片的使用,图片内编辑使用OneNote,目前来看就是对代码的支持不够。

说明

主要是测试封面和图片的使用,图片内编辑使用OneNote,看着也不错。
需要注意创建同名的文件夹,或者使用hexo new命令