区块链 · 数字资产知识 · 行业资讯
文章库关于本站

技术原理

区块链浏览器开发怎样显示新数据|HTTP缓存新鲜度不等于链上确认

摘要

区块链浏览器能打开、响应没有过期,不代表索引已经追上节点。把链数据截点、页面生成时间和HTTP缓存年龄分开显示,才能知道旧信息出在哪一层,也能避免把304响应误当成链上状态证明。

区块链浏览器开发的科技主题配图

页面显示的是哪一次数据快照

区块链浏览器开发不只是在网页中填入区块和交易字段。以太坊文档把浏览器定义为访问链数据的界面,其中既有区块编号、哈希、交易所属区块和执行状态,也有共识层的最终确定状态。网页最后显示的内容,还取决于数据读取、整理和响应生成的时间。

如果项目在节点与页面之间设置了索引服务和缓存,就需要分别记录它们处理到哪里。本文建议界面保留数据所属区块、索引处理截点和响应生成时间。这是工程上的展示约定,不是协议强制要求的页面样式,也不应让一个“刚刚刷新”标签替代全部信息。

HTTP中的新鲜只描述响应能否复用

MDN说明,HTTP缓存按响应年龄与新鲜度期限判断是否可以继续复用。假设一个公开接口在十点整生成响应,并设置max-age为六十秒;十秒后再次请求时,这份响应在HTTP意义上仍可能是新鲜的,不必每次重新生成相同内容。

但若生成响应时索引只处理到区块一百,而节点随后又收到新区块,缓存仍在期限内并不能证明索引已经追平。例子中的时间和区块编号都是假设。实际排查应同时查看链数据截点和缓存信息,不能把响应年龄直接解释成区块落后了多少秒。

区块链行情数据api的科技主题配图

304说明响应内容未变而不是交易已确认

HTTP重新验证可以使用ETag与If-None-Match:客户端带着此前保存的标识询问,服务器判断所选表示未改变时,可以返回304,让客户端继续使用已保存的内容。ETag由服务端按其方案生成,不天然就是区块哈希或链上证明。

如果索引服务尚未更新,页面对应的表示也可能没有变化。因此收到304只能按HTTP语义解释,不能由此宣布交易最终确定。交易是否执行成功、是否已经包含在区块中,以及共识层是否最终确定,仍须依照对应链数据字段与适用规则判断。

用明确状态减少刷新造成的误解

缓存策略也要按语义选择。no-cache并不是完全不保存,而是要求复用前重新验证;no-store才用于阻止保存该响应。给接口加上某个头部,不会自动修复索引落后,更不能保证浏览器所有历史导航都会重新请求,后退时还可能恢复先前页面快照。

一个实用的验收方式是分别制造索引稍慢、缓存复用和请求失败三种测试情形,检查界面能否如实显示截点、继续显示带时间的旧数据或报告暂不可更新,而不是全部写成“实时”。这是开发验收建议,本文没有测试任何现实浏览器服务,也不承诺固定延迟或查询准确率。

← 返回全部文章

延伸阅读 · 相关栏目

区块链基础技术原理数字资产知识资料与核验