Menu
Woocommerce Menu

filecoin源码顶层架构分析,如何使用防盗链图片

0 Comment


《福布斯》撰稿人Steve Wilkes近日发文称,
2018年是商用科技快速发展的一年,现代数据管理成为了很多企业的重要目标,云服务的采用率也大幅增加,一些战略并购案例以及人工智能和其他新技术的兴起已经证明了这一点。那么2019年又会有怎样的发展呢?以下是一些预测:

本文作者:先河系统杨尉;原创作品,转载请注明出处

最近自己写了一个网站玩,在引用别人网站的图片是遇到了一些小问题。

图片 1

  • 跳转到:1 filecoin概念
  • 跳转到:2 filecoin通用语言理解
  • 跳转到:3 filecoin开发网络使用
<img src="https://xxxx" alt="图片 2">

云服务

像这个样子,src后面跟的是别的网站的图片的url。

企业将更多地使用云服务,企业数据中心将更快地转向云服务,把重要的、价值较高的活动放在云上,尤其是云爆发(cloud
bursting,一种应用部署模式)和分析应用程序。

  • 4 filecoin源码顶层架构分析
    • 4.1 题外话——关于竞争力
    • 4.2 filecoin顶层架构概览及分析思路
      • 4.2.1 分析思路
      • 4.2.2 filecoin顶层架构概览
    • 4.3 网络层
    • 4.4 协议层
    • 4.5 REST/CMD
    • 4.6 内部api层
    • 4.7 core服务层

有的图片在我们发布的网站上能正常加载出来,有的一些就加载不出来,审查一下元素,会看到Failed to load resource: the server responded with a status of 403 ()的报错。

有一些技术支持在不同的云和本地系统之间进行实时数据分发,这些技术对于几乎所有的云用例都会变得日益重要。

网络技术的高速发展带领我们进入了知识大爆炸、技术快速跃迁的时代,5G已经开始走向商业落地,网络速率的再次跃迁给我们带来了无限的想象空间,全息投影、即时翻译、远程医疗、人工智能等等会更加成熟落地?路由器在个人家庭中的角色可能会发生变化?IOT万物互联的时代将会真正到来?区块链的TPS提升?高速网络下的云应用、大数据会出现什么新的玩法?

笔者想说的是,整个世界都在急速变化,在波涛汹涌的竞争浪潮之中,如何保持自己的竞争力。我偶尔会问同事、朋友,你与刚毕业的大学生相比,优势在哪里?

经过了解,发现这是一个叫做防盗链的东西,网站设置了防盗链的策略,会在后台判断请求的Referrer属性是不是来自于一个非本域名的网站,如果来源不是本域名就返回403 forbidden。我们要做的就是用最方便的方法使得我的页面能够不受他的防盗链策略的影响。我从网上搜到了几个解决方法。

IBM收购了Red Hat,它可能不会直接对顶级供应商发起挑战,但是会把Red
Hat技术运用在跨越各种云、私有云和内部部署数据中心的混合模式中,起到重大作用。

笔者认为如下两点才是在这个高速时代的真正竞争力,个人如此,公司团队亦如此。

图片预下载

这个是最直观的解决方式了,正在使用别人的图,先把图片下载下来,保存到自己的服务器上,然后就等于是用自己的了~
如果自己没有服务器,可以去网上找找图床,应该也能解决问题。

利用容器、Kubernetes、云和多云管理器向多云和混合模式转变,这是一个趋势,可携式应用程序和无服务器式计算将对这个转变起到促进作用,越来越多的初创公司和老牌企业将提供自动化服务。

  • 高效的学习能力
  • 高维的思维能力
删除Header中的Referrer

保证最佳效果的最简单的写法就是在html文件的head中添加一个meta标签<meta name="referrer" content="never" />

为什么叫保证效果的最简单写法 ?下面看一些数据对比。

删除Header中的Referrer的方法也有多种:添加meta标签添加ReferrerPolicy属性

