Помощь в написании студенческих работ
Антистрессовый сервис

Поле заголовка Content-Transfer-Encoding

РефератПомощь в написанииУзнать стоимостьмоей работы

Байты со значениями 9 и 32 могут быть представлены как ASCII-символы «Табуляция» и «Пробел», но не должны быть представлены так в конце строки. Везде, где они представлены соответствующими ASCII-символами, за ними должен следовать печатный символ. В конце же строки символы табуляции и пробела должны быть представлены в соответствии с правилом 1, так как некоторые почтовые транспорты могут убирать… Читать ещё >

Поле заголовка Content-Transfer-Encoding (реферат, курсовая, диплом, контрольная)

Многие типы данных, пересылаемых через email требуют «натурального» представления, то есть, 8-битный набор символов либо двоичный код. В таком виде данные не могут быть пересланы по 7-битным почтовым протоколам, например, RFC 821, который, к тому же, ограничивает длину строки 1000 символами.

Стандартные механизмы конвертирования почты в 7-битный короткострочный формат, приемлемый для почтового транспорта, описывает поле заголовка Content-Transfer-Encoding.

Существует противоречие между желанием эффективно «ужать» бинарные данные и желанием трансформировать данные, которые, хотя бы частично являются 7-битным текстом, так, чтобы их все-таки можно было читать. По этой причине необходимы по крайней мере 2 механизма конвертации: «читабельный» и «плотно ужимающий» .

Данное поле не было определено в предыдущих стандартах. Его значение должно быть строкой без пробелов, определяющей тип конвертации, как показано ниже:

конвертация := «Content-Transfer-Encoding» «:» механизм механизм := «7bit» .

/ «quoted-printable» .

/ «base64» .

/ «8bit» .

/ «binary» .

/ x-token.

Значения не чувствительны к регистру букв. Значение «7bit» означает, что тело письма уже имеет 7-битный формат и не требует дополнительной обработки для пересылки по почте. Это значение полагается по умолчанию, если поле заголовка Content-Transfer-Encoding отсутствует.

Значения «8bit», «7bit» и «binary» означают, что никакой трансформации содержимого не производится. Однако, они сделаны различными для индикации того, что из себя представляет содержимое письма, и, соответственно, способа обработки, который может потребоваться для данной транспортной системы. В частности:

" 7bit" означает, что данные являются текстом, имеют короткие строки и языковую кодировку US-ASCII.

" 8bit" означает короткие строки, но в них могут содержаться не-ASCII символы (128−255).

" Binary" означает, что тело письма может содержать не-ASCII символы, но строки могут быть произвольной длины, т. е. слишком длинными для SMTP-транспорта, и может не соблюдаться соглашение по признаку конца строки (CRLF), принятое в SMTP-транспорте.

Хотя на первый взгляд разница в значениях Content-Transfer-Encoding может показатся неважной — ведь все они означают, что никакого преобразования нет, но четкая разметка важна для почтовых шлюзов между разными почтовыми системами, имеющими разные возможности и особенности работы, число которых со временем растет.

Спецификация на почтовый транспорт для пересылки некодированных 8-битных данных дана в RFC-1426. Однако, нет стандартизованных транспортов почты Internet, для которых является приемлемым включение в тело письма некодированных двоичных данных легальным в Internet.

Пять значений, определенных для поля Content-Transfer-Encoding, ничего не говорят о типе содержимого кроме указания алгоритма кодирования либо требований к почтовому транспорту в случае некодированных данных.

Производители почтового ПО, если необходимо, могут определить новые значения поля Content-Transfer-Encoding, но эти значения должны иметь префикс «X-» («x-»), чтобы подчеркнуть их нестандартный характер. Однако, в отличие от типов и подтипов поля Content-Type, введение новых значений Content-Transfer-Encoding настоятельно не рекомендуется, так как может оказаться помехой для взаимосовместимости почтовых систем. Использование X-значений позволяется только как результат взаимосоглашения между взаимодействующими системами.

Механизм конвертации «Quoted-Printable» .

