大家可能注意到了,網頁上有些圖片的src或css背景圖片的url后面跟了一大串字符,比如:data:image/png;base64, ivborw0kggoaaaansuheugnzvjlywr5ccllpaaaahhjrefueno8zjsoxcambfb/keauffr0cbng3nqpw68arzdalozpppfibhh5eab8b+tlt9myq6i1buqfaq1cksvcxz2acs6406kugpt5/kuvgz5bdcszo99zodczgvt4mjjzmvkqcha68iiepb86gaiov8cdadliuqbs7md3waaaabjru5erkjggg%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瀏覽器都支持這種小文件嵌入。
舉個圖片的例子:
網頁中一張圖片可以這樣顯示:
<img src=“http://www.letuknowit.com/images/wg.png”/>
也可以這樣顯示:
代碼如下:
<img src=“data:image/png;base64,ivborw0kggoaaaansuheugaaaaeaaaakcayaaabidfamaaaagxrfwhrtb2z0d2fyzqbbzg9izsbjbwfnzvjlywr5ccllpaaaahhjrefueno8zjsoxcambfb/keauffr0cbng3nqpw68arzdalozpppfibhh5eab8b+tlt9myq6i1buqfaq1cksvcxz2acs6406kugpt5/lckuvgz5bdcsb13zo99zodczgvt4mjjzmvkqcha68iiepb86gaiov8cdadliuqbs7md3waaaabjru5erkjggg%3d%3d”/>
我們把圖像文件的內容直接寫在了html 文件中,這樣做的好處是,節省了一個http 請求。壞處呢,就是瀏覽器不會緩存這種圖像。大家可以根據實際情況進行自由取舍。