The "data" URL scheme と XML へのデータ埋め込み

HTTP のコネクション数を減らすテクニックの一つとして、RFC 2397 の The "data" URL scheme を用いる方法があります。HTML や CSS 中に画像を Base64 エンコードして埋め込むことにより、1コネクションで複数の画像を転送するというわけです。

適当な方法で Base64 エンコードします。


$ perl -MMIME::Base64 -0777 -ne 'print &MIME::Base64::encode_base64($_,"");' < image.gif

data:[<MIME-type>][;base64],<data> という書式で、<img src="data:image/gif;base64,〜" /> のように使います。


<img
src="data:image/gif;base64,
R0lGODlhEAAQALMNAD8/P7+/vyoqKlVVVX9/fxUVFUBAQGBgYMDAwC8vL5CQkP///wAAAP///wA
AAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAAANACwAAAAAEAAQAAAEPbDJSau9OOvNew0AEH
DA8wCkiW6g6AXHMU4LgizUYRgEZdsUggFAQCgUP+AERggcFYHaDaMgEBQchBNhiQAAIfkECQAAD
QAsAAAAABAAEAAABDuwyUmrvTYAEDAFzwN4EyiSksaRyHF06GEYBNoQ82EHBwHbCIUCYRMKiwSC
YoFALDCIwLDZBFJtTKclAgAh+QQJAAANACwAAAAAEAAQAAAEPrDJGQAIM2vwHtAUcVTdBzaHYRC
Kip2EepxacBAvjSgKQmc83m+iILCGEkSgh5wsEIhFEwqdUpvPaHPLnUQAACH5BAkAAA0ALAAAAA
AQABAAAAQ+sMkZyAkz62MM0ROiKAjRXQCATeOIHEQAPA+QKQShZHOdIQFSRqaSLBCIBQiERC41T
cQzc0xOr9isdsvtPiMAIfkECQAADQAsAAAAABAAEAAABD2wyYmUQjNra/VcCLIoBKEExBFkYRtc
BGAQbJsdhnFkoMimGI8wAACshBnA4wFAJpdNp4RolFqv2Kx2q4kAACH5BAkAAA0ALAAAAAAQABA
AAAQ9sMm5EFoza2u1b5ylKMjXVFdAjGamrEo7IWMpz8QR3A0BGATewWA48BA5mykAAOxugMcDwI
tOeUwnb9uKAAAh+QQJAAANACwAAAAAEAAQAAAEO7DJSau92C6EVp4c90khMjZbd5KKYo4B0Z4KI
Z9I4H7IQQSng8FwwAQAgJgBQMAAHo+kD3h5Rk/HpCUCACH5BAkAAA0ALAAAAAAQABAAAAQ8sMlJ
q7046827nwuCLJwoliYXjlIAAAGFKApCAc8DULQSTzgd4kCYEQgKigt2MBgOC5rtQnAeOAHilBI
BADs=" />

Firefox, Opera, SafariRFC 2397 をサポートしていますが、IE6, IE7 はサポートしていないため、実際に使うことは難しいのが現状です。

Firefox の Bookmark では icon 画像を data URL スキーマを用いて保持しています。これは XML 中にバイナリデータを共存させる使い方ということになります。メディアのメタデータとデータを XML 中に共存させることができますので、使いどころはありそうです。


<album>
<photo>
<date>Wed, 05 Dec 2007 18:00:00 +0900</date>
<img src="data:image/gif;base64,〜データ列〜"
title="Example 1" width="320" height="240" />
</photo>
</album>

森田