`

[转]data类型的Url格式:把小数据直接嵌入到Url中

阅读更多
所谓"data"类型的Url格式,是在RFC2397中提出的,目的对于一些“小”的数据,可以在网页中直接嵌入,而不是从外部文件载入。例如对于img这个Tag,哪怕这个图片非常非常的小,小到只有一个点,也是要从另外一个外部的图片文件例如gif文件中读入的,如果浏览器实现了data类型的Url格式,这个文件就可以直接从页面文件内部读入了。
data类型的Url格式早在1998年就提出了,时至今日,Firfox、Opera、Safari和Konqueror这些浏览器都已经支持,但是IE直到7.0版本都还没有支持,IE不支持的东西太多了,也不差这一个。:(

小例子
下面这个html代码可以在支持data类型Url的浏览器中运行,例如Firefox。运行后会看到一条蓝色渐变底色的标题。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" > 
<head> 
<style type="text/css"> 
.title { 
  background-image:url(data:image/gif;base64,R0lGODlhAQAcALMAAMXh96HR97XZ98Hf98Xg97DX97nb98Lf97vc98Tg973d96rU97ba97%2Fe96XS9wAAACH5BAAAAAAALAAAAAABABwAAAQVMLhVBDNItXESAURyDI2CGIxQLE4EADs%3D); 
  background-repeat:repeat-x; 
  height:28px; 
  line-height: 28px; 
  text-align:center; 
} 
</style>
</head> 
<body> 
<div class="title">Hello, world!</div> 
</body> 
</html>

这个渐变的蓝色底色实际上是用一个1x28的小图片通过横行重复(repeat-x)形成的。这个图片很小,不过104个字节,直接嵌入到html或css文件还是很合适的。
data格式的Url最直接的好处是,这些Url原本会引起一个新的网络访问,因为那里是一个网页的地址,现在不会有新的网络访问了,因为现在这里是网页的内容。这样做,会减少服务器的负载,当然同时也增加了当前网页的大小。所以对“小”数据特别有好处。

data类型Url的形式
既然是Url,当然也可以直接在浏览器的地址栏中输入。
data:text/html,<html><body><b>Hello, world!</b>
</body></html>

在浏览器中输入以上的Url,会得到一个加粗的"Hello, world!"。也就是说,data:后面的数据直接用做网页的内容,而不是网页的地址。
简单的说,data类型的Url大致有下面几种形式。
data:,<文本数据> 
data:text/plain,<文本数据> 
data:text/html,<HTML代码> 
data:text/html;base64,<base64编码的HTML代码>
data:text/css,<CSS代码> 
data:text/css;base64,<base64编码的CSS代码> 
data:text/javascript,<Javascript代码>
data:text/javascript;base64,<base64编码的Javascript代码> 
data:image/gif;base64,base64编码的gif图片数据 
data:image/png;base64,base64编码的png图片数据
data:image/jpeg;base64,base64编码的jpeg图片数据
data:image/x-icon;base64,base64编码的icon图片数据

因为Url是一种基于文本的协议,所以gif/png/jpeg这种二进制属于需要用base64进行编码。换句话说,引入base64以后,就可以支持任意形式的数据格式。下面是个png图片的例子,会在浏览器中显示一个Mozilla的图标。
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHWSURBVHjaYvz//z8DJQAggJiQOe/fv2fv7Oz8rays/N+VkfG/iYnJfyD/1+rVq7ffu3dPFpsBAAHEAHIBCJ85c8bN2Nj4vwsDw/8zQLwKiO8CcRoQu0DxqlWrdsHUwzBAAIGJmTNnPgYa9j8UqhFElwPxf2MIDeIrKSn9FwSJoRkAEEAM0DD4DzMAyPi/G+QKY4hh5WAXGf8PDQ0FGwJ22d27CjADAAIIrLmjo+MXA9R2kAHvGBA2wwx6B8W7od6CeQcggKCmCEL8bgwxYCbUIGTDVkHDBia+CuotgACCueD3TDQN75D4xmAvCoK9ARMHBzAw0AECiBHkAlC0Mdy7x9ABNA3obAZXIAa6iKEcGlMVQHwWyjYuL2d4v2cPg8vZswx7gHyAAAK7AOif7SAbOqCmn4Ha3AHFsIDtgPq/vLz8P4MSkJ2W9h8ggBjevXvHDo4FQUQg/kdypqCg4H8lUIACnQ/SOBMYI8bAsAJFPcj1AAEEjwVQqLpAbXmH5BJjqI0gi9DTAAgDBBCcAVLkgmQ7yKCZxpCQxqUZhAECCJ4XgMl493ug21ZD+aDAXH0WLM4A9MZPXJkJIIAwTAR5pQMalaCABQUULttBGCCAGCnNzgABBgAMJ5THwGvJLAAAAABJRU5ErkJggg==


data格式Url的种种应用举例
可以在Html的Img对象中使用,例如
[img]data:image/x-icon;base64,AAABAAEAEBAAAAAAAABoBQAAF...[/img]

可以在Css的background-image属性中使用,例如
div.image { 
  width:100px; 
  height:100px; 
  background-image:url(data:image/x-icon;base64,AAABAAEAEBAAAAAAAABoBQAAF...); 
}

可以在Html的Css链接处使用,例如
<link rel="stylesheet" type="text/css" href="data:text/css;base64,LyogKioqKiogVGVtcGxhdGUgKioq..." />

可以在Html的Javascript链接处使用,例如
<script type="text/javascript" href="data:text/javascript;base64,dmFyIHNjT2JqMSA9IG5ldyBzY3Jv..."></script>

完整的语法定义
在RFC中,完整的语法定义如下。
dataurl    := "data:" [ mediatype ] [ ";base64" ] "," datamediatype  := [ type "/" subtype ] *( ";" parameter )data       := *urlchar 
parameter  := attribute "=" value]]

urlchar指的就是一般url中允许的字符,有些字符需要转义,例如"="要转义为"%3D",不过我测试下来,至少在Firefox里面,不转义也是可以的。
parameter可以对mediatype进行属性的扩展,常见的是charset,用来定义编码格式,在多语言情况下需要用到。例如下面的例子。
data:text/plain;charset=UTF-8;base64,5L2g5aW977yM5Lit5paH77yB
这个例子会显示出"你好,中文!"。如果吧charset部分去掉,就会显示乱码,因为我用的是UTF-8编码。



Firefox有一个data类型Url的测试页面,列出了各种格式的data类型Url的测试Url,和测试结果说明。
base64编码和内容的隐秘
把二进制数据转换成为Base64不是什么难事,比如Total Commander就有这样的功能。还有一些在线资源, http://www.greywyvern.com/code/php/binary2base64
http://www.kawa.net/works/js/data-scheme/base64-e.html
有些在线转换把base64里面的“=”转换成为%3D,这个在Url中和“=”是一样的,不转换也没什么问题。
当然,这种Url还有一种隐秘的好处,就是将一些道貌岸然者不喜欢的东西,堂而皇之的放在页面上



注:FCKEditor用的就是这玩意。
0
7
分享到:
评论

相关推荐

    浏览器中的data类型的Url格式 data:image/png,data:image/jpeg!

    所谓 data 类型的Url格式,是在RFC2397中 提出的,目的对于一些 小 的数据,可以在网页中直接嵌入,而不是从外部文件载入

    jquery-1.1.3 效率提高800%

    或者,你也可以指定jsonp的数据类型的回调函数,此函数会自动添加到Ajax请求中。 参数选项: async(true) 数据类型: Boolean 默认情况下,所有的请求都是异步发送的(默认为true)。 如果需要发送同步请求,...

    expert_data_dashboard

    数据URL (以data :方案为前缀的URL)使内容创建者可以在文档中内联嵌入小文件。 注意:数据URL被现代浏览器视为唯一的不透明来源,而不是继承负责导航的设置对象的来源。 阅读更多 将CSV转换为JSON或将JSON转换为...

    Data URI scheme详解和使用实例及图片base64编码实现方法

    Data URI scheme是在RFC2397中定义的,目的是将一些小的数据,直接嵌入到网页中,从而不用再从外部文件载入。比如上面那串字符,其实是一张小图片,将这些字符复制黏贴到火狐的地址栏中并转到,就能看到它了,一张1...

    stethoscope::stethoscope:跟踪,可视化和嵌入您的健康和生活数据-位置,健康,工作,娱乐等

    跟踪,可视化和嵌入您的所有健康和生活数据-位置,健康,工作,娱乐等。 :glowing_star: 特征 从任何地方跟踪数据(健康,音乐,时间跟踪等) 为您的数据生成易于使用的API端点 易于嵌入的每日,每周,每月和每年...

    HTML5页面嵌入小程序没有返回按钮及返回页面空白的问题

    之前也没写过小程序但是看过之后都是现成的api 简单易懂 唯一就是会有很多坑要去踩 以为要写原生小程序 但是 是我想多了 公司是要节约开发成本 那么就衍生了H5嵌入小程序这个操作 必须的 1、要去申请一个小程序测试...

    EmbedAnything:用于将媒体嵌入页面的 Mediawiki 扩展

    嵌入任何东西 用于将媒体嵌入页面的 Mediawiki 扩展 与: &lt;embed&gt;URL&lt;/embed&gt; 或者 &lt;embed url=URL&gt;... {{#tag:embed|URL}} 使用“模板”或“样式”... 您可以访问模板中的两个变量:$data 和 $opti

    svg2png:将 SVG 元素转换为 PNG 作为 dataURL

    创建您的功能分支: git checkout -b my-new-feature 提交您的更改: git commit -am 'Add some feature' 推送到分支: git push origin my-new-feature 提交拉取请求 :D历史0.1.0 第一个版本执照麻省理工学院

    neon-visus:与NSF NEON数据门户网站集成

    visus-frame.html-可配置的组件,可以嵌入到现有网页中以进行交互式流式传输 该存储库部署在以下URL: : Neonapi neonapi实现了两个调用: products / -返回数据产品ID的JSON列表 products / [dataproduct_id] -...

    这个项目是通过角色对话探索嵌入在莎士比亚戏剧中的网络。

    这个项目是通过角色对话探索嵌入在莎士比亚戏剧中的网络。 文本的一致结构,包括舞台方向,有助于促进场景和动作的台词提取。例如,行为和场景通常以诸如“场景 I. 威尼斯”之类的文本开头。一条街。' 每个字符的行...

    NET公共类库[转发]

    Data Class Name File Function SQL访问基础类 SqlHelper.cs 执行带参数SQL,非带参数SQL,存储过程等语句 Access操作辅助类 JetAccess.cs Access的新建,压缩,加密等数据库文件操作 Oledb操作辅助类 OleDbHelper.cs ...

    条码制作软件 Barcode Studio 15.14.1 中文多语版.zip

    Barcode Studio 是生成高质量条形码图像的快捷方便的方法.(例如印刷的位图或矢量格式),无需编程。 即时使用条形码模板支持标准化条形码的创建。奥地利的 TEC-IT 自 1996 年以来一直在开发用于 条形码, 打印, 标签...

    wikidata-corpus:使用word2vec训练Wikidata进行单词嵌入任务

    wikidata wikidata....o data/zhwiki-latest-pages-articles.extracted \ data/zhwiki-latest-pages-articles.xml.bz2繁体转简体opencc -i data/zhwiki-latest-pages-articles.extracted/AA/wiki_00 \ -o data/

    HTML Snapshot ActiveX控件

    &lt;br&gt; HTML Snapshot ActiveX控件的特点: 直接保存指定URL网页中的bmp 、jpeg 、tiff 、gif 或png 格式图象; 把图象直接改变TML串; 从大图象创造子图象; 得到链接、标题、cookie或页的HTML来源; 得到HTML...

    baidu-salers-logo-prediction:baidu contest, url

    dataPreProcess.py 80%的数据集用于训练,20%的数据集用于有效。 扩充 添加填充,旋转 色彩抖动八月:0.3 随机灰色,概率:0.5 calc数据集均值和std(utils / calc_mean_std.py),用于数据集归一化 日志训练...

    extjs中grid中嵌入动态combobox的应用

    拿combobox的数据 代码如下: comboDS = new Ext.data.JsonStore({ url : ‘test.do’, fields : [{ name : ‘id’ }, { name : ‘display’ }] }); combobox定义 combobox 中的id必须要有,后面要跟据id取combobox值...

    为何html中嵌入mp4格式视频播放不了

    下面的这段代码是在我的test.html中,通过绝对路径如c:\test....object width=”300″ height=”300″ type=”video/x-ms-asf” url=”http://localhost/younao01.mp4″ data=”younao01.mp4″ classid=”CLSID:6BF52

    life-data

    跟踪,可视化并嵌入您的所有健康和生活数据-位置,健康,工作,娱乐等。 :glowing_star: 特征 从任何地方跟踪数据(健康,音乐,时间跟踪等) 为您的数据生成易于使用的API端点 易于嵌入的每日,每周,每月和每年...

    XML高级编程pdf

    7.6.3 数据类型 7.7 简化了的XML Data 7.7.1 MSXML对命名空间和模式的支持 7.7.2 数据类型 7.8 图书目录中的变化 7.8.1 为什么烦恼 7.8.2 重铸DTD 7.8.3 模式协调 7.9 小结 第8章 链接和查询 8.1 XML 信息...

    addthat:社交媒体共享小部件

    将来自addthat.htmlHTML标记嵌入到您的页面中,并用适当的URL替换{PAGEURL} 添加适当CSS和JS 使用data- *参数可以进行其他配置 数据-* 价值 描述 data-gaevent no value 启用将事件发送到Google Analytics...

Global site tag (gtag.js) - Google Analytics