Telegram Web如何隐藏贴纸URL?网站集成贴纸API技术疑问
Telegram Web的Blob URL图片加载实现解析及你的场景建议
嘿,这个问题我之前研究过Telegram Web的实现,刚好可以给你捋清楚:
核心原理:后端全代理+前端本地Blob生成
Telegram Web之所以Network里看不到实际的Telegram图片请求,是因为所有和Telegram服务器的通信都是在它的后端完成的,前端根本碰不到带Bot令牌的原始图片URL,具体流程是这样的:
- 后端拿数据,不暴露URL:Telegram Web的后端服务会用自己的Bot令牌调用Telegram Bot API,直接请求贴纸图片的二进制数据(不是请求图片的原始URL)。拿到二进制后,后端把这个数据直接返回给前端,而不是转发原始URL。
- 前端转Blob URL:前端接收到后端发来的二进制数据后,会用浏览器的
BlobAPI把数据包装成Blob对象,再通过URL.createObjectURL(blob)生成blob:开头的本地URL,最后把这个URL赋值给<img>的src。
这种情况下,浏览器加载的是本地生成的Blob资源,自然不会在Network面板里显示去Telegram服务器的请求——因为实际的网络请求已经由后端完成了,前端只是操作内存里的数据。
和video.js的区别
你提到的video.js把视频URL转成Blob URL,本质是前端基于原始URL做的本地处理(比如切片、加密),实际的视频数据还是由前端去原始服务器请求;而Telegram Web的Blob是完全基于后端返回的二进制数据生成的,前端没有发起任何跨域请求到Telegram服务器,这就是两者的核心差异。
给你的场景建议
回到你的需求,其实不用完全复刻Telegram Web的实现,核心解决思路就是用后端代理隐藏Bot令牌,同时可以做这些措施防止代理滥用:
- 校验请求合法性:后端只允许请求你已经通过Bot API获取到的合法贴纸集的图片(比如校验请求的贴纸ID是否在你本地存储的贴纸列表里),拒绝非法请求。
- 限流与缓存:给每个IP设置请求频率限制,同时缓存已经请求过的贴纸图片,既减少Telegram API的调用次数,也降低被滥用的风险。
- URL签名:给前端返回的图片代理URL加上签名,只有签名合法的请求才会被后端处理,避免恶意构造请求。
- 直接返回二进制:后端请求到贴纸图片的二进制后,直接返回给前端,前端可以选择转Blob URL或者直接用
data:URL(不过Blob更适合大文件)。
内容的提问来源于stack exchange,提问作者kit
相关产品推荐
相关产品推荐