在大数据和分析领域,越来越多的开源技术在日趋成熟,它们将转变为可扩展的托管云服务,而那些为了支持它们而成立的商业公司,营收会遭到它们的蚕食。

以上为笔者观点,也欢迎大家探讨。在分析具体架构之前,笔者在4.2.1中分享了自己的分析思路,我认为这也许也值得分享。

添加meta标签

一种方法是给页面添加一个meta标签,在meta标签里指定referrer的值,比如<meta
name=”referrer” content=”xxx”
/>。网上可以查到各种奇奇怪怪的值,其实我总结了来源于两个地方。一个是来自whatwg的标准。他给meta标签的referrer属性定义了四个值:never,always,origin,default。如果需要关闭referrer,就将referrer的值设置成”never”。这个标准还是比较老的,而且在他的主页上也明确写了”This
document is
obsolete.”。不过据我调研,或许正是由于这个标准比较老,反而导致绝大多数浏览器对他的支持都很好,因祸得福蛤蛤。另外一个是来自MDN的标准。他给meta标签的referrer属性定义了五个值,如果要关闭referrer,就将它的值设置成no-referrer

不过我们需要注意的是,meta标签添加的位置也很重要,有的浏览器能够识别非head标签中的meta标签,有的就不行。在实际使用的时候还要小心,这一点下文会有一个更具体的比较。

大数据

4.2.1 分析思路

  • 终于进入到源码分析环节了,其实回顾一下前面三章,filecoin的概念及通用语言可以总结为filecoin的本质,分析源码的过程归根接底还是理解设计者的意图,第三章filecoin开发网络的实战使用对于笔者来说也是为了更清晰地对filecoin本质及设计意图进行深入理解。

  • 分析总思路为:抓住本质分析,理解设计者意图

    • 自上而下逐层分析,从抽象到具体
    • 自下而上反向总结,从具体到抽象
  • 分析过程分为三大步骤

    • 第一步,理解filecoin本质及设计目的
    • 第二步,理解filecoin的顶层架构设计,反向加深对filecoin本质的理解
    • 第三步,各层的具体源码分析,反向加深对filecoin本质的理解

详细参见下图

图片 3filecoin_arch.png

  • 在顶层源码中分为go-filecon和rust-fil-proofs。分别为主框架和存储证明部分,本文主要分析go-filecoin源码的顶层框架。
添加ReferrerPolicy属性

添加meta标签相当于对文档中的所有链接都取消了referrer,而ReferrerPolicy则更精确的指定了某一个资源的referrer策略。关于这个策略的定义可以参照MDN。比如我想只对某一个图片取消referrer,如下编写即可:

<img src="xxxx.jpg" referrerPolicy="no-referrer" />
nothing meta in head referrer=never meta in head referrer=no-referrer meta referrer=never meta referrer=no-referrer img referrerPolicy=no-referrer
Chrome N Y Y Y Y Y
Firefox N Y Y N N Y
Edge/IE N Y N Y N N

可以看出Chrome浏览器对各种写法都支持的最好。Firefox支持所有标准的写法,但是不支持没有写在head标签中的meta标签;Edge/IE则不支持MDN里定义的”no-referrer”配置项,果然是个古董。。。

总的来说,保证最佳效果的最简单的写法就是添加一个meta标签<meta
name=”referrer” content=”never”
/>,这样就不用考虑浏览器的差别了,虽然这种写法并不被官方推荐(主要还是要迁就IE这个古董,放弃了理论上更为正确的标准)。

尽管Cloudera 和
Hortonworks的合并是大数据领域整合的一个证据,但随着越来越多的公司使用云服务来存储和分析数据,企业对大数据基础架构的投资将会减少。

