Протокол HTTP не гарантирует "8 bit clean ", поэтому он может испортить двоичный поток.
Это не обязательно, но позволяет вставлять изображения без выполнения дополнительных HTTP-запросов (где в некоторых случаях это невозможно или не разрешено).
Из статьи в Википедии на Base64 :
Термин Base64 относится к определенной кодировке передачи содержимого MIME. . Он также используется как общий термин для любой подобной схемы кодирования, которая кодирует двоичные данные, обрабатывая их численно и переводя их в базу 64 {{ 1}} представление. Конкретный выбор базы обусловлен историей кодировки набора символов : можно выбрать набор из 64 символов, который одновременно является частью подмножества общий для большинства кодировок , а также для печати.Эта комбинация оставляет маловероятную возможность изменения данных при передаче через системы, такие как электронная почта, которые традиционно не были чистыми на уровне 8 бит.
И конкретно относительно HTTP:
Кодировка Base64 может быть полезной, когда довольно длинная идентифицирующая информация используется в среде HTTP. Например, структура сохраняемости базы данных для объектов Java может использовать кодировку Base64 для кодирования относительно большого уникального идентификатора (обычно 128-битного {{1} } UUID) в строку для использования в качестве параметра HTTP в формах HTTP или URL-адресах HTTP GET. Кроме того, многим приложениям необходимо кодировать двоичные данные таким образом, чтобы было удобно включать их в URL-адреса, в том числе в скрытых полях веб-форм, и Base64 - это удобная кодировка, позволяющая отображать их не только в компактном виде , но и в относительно нечитаемом при попытке скрыть природу данных из случайного человек-наблюдатель.