Этот механизм предназначен для представления данных, в основном состоящих из байтов, соответствующих символам, имеющим изображение в символьном наборе ASCII. В результате данного кодирования все байты будут иметь такие значения, гарантированные от дальнейшей модификации почтовым транспортом. Если конвертируемые данные в основном представляют собой ASCII-текст, то конечная их форма остается узнаваемой и читаемой для человека. Тело, полностью состоящее из ASCII-символов, также может быть конвертировано в Quoted-Printable, что гарантирует его содержимому целостность при прохождении через всякие шлюзы, в которых происходит языковая перекодировка символов или преобразование концов строк и т. д.

В Quoted-Printable байты должны быть представлены в соответствии со следующими правилами:

Каждый байт, кроме тех, которые используются для обозначения конца строки, может быть представлен с помощью двух шестнадцатеричных цифр, предваряемых знаком «=». При написании шестнадцатеричных цифр с A по F должны использоваться заглавные буквы. Кроме тех случаев, когда нижеследующие правила позволяют альтернативное кодирование, данное правило является обязательным.

Байты с десятичным значением с 33 по 60 и с 62 по 126 могут быть представлены ASCII-символами.

Байты со значениями 9 и 32 могут быть представлены как ASCII-символы «Табуляция» и «Пробел», но не должны быть представлены так в конце строки. Везде, где они представлены соответствующими ASCII-символами, за ними должен следовать печатный символ. В конце же строки символы табуляции и пробела должны быть представлены в соответствии с правилом 1, так как некоторые почтовые транспорты могут убирать пробелы в конце строки.

Конец строки в тексте письма должен быть представлен (в соответствии с RFC 822) последовательностью CRLF. Так как в каноническом представлении текста не требуется визуального отображения символов конца строки, в Quoted-Printable не используется видимых символов для обозначения конца строки. Для представления бинарных данных более предпочтительной является кодировка base64.

В соответствии с Quoted-Printable длина строки не должна превышать 76 символов. В противном случае используется 'мягкий' перевод строки, представимый знаком равенства. Например, если исходная строка имела вид:

Поскольку символ дефиса представляется в Quoted-Printable в обычном виде, особую осторожность нужно соблюдать при заключении тела в Quoted-Printable в многочастное письмо, чтобы удостовериться, что граница этого включения не проявляется нигде внутри этого включения (лучше всего выбрать обозначение границы в виде последовательности символов «=_», которая никогда не появляется в теле, закодированном в Quoted-Printable.

([*(простой текст / SPACE / TAB) простой текст][" ="] CRLF).

простой текст := байт /.

байт := «=» 2(ЦИФРА / «A» / «B» / «C» / «D» / «E» / «F»).

Механизм конвертации Base64.

Этот алгоритм разработан для представления произвольных последовательностей байтов в форму, читаемую для человека. Кодирующий и декодирующий алгоритмы очень просты, но закодированные данные примерно на 33% больше, чем некодированные. Base64 использует 65-символьный поднабор из US-ASCII, выделяя 6 бит на каждый печатный символ. (65-й символ «=» используется для обозначения функции спец. обработки).

Процесс кодирования преобразует 3 входных символа в виде 24-битной группы, обрабатывая их слева направо. Эти группы затем рассматриваются как 4 соединенные 6-битные группы, каждая из которых транслируется в одиночную цифру алфавита base64. При кодировании base64, входной поток байтов должен быть упорядочен старшими битами вперед. Каждая 6-битная группа используется как индекс для массива 64-х печатных символов. Символ, на который указывает значение индекса, помещается в выходную строку. Эти символы выбраны так, чтобы быть универсально представимыми и исключают символы, имеющие специальное значение для SMTP-транспорта («.», CR, LF) и для синтаксиса вложенных тел MIME («-»).

Выходной поток должен иметь длину строк не более 76 символов. Все признаки перевода строки и другие символы, отсутствующие в таблице, должны быть проигнорированы декодером base64. Среди данных в Base64 символы, не перечисленные в таблице, переводы строки и т. п. должны говорить об ошибке передачи данных, и, соответственно, почтовая программа должна оповестить пользователя о ней.

Если в хвосте потока кодируемых данных осталось меньше, чем 24 бита, справа добавляются нулевые биты до образования целого числа 6-битных групп. А до конца 24-битной группы остается от 0 до 3-х недостающих 6-битных групп, вместо каждой из которых ставится символ-заполнитель '='.

Показать весь текст
Заполнить форму текущей работой