`
xuelange
  • 浏览: 21601 次
  • 性别: Icon_minigender_2
  • 来自: 深圳
社区版块
存档分类
最新评论

http URI scheme与data URI scheme

 
阅读更多

大家可能注意到了,网页上有些图 片的src或css背景图片的url后面跟了一大串字符,比如:data:image/png;base64,  iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAYAAABIdFAMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHhJREFUeNo8zjsOxCAMBFB/   KEAUFFR0Cbng3nQPw68ArZdAlOZppPFIBhH5EAB8b+Tlt9MYQ6i1BuqFaq1CKSVcxZ2Acs6406KUgpt5/   LCKuVgz5BDCSb13ZO99ZOdcZGvt4mJjzMVKqcha68iIePB86GAiOv8CDADlIUQBs7MD3wAAAABJRU5ErkJggg %3D%3D。那么这是什么呢?这是Data URI scheme。
  Data URI scheme是在RFC2397中定义的,目的是将一些小的数据,直接嵌入到网页中,从而不用再从外部文件载入。比如上面那串字符,其实是一张小图片,将这些字符复制黏贴到火狐的地址栏中并转到,就能看到它了,一张1X36的白灰png图片。
  在上面的Data URI中,data表示取得数据的协定名称,image/png 是数据类型名称,base64 是数据的编码方法,逗号后面就是这个image/png文件base64编码后的数据。
  目前,Data URI scheme支持的类型有:
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图片数据
  base64简单地说,它把一些 8-bit 数据翻译成标准 ASCII 字符,网上有很多免费的base64 编码和解码的工具,在PHP中可以用函数base64_encode() 进行编码,如echo base64_encode(file_get_contents(‘wg.png’));
目前,IE8、Firfox、Chrome、Opera浏览器都支持这种小文件嵌入。

因为Url是一种基于文本的协议,所以gif/png/jpeg这种二进制属于需要用base64进行编码。换句话说,引入base64以后,就可以支持任意形式的数据格式。

什么是 data URI scheme?


对优化网页性能有研究的人都知道,首要的任务是尽量减少HTTP请求的次数,例如把多个 JavaScript 文件合并,把多个 CSS 文件合并,利用 CSS Sprite (本空间有介绍)合并的小图示等等,但是很多人都不知道还有一个 data URL 的密技,让我们直接把图像的内容崁入网页里面,这个密技的官方名称是 data URI scheme。

把它在网页上显示出来的标准方法是:
<img src="http://www.XXXX.net/files/images/check.png"/>
这种取得数据的方法称为 http URI scheme,同样的效果使用 data URI scheme 可以写成:
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAIAAAA
7ljmRAAAAGElEQVQIW2P4DwcMDAxAfBvMAhEQMYgcACEHG8ELxtbPAAAAAElFTkSuQmCC" />
换句话说我们把图像文件的内容内置在 HTML 文件中,节省了一个 HTTP 请求。
Data URI scheme 的语法
我们来分析一下这句 img 标签的语法:
<img src="data:image/png;base64,iVBOR....>
它包含一下部分:

  data:[<mediatype>][;base64],<data>

dataurl    := "data:" [ mediatype ] [ ";base64" ] "," data
mediatype := [ type "/" subtype ] *( ";" parameter )
data       := *urlchar
parameter := attribute "=" value

    data - 取得数据的协议名称
    image/png - 数据类型名称
    base64 - 数据的编码方法
    iVBOR.... - 编码后的数据
    : , ; - data URI scheme 指定的分隔符号

Base64 编码?

不知道甚么是 base64 吗?简单地说它把一些 8-bit 数据翻译成标准 ASCII 字符,往上有很多免费的 base64 编码和解码的工具,你也可以用 PHP 的 base64_encode() 进行编码:

echo base64_encode(file_get_contents('check.png'));

在 CSS 中使用 data URL
Data URI scheme 也可以在 CSS 中使用,例如:
body { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAIAAAA
7ljmRAAAAGElEQVQIW2P4DwcMDAxAfBvMAhEQMYgcACEHG8ELxtbPAAAAAElFTkSuQmCC");}

浏览器会缓存这种图像吗?

不会,Data URL 虽然节省 HTTP 请求,但是倘若这个图像要在网页多个地方显示的话,便会加大网页的内容,延长了下载的时间,其中一个解决办法是在一个 CSS class 中加入 data URL,在需要显示图像的块调用这个 class,例如:
.logobg {
background: url(data:…)
}
<div class=”navigation logobg”>..
helo, hello
<div class=”footer logobg”>…

注意:IE8以前的版本不支持data URI scheme。

这篇文章写的也不错

http://hi.baidu.com/oxid/blog/item/b4346caf709df0f6fbed50b2.html
分享到:
评论

相关推荐

    .net 图片base64编码 Data URI scheme

    .NET 图片Base64编码与Data URI方案是网络开发中常用的一种技术,它允许我们将图片数据直接嵌入到HTML或CSS代码中,从而减少HTTP请求,提高页面加载速度。下面将详细阐述这两个概念以及在.NET环境中如何实现它们。 ...

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

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

    android:scheme 通过uri跳转到APP应用指定Activity

    在Android开发中,`android:scheme` 是一个关键的概念,用于构建自定义URL协议,使得外部应用或系统可以通过特定的URI来启动我们的应用程序中的特定Activity。这个特性在很多场景下非常有用,比如分享链接、广告点击...

    磁力链接(Magnet URI scheme)定义和用途

    ### 磁力链接(Magnet URI scheme)定义和用途 #### 一、定义与特点 **定义**:磁力链接是一种特殊的统一资源名称(Uniform Resource Name, URN),主要用于标识、查找以及下载文件。与传统的文件下载方式不同,...

    探究dataURI中使用SVG正确姿势

    dataURI是一种URL scheme,它允许在单一的URL内直接包含文件内容。其基本格式如下: ``` data:[][;base64],&lt;data&gt; ``` mediatype是数据类型,如image/svg+xml;base64是一个可选的编码方式,用于对数据进行编码。...

    Delphi-XE5-开发 Android URI简介

    #### 四、URI 的使用场景与配置 在 Android 中,为了实现跨应用间的数据共享,需要对 URI 进行特定的配置。这通常涉及到在 AndroidManifest.xml 文件中添加 `&lt;provider&gt;` 标签,并设置相关的属性,如 `android:mime...

    android 根据uri获取真实路径

    - 如果`Uri`没有scheme(即`scheme == null`),那么直接返回`uri.getPath()`。 - 这种情况一般较少见,但为了代码健壮性考虑,也需要做相应的处理。 4. **处理FILE Scheme**: - 当`Uri`的scheme为`file`时,...

    博客《Uri详解之——Uri结构与代码提取》对应源码

    这个博客《Uri详解之——Uri结构与代码提取》的源码提供了深入理解Uri类的实例和实践,有助于开发者更好地理解和操作Uri。下面将详细探讨Uri的相关知识点。 1. **Uri基本概念**: Uri,全称Uniform Resource ...

    小议Data URI scheme及其在CSS中的相关使用

    以下是关于Data URI scheme及其在CSS中应用的详细解释: 1. **数据URI方案原理**: 数据URI方案允许开发者将文件内容以Base64编码的形式直接插入到HTML的`&lt;img&gt;`标签或CSS的`url()`函数中。这样,图像数据就成为...

    Uri一个URI处理库

    - **创建和解析URI**:Uri库允许通过字符串或数组创建URI实例,并能解析出各个部分,如scheme(协议)、authority(授权部分,包括用户信息、主机和端口)、path(路径)、query(查询字符串)和fragment(片段...

    抖音快手URL Scheme

    抖音快手URL Scheme 里面包含了抖音快手,进入直播间,进入用户,hone,等 手机中的APP都有一个沙盒,APP就是一个信息孤岛,相互是不可以进行通信的。但是iOS的APP可以注册自己的URL Scheme,URL Scheme是为方便app...

    android:scheme

    在Android开发中,`android:scheme` 是一个关键的概念,用于定义自定义URL协议,使得外部应用程序或系统可以通过特定的URI来启动我们的应用程序中的特定Activity。这个特性在很多场景下非常有用,比如实现点击链接...

    URl Scheme的使用以及回调

    1. **注册URL Scheme**:在AndroidManifest.xml文件中,使用标签声明自定义的 scheme 和 host,如 `&lt;data android:scheme="testa" /&gt;`。 2. **处理Intent**:在目标Activity中,通过覆写`onCreateIntent()`方法来...

    Scheme跳转的demo

    "Scheme"在Android系统中扮演着URL协议的角色,类似于网页浏览器中的http或https,但它是专为Android应用设计的。标题"Scheme跳转的demo"暗示我们将讨论如何在Android中实现通过自定义scheme进行应用间的跳转。 ...

    A_APP通过Uri调用B_APP(Uri含两个应用包)demo最新版

    Uri data = intent.getData(); String aPackageName = data.getQueryParameter("package_name"); String bPackageName = data.getQueryParameter("B_APP_PACKAGE"); // 进行授权登录逻辑... } } ``` 4. **...

    磁力链接(Magnet URI scheme)是一种在对等网络中进行信息检索和下载文档的电脑程序

    磁力链接

    浅析什么是URI

    1. **Scheme(协议)**:指定了URI使用的通信协议类型,例如`http://`或`ftp://`等。对于`ContentProvider`来说,其scheme已经被Android系统规定为`content://`。 2. **Authority(权威)**:这部分用来标识具体的...

    Android应用跳转Scheme协议

    在URL(统一资源定位符)中,Scheme部分定义了数据的获取方式,如我们常见的"http"、"https"用于网页访问,"mailto"用于发送邮件。在Android中,开发者可以自定义Scheme,以便于自己的应用被其他应用调用。例如,你...

    URI,URL常识

    ### URI与URL的基础概念 #### 一、URI(Uniform Resource Identifier):统一资源标识符 在互联网技术领域中,URI是用于唯一标识一个资源的一种标准形式。它是一种抽象的概念,用以指代任何类型的资源,无论是实体...

Global site tag (gtag.js) - Google Analytics