数据URL是一种URI方案,提供了一种在文档中内联数据的方法,通常用于将图像嵌入HTML和CSS中
介绍
数据URL是一种URI方案,它提供了一种内联HTML文档中的数据的方法。
假设您要嵌入一个小图像。您可以按照通常的方式将其上传到文件夹并使用img
标记,以使浏览器从网络引用它:
<img src="image.png" />
或者您可以使用一种称为数据URL的特殊格式对其进行编码,从而可以将图像直接嵌入到HTML文档中,因此浏览器不必另外请求即可获取它。
数据URL可能会为小文件节省一些时间,但对于较大的文件,HTML文件的大小会有所增加,而且如果图像在所有页面上重新加载,则它们尤其会成为问题,因为您无法利用浏览器缓存能力。
同样,编码为数据URL的图像通常比二进制格式的相同图像大一点。
如果您经常编辑图像,它们并不实用,因为每次更改图像时,都必须重新编码。
也就是说,它们在Web平台上占有一席之地。
数据网址的外观
数据URL是以以下开头的字符串data:
紧随其后的是MIME类型格式。例如,PNG图像具有mime类型image/png
。
这之后是逗号,然后是实际数据。
文本通常以纯文本格式传输,而二进制数据通常以base64编码。
以下是此类数据URL外观的示例:
<img src="data:image/png,%89PNG%0D%0A..." />
这是base64编码的数据URL的外观。注意它以data:image/png;base64
:
<img src="data:image/png;base64,iVBORw0KGgoAA..." />
这个站点有一个非常不错的数据URL生成器:https://dopiaza.org/tools/datauri/index.php您可以使用它来将桌面上的任何图像转换为数据URL。
数据URL可以在可以使用URL的任何地方使用,如您所见,您可以将其用于链接,但是在CSS中使用它们也很常见:
.main {
background-image url('data:image/png;base64,iVBORw0KGgoAA...');
}
浏览器支持
他们是所有现代浏览器均支持。
安全
数据URL不仅可以对图像进行编码,还可以对任何类型的信息进行编码,因此它们带有一系列安全隐患。
数据URI可用于构建攻击页面,这些攻击页面试图从毫无戒心的Web用户那里获取用户名和密码。它也可以用来解决跨站点脚本(XSS)限制,将攻击有效载荷完全嵌入地址栏中,并通过URL缩短服务托管,而不需要由第三方控制的完整网站。
查看Mozilla Firefox博客中的这篇文章有关恶意用户如何使用数据URL进行不良操作以及Firefox浏览器如何减轻此类风险的更多信息。
数据网址在RFC 2397。
免费下载我的JavaScript初学者手册
更多浏览器教程:
- HTML5提供了一些有用的技巧
- 我如何使基于CMS的网站脱机工作
- 渐进式Web应用程序完整指南
- 提取API
- 推送API指南
- 频道消息传递API
- 服务人员教程
- 缓存API指南
- 通知API指南
- 深入IndexedDB
- Selectors API:querySelector和querySelectorAll
- 通过延迟和异步有效地加载JavaScript
- 文档对象模型(DOM)
- Web存储API:本地存储和会话存储
- 了解HTTP Cookies的工作原理
- 历史API
- WebP图像格式
- XMLHttpRequest(XHR)
- 深入的SVG教程
- 什么是数据网址
- 学习网络平台的路线图
- CORS,跨域资源共享
- 网络工作者
- requestAnimationFrame()指南
- 什么是Doctype
- 使用DevTools控制台和控制台API
- 语音合成API
- 如何在纯JavaScript中等待DOM ready事件
- 如何将类添加到DOM元素
- 如何遍历来自querySelectorAll的DOM元素
- 如何从DOM元素中删除类
- 如何检查DOM元素是否具有类
- 如何更改DOM节点值
- 如何将click事件添加到从querySelectorAll返回的DOM元素列表中
- WebRTC,实时Web API
- 如何在JavaScript中获取元素的滚动位置
- 如何替换DOM元素
- 如何只接受输入文件字段中的图像
- 为什么要使用浏览器的预览版?
- Blob对象
- 文件对象
- FileReader对象
- FileList对象
- ArrayBuffer
- ArrayBufferView
- URL对象
- 类型数组
- DataView对象
- BroadcastChannel API
- Streams API
- FormData对象
- 导航器对象
- 如何使用地理位置API
- 如何使用getUserMedia()
- 如何使用拖放API
- 如何在网页上滚动
- 在JavaScript中处理表单
- 键盘事件
- 鼠标事件
- 触摸事件
- 如何从DOM元素中删除所有子级
- 如何使用原始Javascript创建HTML属性
- 如何检查是否使用JavaScript选中了复选框?
- 如何使用JavaScript复制到剪贴板
- 如何使用JavaScript禁用按钮
- 如何在浏览器中使页面可编辑
- 如何使用URLSearchParams在JavaScript中获取查询字符串值
- 如何一次删除页面上的所有CSS
- 如何使用insertAdjacentHTML
- Safari,退出前警告
- 如何使用JavaScript将图像添加到DOM
- 如何重设表格
- 如何使用Google字体