Если кто-то может предложить мне альтернативный алгоритм сжатия, я был бы в равной степени счастлив.
Всегда есть хороший старый дефлят, гораздо более распространенный член семейства компрессии LZ. JavaScript implementation. How to handle raw deflate content with Python's zlib module.
Это много накладных расходов в относительно медленном клиентском коде, который будет сжимать данные отправки, и нет тривиального представления необработанных байтов, которые вы получите от него.
ли они Gzip Параметры GET в запросе?
Поля формы GET в строке запроса по своей природе должны быть довольно короткими, или вы превысите границы URL-адресов браузера или сервера.Нет смысла сжимать что-либо столь маленькое. Если у вас много данных, оно должно быть в форме POST.
Даже в форме POST по умолчанию enctype
является application/x-www-form-urlencoded
, что означает, что большая часть байтов будет кодироваться как %nn
последовательностей. Это закроет ваше представление формы, возможно, за пределами первоначального несжатого размера. Чтобы отправить необработанные байты, вам нужно будет использовать форму enctype="multipart/form-data"
.
Даже тогда у вас будут проблемы с кодировкой. Строки JS являются Unicode, а не байтами, и будут закодированы с использованием кодировки страницы, содержащей форму. Это обычно должно быть UTF-8, но тогда вы не можете фактически генерировать произвольную последовательность байтов для загрузки путем кодирования на него, поскольку многие байтовые последовательности недействительны в UTF-8. Вы можете иметь байты в кодировке unicode, кодируя каждый байт в качестве блока кода для UTF-8, но это наполнит ваши сжатые байты на 50% (поскольку половина блоков кода, превышающих 0x80
, будет кодировать два байта UTF-8).
В теории, если вы не возражаете против надлежащей поддержки интернационализации, вы можете использовать страницу как ISO-8859-1 и использовать idiom escape/encodeURIComponent
для преобразования между UTF-8 и ISO-8859-1 для вывода. Но это не сработает, потому что браузеры лежат и на самом деле используют код Windows 1252 для кодирования/декодирования контента, отмеченный как ISO-8859-1. Вы могли бы использовать другую кодировку, которая сопоставила каждый байт символу, но это было бы более ручной накладной для кодирования и дополнительно ограничивало бы символы, которые вы могли бы использовать на странице.
Вы можете избежать проблем с кодированием, используя что-то вроде base64, но опять же, у вас больше накладных расходов на ручное кодирование и 33% раздувания.
Таким образом, все подходы плохие; Я не думаю, что вы получите много полезного из этого.
Ick, декомпрессии в JavaScript? Вы не можете использовать встроенную поддержку сжатия в большинстве современных браузеров и HTTP-серверов? –
@ Николас - Я полностью согласен: декомпрессия в JavaScript, которая по сути является интерпретированным языком, будет очень медленной по сравнению с сжатием (или GZip) браузера (или операционной системы). @RadiantHex - Просто любопытно: зачем вам это нужно? –
@ Николас: они ли GZIP параметры GET в запросе? – RadiantHex