Как отправить как ASCII, так и двоичные данные в одном HTTP-ответе? - PullRequest
0 голосов
/ 10 января 2012

В настоящее время я использую Java 1.4.2 на стороне клиента для связи с сервером Rails 3.Когда мы изначально проектировали связь, вся возвращаемая информация была ASCII (буквенно-цифровая), поэтому мы использовали JSON и возвращали ее как карту.Теперь мы находим необходимость также возвращать двоичные данные (изображение), но мы не хотим делать два HTTP-запроса.

Как лучше всего отправить существующую информацию ASCII и двоичные данные в одномHTTP ответ?Моя текущая мысль - использовать base64 или hex-кодирование, но я не знаю, лучший ли это способ.Простой способ кодирования на стороне сервера (Ruby) и декодирования на клиенте (Java 1.4.2) также является огромным плюсом.

Ответы [ 2 ]

3 голосов
/ 10 января 2012

Протокол HTTP позволяет возвращать ответы как multipart/mixed.При этом ответ разграничивается на ноль или более частей , причем каждая часть отделяется границей.Каждая из частей (может) имеет свои собственные заголовки, описывающие содержимое части (Content-Type, Content-Length, Content-Disposition и т. Д.).Таким образом, одна часть ответа может быть текстом ASCII, а другая - потоком октетов.

Использование этого типа ответа, вероятно, является лучшим выбором для отправки смешанного контента в одном HTTP-вызове, но потребует от вас выполнения некоторых действий.изменения в вашем коде Rails.

Специальное примечание: если у вас есть клиенты на основе браузера, использующие одинаковые серверные службы, не все браузеры правильно обрабатывают multipart/mixed ответы.

0 голосов
/ 10 января 2012

Тело HTTP является двоичным. Нет необходимости в ASCII-обработке любых данных. Base64 здесь не актуален.

Если вы управляете как клиентом, так и сервером, самое простое решение - иметь собственный формат. Делайте все, что вам удобно для упаковки / распаковки данных.

...