首先来看一段代码
<IMG
SRC="data:image/gif;base64,R0lGODdhMAAwAPAAAAAAAP///ywAAAAAMAAw
AAAC8IyPqcvt3wCcDkiLc7C0qwyGHhSWpjQu5yqmCYsapyuvUUlvONmOZtfzgFz
ByTB10QgxOR0TqBQejhRNzOfkVJ+5YiUqrXF5Y5lKh/DeuNcP5yLWGsEbtLiOSp
a/TPg7JpJHxyendzWTBfX0cxOnKPjgBzi4diinWGdkF8kjdfnycQZXZeYGejmJl
ZeGl9i2icVqaNVailT6F5iJ90m6mvuTS4OK05M0vDk0Q4XUtwvKOzrcd3iq9uis
F81M1OIcR7lEewwcLp7tuNNkM3uNna3F2JQFo97Vriy/Xl4/f1cf5VWzXyym7PH
hhx4dbgYKAAA7"
ALT="Larry">
有兴趣的朋友可以写个HTML,然后把这段代码拷进去。
用浏览器打开这个html,你会发现有一个人头,然而用HTTP WATCH看一下,你会发现并没有任何HTTP请求。
这是为什么?
仔细看下这个img标签中src属性的内容,会发现这个url的模式是data。这样我们就发现了一个不常用的模式,那么这个模式到底有什么用呢?(原文请看)
他的作用是将一些小的内容用文本的格式放到页面上,从而减少http请求。至于这个小的定义是什么?
先看原文如下:
写道
The "data:" URL scheme is only useful for short values. Note that
some applications that use URLs may impose a length limit; for
example, URLs embedded within <A> anchors in HTML have a length limit
determined by the SGML declaration for HTML [RFC1866].
some applications that use URLs may impose a length limit; for
example, URLs embedded within <A> anchors in HTML have a length limit
determined by the SGML declaration for HTML [RFC1866].
从这段定义可以看出这个文本的内容不能超过url的最大长度限制。
这个data模式的定义如下:
dataurl := "data:" [ mediatype ] [ ";base64" ] "," data
mediatype := [ type "/" subtype ] *( ";" parameter )
data := *urlchar
parameter := attribute "=" value
另附 base64的解释
但是我做了一个实验:
<script type="text/javscript" src="data:application/x-javascript;base64,YWxlcnQoJ2hlbGxvJyk7" ></script>
其中 YWxlcnQoJ2hlbGxvJyk7 是 alert('hello'); 的base64 编码。
但是浏览器能成功解析他的内容,但是不执行这段代码。