blob:http 地址的原理及生成方法

blob 其实是 h5 表征的 Blob 对象数据,具体请看文档。我们可以使用 Blob 对象隐藏真实的资源路径,在一定程度上可以起到数据的加密性,更多的是为了干扰爬虫。

比如日常使用的一些音频,视频,图片,我们都可以使用其 Blob 二进制数据流来表征数据,而非使用 uri,就像经常用到的 image src 的 dataUrl。

要使用 blob 来表征数据资源,需做到以下两点:

1、服务端返回的为资源的二进制数据

2、前端接收到二进制数据后,使用 URL.createObjectURL(blobData) 方法将服务端返回的二进制数据转换为 blob 的 url 资源挂载到相应的资源对象。

实例

对 video.mp4 资源加密,不使用静态 url 进行加载,使用 blob url 进行加密。

服务端 index.php

<?php
// 返回二进制流数据
$file_path = __DIR__ . '/video.mp4';
$file_size = filesize($file_path);
$oct_data = fread(fopen($file_path, "r"), $filesize);
 
header("Content-type: video/mpeg4;charset=UTF-8");
header("Content-Length: " . $filesize);
echo $oct_data;

前端 index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Blob Url</title>
</head>
<body>
    <video id="video" width="400" controls="controls"></video>
    <script type="text/javascript">
        //创建XMLHttpRequest对象
        var xhr = new XMLHttpRequest();
        //配置请求方式、请求地址以及是否同步
        xhr.open('POST', '/index.php', true);
        //设置请求结果类型为blob
        xhr.responseType = 'blob';
        //请求成功回调函数
        xhr.onload = function(e) {
            if (this.status == 200) {//请求成功
                //获取blob对象
                var blob = this.response;
                //获取blob对象地址,并把值赋给容器
                document.getElementById("video").src = URL.createObjectURL(blob);
            }
        };
        xhr.send();
    </script>
</body>
</html>

这样真是的视频资源静态地址就可以被隐藏掉了
我们只是实例讲解下如何生成 blob 资源地址,生产中是很少会将一个资源以二进制流的方式返回给前端进行 Blob “加密”的,因为服务端需要将相应的资源打开读取,会消耗对应的内存,比如一个视频如果50M,那我们服务端返回其二进制数据时,就要消耗 50M 的服务器内存将文件载入,然后返回给前端,这代价略大,而且网络传输相应速度也不允许,如果返回个 500M 的二进制数据,估计就会有很大的卡顿了。

生产场景往往是对切片格式的视频 m3u8 地址进行 blob 格式处理,其实并不是为了加密,因为浏览器还是会解析 blob 并去 get 请求对应的 m3u8 地址,使用 blob uri 的好处在于可以在一定层度上干扰爬虫。

https://my.oschina.net/sallency/blog/3014652

blob:http 是一种URL协议标识,用于指向在浏览器中生成Blob对象的临时URL。Blob对象是一种特殊的二进制数据类型,可用于存储和操作任意类型的数据,如图像、音频和视频等。 关于 blob:http 的兼容性,它在不同浏览器和操作系统下的表现是不同的。一般而言,blob:http 在大多数现代浏览器中具有良好的兼容性。常见的浏览器如Chrome、Firefox、Safari和Edge都支持该协议。 在桌面浏览器中,blob:http 主要用于处理大型文件的上传和下载,以及在网页中生成临时URL以供其他操作使用。这种用法在现代浏览器中得到广泛支持,因为Blob对象提供了一种高效、安全的方式来处理大量数据。 而在移动浏览器中,blob:http 的兼容性可能存在一些差异。一些老旧的移动浏览器可能不支持这种临时URL的生成和使用,或者可能需要额外的配置和处理。 为了确保在不同浏览器和操作系统中兼容 blob:http,开发者可以使用特性检测来判断浏览器是否支持该功能,在不支持的情况下采用其他替代方案或工具。此外,适当的错误处理和后备方案也是保证兼容性的重要手段。 综上所述,blob:http 在大多数现代浏览器中具有良好的兼容性,但在一些老旧的移动浏览器中可能存在一些差异。开发者应该根据实际需求和目标用户群体选择合适的解决方案,并做好相应的兼容性处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值