從電子郵件(MIME)到Web(HTML / CSS / JavaScript)的許多Internet格式都是純文本的。如果您通過電子郵件發送圖像或可執行文件,則通常首先使用base64進行編碼。base64編碼背后的技巧是我們使用64種不同的ASCII字符,包括所有字母,大寫和小寫以及所有數字。
並非所有非文本文檔都使用base64編碼在線共享。但是,這很常見。加載google.com或bing.com並查看HTML源代碼:您將使用base64編碼的圖像。
Base64顯然是浪費,因為我們每個字節只使用64個不同的值,而一個字節可以代表256個不同的字符。也就是說,我們使用字節(8位字)作為6位字。每8位傳輸數據浪費2位。要發送三個字節的信息(3次8是24位),你需要使用四個字節(4次6再次是24位)。因此,文件的base64版本比它可能大4/3。所以我們使用的存儲空間比我們多33%。
聽起來很糟糕。工程師如何容忍這種浪費的格式?
Web服務器通常以壓縮形式提供內容。壓縮部分抵消了base64的浪費性質。
為了評估base64編碼的效果,我選擇了最近一篇研究論文中使用的一組圖像。有不同的壓縮格式,但舊的格式是gzip。我使用base64對圖像進行編碼,然后使用gzip壓縮它們。我報告了字節數。我讓文件可用。
文件名 | 原文件大小 | Base64文件大小 | Base64文件gzip后大小 |
---|---|---|---|
bing.png | 1355 | 1832 | 1444 |
googlelogo.png | 2357 | 3186 | 2477 |
lena_color_512.jpg | 105764 | 142876 | 108531 |
mandril_color.jpg | 247222 | 333970 | 253868 |
peppers_color.jpg | 9478 | 12807 | 9798 |
如您所見,gzip大小在原始大小的5%之內。對於較大的文件,差異接近2.5%。
因此,您可以安全地在Web上使用base64而不必過於擔心。
在某些情況下,base64編碼甚至可以提高性能,因為它避免了對不同服務器請求的需要。在其他情況下,base64會使事情變得更糟,因為它往往會破壞瀏覽器和服務器緩存。隱私方面,base64編碼可以帶來好處,因為它隱藏了您在較大的加密包中訪問的內容。