4.2.2 filecoin顶层架构概览

 ┌─────────────────────────────────────┐ │ │ Network │ network (gossipsub, bitswap, etc.) │ | | \/ │ │ |_| /\ └─────▲────────────▲────────────▲─────┘ │ │ │ ┌────────────────────────────┐ ┌─────▼────┐ ┌─────▼─────┐ ┌────▼─────┐ │ │ │ │ │ │ │ │ │ Commands / REST API │Protocols │ Storage │ │ Mining │ │Retrieval │ │ │ │ Protocol │ │ Protocol │ │ Protocol │ └────────────────────────────┘ │ │ │ │ │ │ │ └──────────┘ └───────────┘ └──────────┘ │ │ │ │ │ └──────────┬─┴─────────────┴───────────┐ │ ▼ ▼ ▼ ┌────────────────────────────────┐ ┌───────────────────┬─────────────────┐ Internal │ Core API │ │ Porcelain │ Plumbing │ API │ │ ├───────────────────┘ │ └────────────────────────────────┘ └─────────────────────────────────────┘ │ │ ┌─────────┴────┬──────────────┬──────────────┬─┴────────────┐ ▼ ▼ ▼ ▼ ▼ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐ │ │ │ │ │ │ │ │ │ │ Core │ Message │ │ Chain │ │ Processor │ │ Block │ │ Wallet │ │ Pool │ │ Store │ │ │ │ Service │ │ │ │ │ │ │ │ │ │ │ │ │ └────────────┘ └────────────┘ └────────────┘ └────────────┘ └────────────┘
  • 官方给出的如上架构概览图是小于实际源码的,但是不影响理解。
  • 官方的spec项目中,有较多文档说明已经滞后于源码,其引用的源码有些已经从go-filecoin源码中消失了,想深入分析的朋友建议可以结合源码和文档同步进行看。
  • 本文后面的章节中,只会简述各个层的设计目的,每一层的具体源码分析,将放到后面章节分享给大家。

图片 4ipfsandfilecoin.png

  • IPFS与filecoin同样采用IPLD结构,数据结构是互通的,简而言之,在IPFS之上存储的数据,filecoin可以读取。filecoin存储的未密封数据,IPFS也是可以读取的。
  • IPFS与filecoin网络部分均复用libp2p部分。
  • filecoin复用了大量IPFS组件,比如CID、IPLD、bitswap等等。

  • 网络层的实现依赖协议实验室的libp2p项目,如果不熟悉的可以先简单记住如下要点,后面笔者考虑视情况补充IPFS/libp2p的相关分享。

    • libp2p的网络层实现了节点之间的联通性问题,包括节点发现、NAT穿透、pubsub、relay等。

    • libp2p的路由层的主要目的,包括节点路由、内容路由、DHT键值存储。

    • multistream需要理解,filecoin的协议层之协议定义就是基于mulitistream的。

  • filecoin网络层的目的

    • 处理请求信息、回复响应信息,包括存储订单处理、检索请求处理、区块同步等等。

协议层主要处理应用级的逻辑,状态切换等,具体会通过api层调用具体的core服务进行处理。

使用iframe

这个图片就是使用了防盗链的http://json.image.alimmdn.com/vsou.png

  1. 建一个空的iframe
  2. iframe设置src,内容就是图片或一段html

var body = document.querySelector;var iframe = document.createElement;var html = '<img src="http://json.image.alimmdn.com/vsou.png"/>';iframe.src = 'javascript:void(function(){document.open();document.write(\'' + html + '\');document.close';body.appendChild;

略微设置一下样式

iframe.style.position="fixed";iframe.style.width="100%";iframe.style.height="100%";iframe.style.border=0;iframe.style.zIndex=10;iframe.style.top=0;iframe.style.left=0;

上面一段代码有一个关键因素,就是在iframe之外,不能有任何其他图片该域名下的图片,否则功亏一篑

上面的解释是从网上搜到的,没有什么问题,总结起来方法就是我们创建一个iframe,然后把我们要显示的带有防盗链图片链接的html标签,以字符换的形式传给iframe的src属性就行了。

不过这个方法是有问题的,因为iframe设置width和height都无效,所以用在我的网站上样式是不合适的。具体为什么这样,大家可以查一下iframe,具体的了解一下。

标签:

发表评论

电子邮件地址不会被公开。 必填项已用*标注

相关文章

网站地图xml地图