Content-Transfer-Encoding Binary Options


Puede ser un poco denso para leer, pero la sección Content-Transfer-Encoding de RFC 1341 tiene todos los detalles: La situación va de mal en peor. Heres mi resumen: Antecedentes SMTP, por definición (RFC 821), los límites de correo a las líneas de 1000 caracteres de 7 bits cada uno. Esto significa que ninguno de los bytes que envía por la tubería puede tener el bit más significativo (orden superior) establecido en 1. El contenido que queremos enviar a menudo no obedecerá esta restricción de forma inherente. Piense en un archivo de imagen o un archivo de texto que contenga caracteres Unicode: los bytes de estos archivos a menudo tienen su bit 8 puesto a 1. SMTP no permite esto, por lo que necesita utilizar la codificación de transferencia para describir cómo youve trabajado alrededor de la falta de coincidencia . Los valores para el encabezado Content-Transfer-Encoding describen la regla que ha elegido para resolver este problema. 7Bit Codificación 7bit significa simplemente que Mis datos consisten sólo en caracteres US-ASCII, que sólo utilizan los 7 bits inferiores para cada carácter. Youre básicamente garantizar que todos los bytes en su contenido ya se adhieren a las restricciones de SMTP, y por lo que no necesita ningún tratamiento especial. Sólo puede leerlo tal como está. Tenga en cuenta que cuando elige 7 bits. Estás de acuerdo en que todas las líneas de tu contenido tienen menos de 1000 caracteres de longitud. Siempre y cuando su contenido se adhiere a esta regla, 7bit es la mejor transferencia de codificación, ya que no hay trabajo extra necesario sólo leer / escribir los bytes a medida que salen de la tubería. Su también fácil al globo del ojo 7bit contenido y tener sentido de él. La idea aquí es que si usted está escribiendo justo en texto inglés llano usted estará bien. Pero eso no era cierto en 2005 y no es cierto hoy. 8Bit Encoding 8bit means Mis datos pueden incluir caracteres ASCII extendidos que pueden usar el 8º bit (más alto) para indicar caracteres especiales fuera de los caracteres estándar de 7 bits de US-ASCII. Como con 7bit. Todavía hay un límite de línea de 1000 caracteres. 8 bits. Al igual que 7bit. En realidad no hace ninguna transformación de los bytes como theyre escrito o leer desde el cable. Simplemente significa que usted no está garantizando que ninguno de los bytes tendrá el bit más alto establecido en 1. Esto parece un paso más allá de 7 bits. Ya que le da más libertad en su contenido. Sin embargo, RFC 1341 contiene este tidbit: A partir de la publicación de este documento, no hay transportes de Internet estandarizados para los que es legítimo incluir datos no codificados de 8 bits o binarios en los cuerpos de correo. Por lo tanto, no hay circunstancias en las que el 8bit o binario Content-Transfer-Encoding es realmente legal en Internet. RFC 1341 salió hace más de 20 años. Desde entonces hemos conseguido 8bit Extensiones MIME en RFC 6152. Pero aún así, los límites de línea todavía pueden aplicarse: Tenga en cuenta que esta extensión NO elimina la posibilidad de un servidor SMTP limitación de longitud de línea servidores son libres de implementar esta extensión, sin embargo, establecer una longitud de línea Límite no inferior a 1000 octetos. El binario de codificación binaria es el mismo que 8 bits. Excepto que no hay restricción de longitud de línea. Todavía puedes incluir cualquier personaje que quieras, y no hay codificación adicional. Similar a 8bit. RFC 1341 afirma que no es realmente una codificación de codificación de codificación legítima. RFC 3030 ampliado con BINARYMIME. Citado impreso Antes de la extensión 8BITMIME, había que ser una forma de enviar contenido que no podía ser de 7 bits a través de SMTP. Los archivos HTML (que pueden tener más de 1000 líneas de caracteres) y los archivos con caracteres internacionales son buenos ejemplos de esto. La codificación quoted-printable (Definido en la Sección 5.1 de RFC 1341) está diseñado para manejar esto. Hace dos cosas: Define cómo escapar de caracteres no-US-ASCII para que puedan ser representados en sólo caracteres de 7 bits. (Versión corta: se muestran como un signo de igualdad más dos caracteres de 7 bits). Define que las líneas no tendrán más de 76 caracteres y que los saltos de línea se representarán mediante caracteres especiales (que luego se escaparán). Citado impreso, debido a las fugas y líneas cortas, es mucho más difícil de leer por un humano de 7 bits o 8 bits. Pero sí soporta una gama mucho más amplia de contenido posible. Codificación Base64 Si sus datos son en gran parte no texto (por ejemplo: un archivo de imagen), usted no tiene muchas opciones. 7bit está fuera de la mesa. 8bit y binario no se admiten antes de la extensión MIME RFC. Citado-imprimible funcionaría, pero es realmente ineficiente (cada byte va a ser representado por 3 caracteres). Base64 es una buena solución para este tipo de datos. Codifica 3 bytes crudos como 4 caracteres US-ASCII, lo cual es relativamente eficiente. El RFC 1341 limita aún más la longitud de línea de datos codificados en base64 a 76 caracteres para encajar dentro de un mensaje SMTP, pero eso es relativamente fácil de administrar cuando solo se está dividiendo o concatenando caracteres arbitrarios en longitudes fijas. El gran inconveniente es que los datos codificados en base64 son prácticamente totalmente ilegibles por los seres humanos, incluso si su texto es sólo texto por debajo.5 El campo Content-Transfer-Encoding Header Muchos tipos de contenido que podrían ser transportados por correo electrónico son representados en su Natural, como caracteres de 8 bits o datos binarios. Tales datos no pueden ser transmitidos a través de algunos protocolos de transporte. Por ejemplo, RFC 821 restringe los mensajes de correo a datos de 7 bits US-ASCII con 1000 líneas de caracteres. Por lo tanto, es necesario definir un mecanismo estándar para volver a codificar dichos datos en un formato de línea corta de 7 bits. Este documento especifica que dichas codificaciones se indicarán mediante un nuevo campo de encabezado Content-Transfer-Encoding. El campo Content-Transfer-Encoding se utiliza para indicar el tipo de transformación que se ha utilizado para representar el cuerpo de una manera aceptable para el transporte. A diferencia de los tipos de contenido, la proliferación de valores de Content-Transfer-Encoding es indeseable e innecesaria. Sin embargo, el establecimiento de un único mecanismo de Content-Transfer-Encoding no parece posible. Hay una compensación entre el deseo de una codificación compacta y eficiente de datos en gran parte binarios y el deseo de una codificación legible de datos que es mayormente, pero no enteramente, datos de 7 bits. Por esta razón, al menos dos mecanismos de codificación son necesarios: una codificación legible y una codificación densa. El campo Content-Transfer-Encoding está diseñado para especificar una asignación invertible entre la representación nativa de un tipo de datos y una representación que se puede intercambiar fácilmente utilizando protocolos de transporte de correo de 7 bits, como los definidos por RFC 821 (SMTP). Este campo no ha sido definido por ninguna norma anterior. El valor fields es un token único que especifica el tipo de codificación, como se enumeran a continuación. Formalmente: estos valores no distinguen entre mayúsculas y minúsculas. Es decir, Base64 y BASE64 y bAsE64 son todos equivalentes. Un tipo de codificación de 7BIT requiere que el cuerpo ya esté en una representación lista para correo de siete bits. Este es el valor predeterminado, es decir, Content-Transfer-Encoding: 7BIT se asume si el campo de encabezado Content-Transfer-Encoding no está presente. Los valores 8bit, 7bit y binario implican que la codificación NO ha sido realizada. Sin embargo, son potencialmente útiles como indicaciones del tipo de datos contenidos en el objeto y, por tanto, del tipo de codificación que puede ser necesario realizar para la transmisión en un sistema de transporte dado. 7bit significa que los datos están representados como líneas cortas de datos US-ASCII. 8bit significa que las líneas son cortas, pero puede haber caracteres no ASCII (octetos con el bit de orden alto establecido). Binario significa que no sólo pueden estar presentes caracteres no ASCII, sino también que las líneas no son necesariamente lo suficientemente cortas para el transporte SMTP. La diferencia entre 8bit (o cualquier otro token imaginable de ancho de bits) y el token binario es que el binario no requiere adherencia a ningún límite de longitud de línea oa la semántica de SMTP CRLF, mientras que los tokens de anchura de bits requieren tal adherencia. Si el cuerpo contiene datos en cualquier ancho de bit distinto de 7 bits, debe utilizarse el token de codificación de transferencia de contenido de ancho de bit apropiado (por ejemplo, 8 bits para datos no codificados de 8 bits de ancho). Si el cuerpo contiene datos binarios, debe utilizarse el token binario Content-Transfer-Encoding. NOTA: La distinción entre los valores de Content-Transfer-Encoding de binario, 8 bits, etc. puede parecer poco importante, ya que todos ellos realmente no significan ninguno - es decir, no ha habido codificación de los datos para el transporte. Sin embargo, el etiquetado claro será de enorme valor para las puertas de enlace entre futuros sistemas de transporte de correo con diferentes capacidades en el transporte de datos que no cumplan con las restricciones del transporte RFC 821. A partir de la publicación de este documento, no hay transportes de Internet estandarizados para los que sea legítimo incluir datos no codificados de 8 bits o binarios en los cuerpos de correo. Por lo tanto, no hay circunstancias en las que el 8bit o binario Content-Transfer-Encoding es realmente legal en Internet. Sin embargo, en el caso de que el transporte de 8 bits o de correo binario se convierta en una realidad en el correo de Internet, o cuando este documento se utiliza junto con cualquier otro mecanismo de transporte de 8 bits o binario, los cuerpos binarios o de 8 bits deberían ser etiquetados Como tal utilizando este mecanismo. NOTA: Los cinco valores definidos para el campo Content-Transfer-Encoding no implican nada sobre el Content-Type que no sea el algoritmo por el que se codificó o los requisitos del sistema de transporte si no se codifican. Los implementadores pueden, si es necesario, definir nuevos valores de Content-Transfer-Encoding, pero deben usar un token x, que es un nombre prefijado por X - para indicar su estado no estándar, p. Content-Transfer-Encoding: x-my-new-encoding. Sin embargo, a diferencia de Content-Types y subtipos, la creación de nuevos valores de Content-Transfer-Encoding es explícita y fuertemente desalentada, ya que parece que dificulta la interoperabilidad con poco beneficio potencial. Su uso está permitido sólo como resultado de un acuerdo entre agentes de usuario cooperantes. Si aparece un campo de encabezado Content-Transfer-Encoding como parte de un encabezado de mensaje, se aplica a todo el cuerpo de ese mensaje. Si un campo de encabezado Content-Transfer-Encoding aparece como parte de los encabezados de las partes del cuerpo, sólo se aplica al cuerpo de esa parte del cuerpo. Si una entidad es de tipo multipart o mensaje, no se permite que Content-Transfer-Encoding tenga ningún valor distinto de un ancho de bit (por ejemplo, 7 bits, 8 bits, etc.) o binario. Debe señalarse que el correo electrónico está orientado a caracteres, de modo que los mecanismos descritos aquí son mecanismos para codificar secuencias de bytes arbitrarias, no flujos de bits. Si se quiere codificar una secuencia de bits a través de uno de estos mecanismos, primero debe convertirse a una secuencia de bytes de 8 bits utilizando el orden de bits estándar de la red (big-endian), en el que los bits anteriores Ordenar bits en un byte. Una secuencia de bits que no termina en un límite de 8 bits debe estar rellenada con ceros. Este documento proporciona un mecanismo para anotar la adición de tal relleno en el caso de la aplicación Content-Type, que tiene un parámetro de relleno. Los mecanismos de codificación definidos aquí codifican explícitamente todos los datos en ASCII. Por ejemplo, supongamos que una entidad tiene campos de encabezado como: Esto debe interpretarse para significar que el cuerpo es una codificación ASCII de base64 de datos que estaba originalmente en ISO-8859-1, y que estará en ese conjunto de caracteres después de la descodificación . Las siguientes secciones definirán los dos mecanismos de codificación estándar. La definición de nuevas codificaciones de contenido-transferencia es explícitamente desalentada y sólo debe ocurrir cuando sea absolutamente necesario. Todo el espacio de nombres de codificación de transferencia de contenido excepto que el comienzo de X - está explícitamente reservado a la IANA para uso futuro. También se desaconsejan explícitamente los acuerdos privados sobre las codificaciones de transferencia de contenido. Ciertos valores de Content-Transfer-Encoding sólo se pueden utilizar en determinados Content-Types. En particular, está expresamente prohibido utilizar cualquier codificación distinta de 7 bits, 8 bits o binarios con cualquier tipo de contenido que incluya recursivamente otros campos de tipo de contenido, especialmente el multipart y el mensaje Content-Types. Todas las codificaciones que se desean para cuerpos de tipo multipart o mensaje deben hacerse en el nivel más interno, mediante la codificación del cuerpo real que necesita ser codificado. NOTA SOBRE CODIFICACIÓN DE RESTRICCIONES: Aunque la prohibición de usar codificaciones de transferencia de contenido en datos de tipo multipart o mensaje puede parecer excesivamente restrictiva, es necesario prevenir codificaciones anidadas, en las cuales los datos se pasan a través de un algoritmo de codificación varias veces y deben ser Decodificado varias veces para ser visualizado correctamente. Las codificaciones anidadas añaden una considerable complejidad a los agentes de usuario: además de los obvios problemas de eficiencia con tales codificaciones múltiples, pueden ocultar la estructura básica de un mensaje. En particular, pueden implicar que varias operaciones de decodificación son necesarias simplemente para averiguar qué tipos de objetos contiene un mensaje. La prohibición de codificaciones anidadas puede complicar el trabajo de ciertas puertas de enlace de correo, pero esto parece menos un problema que el efecto de las codificaciones anidadas en los agentes de usuario. NOTA SOBRE LA RELACIÓN ENTRE EL TIPO DE CONTENIDO Y EL CONTENIDO-TRANSFERENCIA-ENCODIFICACIÓN Puede parecer que el Content-Transfer-Encoding podría inferirse de las características del Content-Type que va a codificarse o, al menos, que ciertas Content-Transfer-Encodings podría ser obligatorio para su uso con tipos de contenido específicos. Hay varias razones por las que este no es el caso. En primer lugar, dado el tipo de transporte utilizado para el correo, algunas codificaciones pueden ser apropiadas para algunas combinaciones Content-Type / transport y no para otras. (Por ejemplo, en un transporte de 8 bits, no se requeriría codificación para el texto en ciertos conjuntos de caracteres, mientras que tales codificaciones son claramente requeridas para SMTP de 7 bits.) En segundo lugar, ciertos tipos de contenido pueden requerir diferentes tipos de codificación de transferencia bajo Circunstancias diferentes. Por ejemplo, muchos cuerpos de PostScript pueden consistir enteramente en líneas cortas de datos de 7 bits y por lo tanto requieren poca o ninguna codificación. Otros cuerpos PostScript (especialmente aquellos que usan el mecanismo de codificación binaria PostScripts de Nivel 2) sólo pueden ser representados razonablemente usando una codificación de transporte binario. Por último, dado que Content-Type está destinado a ser un mecanismo de especificación abierto, la especificación estricta de una asociación entre Content-Types y codificaciones conecta de manera efectiva la especificación de un protocolo de aplicación con un transporte de nivel inferior específico. Esto no es deseable ya que los desarrolladores de un Content-Type no deberían tener en cuenta todos los transportes en uso y cuáles son sus limitaciones. NOTA SOBRE TRADUCCIÓN DE ENCODIFICACIONES Las codificaciones quoted-printable y base64 están diseñadas para que la conversión entre ellas sea posible. El único problema que surge en tal conversión es el manejo de los saltos de línea. Al convertir de quoted-printable a base64 un salto de línea debe convertirse en una secuencia CRLF. De forma similar, una secuencia CRLF en datos base64 debería convertirse en un salto de línea imprimible entre comillas, pero SÓLO al convertir datos de texto. NOTA SOBRE EL MODELO DE CODIFICACIÓN CANÓNICA: Hubo cierta confusión en los borradores anteriores de este memo, en relación con el modelo para cuando los datos de correo electrónico debían ser convertidos a forma canónica y codificados, y en particular cómo afectaría este proceso al tratamiento de CRLFs, La representación de las líneas de nuevo varía mucho de un sistema a otro. Por esta razón, un modelo canónico para la codificación se presenta como Apéndice H. 5.1 Quoted-Printable Content-Transfer-Encoding La codificación Quoted-Printable está destinada a representar datos que en gran medida consta de octetos que corresponden a caracteres imprimibles en el conjunto de caracteres ASCII. Codifica los datos de tal manera que es poco probable que los octetos resultantes sean modificados por el transporte de correo. Si los datos que se codifican son en su mayoría texto ASCII, la forma codificada de los datos sigue siendo en gran parte reconocible por los seres humanos. Un cuerpo que es enteramente ASCII también puede ser codificado en Quoted-Printable para asegurar la integridad de los datos si el mensaje pasa a través de una pasarela de traducción de caracteres y / o línea de envoltura. En esta codificación, los octetos deben ser representados según lo determinado por las siguientes reglas: Regla 1: (Representación general de 8 bits) Cualquier octeto, excepto aquellos que indican una ruptura de línea de acuerdo con la convención de nueva línea de la forma canónica de los datos que se codifican, Puede ser representado por un seguido por una representación hexadecimal de dos dígitos del valor de los octetos. Los dígitos del alfabeto hexadecimal, para este propósito, son 0123456789ABCDEF. Las letras mayúsculas deben usarse al enviar datos hexadecimales, aunque una implementación robusta puede optar por reconocer letras minúsculas al recibirlas. Así, por ejemplo, el valor 12 (alimentación de forma ASCII) puede representarse por 0C, y el valor 61 (ASCII EQUAL SIGN) puede representarse por 3D. Excepto cuando las siguientes reglas permiten una codificación alternativa, esta regla es obligatoria. Regla 2: (Representación literal) Octetos con valores decimales de 33 a 60 inclusive, y 62 a 126, inclusive, PUEDEN ser representados como los caracteres ASCII que corresponden a esos octetos (PUNTO DE EXCLAMACIÓN a través de MENOS, y MAYOR A través de TILDE, respectivamente ). Regla 3: (Espacio blanco) Los octetos con valores de 9 y 32 MAYOS pueden representarse como caracteres ASCII TAB (HT) y SPACE, respectivamente, pero NO DEBEN estar representados al final de una línea codificada. Cualquier carácter TAB (HT) o ESPACIO en una línea codificada DEBE ser seguido en esa línea por un carácter imprimible. En particular, al final de una línea codificada, que indica una rotura de línea suave (véase la regla 5), ​​puede seguir uno o más caracteres TAB (HT) o SPACE. Se sigue que un octeto con un valor 9 o 32 que aparece al final de una línea codificada debe ser representado de acuerdo con la Regla 1. Esta regla es necesaria porque algunos MTA (Message Transport Agents, programas que transportan mensajes de un usuario a otro o realizan Una parte de estas transferencias) se sabe que las líneas de almohadilla de texto con ESPACIOS, y otros se sabe para eliminar los caracteres de espacio en blanco desde el final de una línea. Por lo tanto, al decodificar un cuerpo Citado-Imprimible, cualquier espacio en blanco en la línea debe ser borrado, ya que necesariamente habrá sido agregado por agentes de transporte intermedios. Regla 4 (salto de línea) Una ruptura de línea en una parte de cuerpo de texto, independientemente de cuál sea su representación después de la representación canónica de los datos que se codifican, debe estar representada por un salto de línea (RFC 822), que es una secuencia CRLF, en La codificación Quoted-Printable. Si se permite que CRs aislados y LFs o LF CR y CR LF aparezcan en datos binarios de acuerdo con la forma canónica, deben ser representados usando las anotaciones 0D, 0A, 0A0D y 0D0A respectivamente. Tenga en cuenta que muchas implementaciones pueden elegir codificar la representación local de varios tipos de contenido directamente. En particular, esto puede aplicarse a material de texto sin formato en sistemas que utilizan convenciones de nueva línea distintas de los delimitadores CRLF. Tal implementación es permisible, pero la generación de saltos de línea debe generalizarse para tener en cuenta el caso en que se usan representaciones alternativas de secuencias de nueva línea. Regla 5 (Soft Line Breaks) La codificación Quoted-Printable REQUIERE que las líneas codificadas no tengan más de 76 caracteres. Si las líneas más largas deben codificarse con la codificación Quoted-Printable, se deben usar pausas de líneas suaves. Un signo igual como el último carácter en una línea codificada indica una ruptura de línea no significativa (suave) en el texto codificado. Por lo tanto, si la forma en bruto de la línea es una línea unencoded única que dice: Esto se puede representar, en la codificación Quoted-Printable, ya que proporciona un mecanismo con el que las líneas largas se codifican de tal manera que sea restaurado por el usuario agente. El límite de 76 caracteres no cuenta el CRLF al final, pero cuenta todos los demás caracteres, incluidos los signos iguales. Dado que el carácter de guión (-) se representa como sí mismo en la codificación Quoted-Printable, debe tenerse cuidado al encapsular un cuerpo codificado imprimible en una entidad multiparte para asegurar que el límite de encapsulación no aparezca en ninguna parte del cuerpo codificado . (Una buena estrategia es elegir un límite que incluya una secuencia de caracteres tal como la que nunca puede aparecer en un cuerpo imprimible entre comillas.) Véase la definición de mensajes de varias partes más adelante en este documento.) NOTA: La codificación quoted-printable representa algo de un Compromiso entre legibilidad y fiabilidad en el transporte. Los cuerpos codificados con la codificación quoted-printable funcionarán de forma fiable sobre la mayoría de las pasarelas de correo, pero pueden no funcionar perfectamente a través de algunas pasarelas, especialmente aquellas que implican la traducción a EBCDIC. (En teoría, una puerta de enlace EBCDIC podría decodificar un cuerpo imprimible entre comillas y volver a codificarlo utilizando base64, pero tales gateways aún no existen). Un nivel más alto de confianza es ofrecido por la base64 Content-Transfer-Encoding. Una forma de obtener un transporte razonablemente fiable a través de puertas de enlace EBCDIC es también citar los caracteres ASCII según la regla 1. Consulte el Apéndice B para obtener más información. Dado que se suele suponer que los datos imprimibles entre comillas están orientados a líneas, es de esperar que las interrupciones entre las líneas de los datos imprimibles citados puedan alterarse en el transporte, de la misma manera que el correo de texto sin formato siempre se ha alterado en el correo de Internet Cuando se pasa entre sistemas con diferentes convenciones de nueva línea. Si es probable que tales alteraciones constituyan una corrupción de los datos, es probablemente más sensato usar la codificación base64 en lugar de la codificación quoted-printable. 5.2 Base64 Content-Transfer-Encoding El Base64 Content-Transfer-Encoding está diseñado para representar secuencias arbitrarias de octetos en una forma que no es humanamente legible. Los algoritmos de codificación y decodificación son simples, pero los datos codificados son consistentemente sólo un 33 por ciento más grandes que los datos no codificados. Esta codificación se basa en la utilizada en aplicaciones de correo mejorado de privacidad, como se define en RFC 1113. La codificación base64 se adapta de RFC 1113, con un cambio: base64 elimina el mecanismo de texto claro incrustado. Se utiliza un subconjunto de 65 caracteres de US-ASCII que permite representar 6 bits por carácter imprimible. NOTA: Este subconjunto tiene la importante propiedad de que está representado de forma idéntica en todas las versiones de ISO 646, incluyendo el ASCII de los Estados Unidos, y todos los caracteres del subconjunto también están representados Idéntica en todas las versiones de EBCDIC. Otras codificaciones populares, como la codificación utilizada por la utilidad UUENCODE y la codificación base85 especificada como parte del nivel 2 PostScript, no comparten estas propiedades y, por lo tanto, no cumplen con los requisitos de portabilidad que debe cumplir una codificación de transporte binario para correo. El proceso de codificación representa grupos de 24 bits de bits de entrada como cadenas de salida de 4 caracteres codificados. Procediendo de izquierda a derecha, un grupo de entrada de 24 bits se forma concatenando 3 grupos de entrada de 8 bits. Estos 24 bits se tratan entonces como 4 grupos de 6 bits concatenados, cada uno de los cuales se traduce en un solo dígito en el alfabeto base64. Cuando se codifica un flujo de bits a través de la codificación base64, se debe presumir que el tren de bits se ordena primero con el bit de mayor importancia. Es decir, el primer bit en el flujo será el bit de orden superior en el primer byte, y el octavo bit será el bit de orden inferior en el primer byte, y así sucesivamente. Cada grupo de 6 bits se utiliza como índice en una matriz de 64 caracteres imprimibles. El carácter al que hace referencia el índice se coloca en la cadena de salida. Estos caracteres, identificados en la Tabla 1, se seleccionan de manera que sean universalmente representables y el conjunto excluye caracteres con particular significado para SMTP (por ejemplo, CR, LF) ya los límites de encapsulación definidos en este documento (por ejemplo, -) . Tabla 1: El alfabeto Base64 El flujo de salida (bytes codificados) debe estar representado en líneas de no más de 76 caracteres cada una. Todos los saltos de línea u otros caracteres no encontrados en la Tabla 1 deben ser ignorados por el software de decodificación. En los datos de base64, los caracteres distintos de los de la Tabla 1, los saltos de línea y otros espacios en blanco indican probablemente un error de transmisión, sobre el cual un mensaje de advertencia o incluso un rechazo de mensaje podría ser apropiado bajo ciertas circunstancias. El procesamiento especial se realiza si hay menos de 24 bits al final de los datos que se codifican. Un quantum de codificación completa se completa siempre al final de un cuerpo. Cuando hay menos de 24 bits de entrada disponibles en un grupo de entrada, se añaden bits cero (a la derecha) para formar un número integral de grupos de 6 bits. Las posiciones de caracteres de salida que no se requieren para representar datos de entrada reales se establecen en el carácter. Puesto que toda la entrada de base64 es un número entero de octetos, sólo pueden surgir los siguientes casos: (1) el quantum final de entrada de codificación es un múltiplo integral de 24 bits aquí, la unidad final de salida codificada será un múltiplo integral de 4 caracteres (2) el quantum final de la entrada de codificación es exactamente 8 bits aquí, la unidad final de salida codificada será dos caracteres seguidos de dos caracteres de relleno, o (3) el quantum final de la entrada de codificación es exactamente 16 bits aquí , La unidad final de salida codificada será de tres caracteres seguido de un carácter de relleno. Se debe tener cuidado de utilizar los octetos adecuados para los saltos de línea si la codificación base64 se aplica directamente al material de texto que no se ha convertido en forma canónica. En particular, las rupturas de línea de texto deben convertirse en secuencias CRLF antes de la codificación base64. Lo importante es notar que esto puede hacerse directamente por el codificador en vez de en un paso de canonización previo en algunas implementaciones. NOTA: No hay necesidad de preocuparse por citar límites de encapsulación aparentes dentro de las partes codificadas en base64 de entidades de varias partes porque no se utilizan caracteres de guión en la codificación base64. El campo Content-Transfer-Encoding Header 5. El campo Content-Transfer-Encoding Header Muchos tipos de contenido que podrían ser transportados por correo electrónico son representados en su formato natural como caracteres de 8 bits o datos binarios. Tales datos no pueden ser transmitidos a través de algunos protocolos de transporte. Por ejemplo, el RFC 821 restringe los mensajes de correo a datos de 7 bits US-ASCII con líneas de no más de 1000 caracteres. Por lo tanto, es necesario definir un mecanismo estándar para recodificar tales datos en un formato de línea corta de 7 bits. Este documento especifica que dichas codificaciones serán indicadas por un nuevo campo de encabezado Content-Transfer-Encoding. El campo Content-Transfer-Encoding se utiliza para indicar el tipo de transformación que se ha utilizado para representar el cuerpo de una manera aceptable para el transporte. A diferencia de los tipos de contenido, una proliferación de valores de Content-Transfer-Encoding es indeseable e innecesaria. Sin embargo, el establecimiento de un único mecanismo de Content-Transfer-Encoding no parece posible. Hay una compensación entre el deseo de una codificación compacta y eficiente de datos en gran parte binarios y el deseo de una codificación legible de datos que es mayormente, pero no enteramente, datos de 7 bits. Por esta razón, al menos dos mecanismos de codificación son necesarios: una codificación legible y una codificación densa. El campo Content-Transfer-Encoding está diseñado para especificar una asignación invertible entre la representación nativa de un tipo de datos y una representación que se puede intercambiar fácilmente utilizando protocolos de transporte de correo de 7 bits, como los definidos por RFC 821 (SMTP). Este campo no ha sido definido por ninguna norma anterior. El valor fields es un token único que especifica el tipo de codificación, como se enumeran a continuación. Formalmente: estos valores no distinguen entre mayúsculas y minúsculas. Es decir, Base64 y BASE64 y bAsE64 son todos equivalentes. Un tipo de codificación de 7BIT requiere que el cuerpo ya esté en una representación lista para correo de siete bits. Este es el valor predeterminado, es decir, Content-Transfer-Encoding: 7BIT se asume si el campo de encabezado Content-Transfer-Encoding no está presente. Los valores 8bit, 7bit y binario significan que la codificación NO se ha realizado. Sin embargo, son potencialmente útiles como indicaciones del tipo de datos contenidos en el objeto y, por tanto, del tipo de codificación que puede ser necesario realizar para la transmisión en un sistema de transporte dado. En particular: La diferencia entre 8 bits (o cualquier otro token de bit de bits concebible) y el token binario es que binario no requiere adherencia a ningún límite de longitud de línea oa la semántica de CRLF de SMTP, mientras que los tokens de anchura de bit requieren tal adherencia. Si el cuerpo contiene datos en cualquier ancho de bit distinto de 7 bits, debe utilizarse el token de codificación de transferencia de contenido de ancho de bit apropiado (por ejemplo, 8 bits para datos no codificados de 8 bits de ancho). Si el cuerpo contiene datos binarios, debe utilizarse el token binario Content-Transfer-Encoding. Los implementadores pueden, si es necesario, definir nuevos valores de Content-Transfer-Encoding, pero deben usar un token x, que es un nombre prefijado por X - para indicar su estado no estándar, p. Content-Transfer-Encoding: x-my-new-encoding. Sin embargo, a diferencia de Content-Types y subtipos, la creación de nuevos valores de Content-Transfer-Encoding es explícita y fuertemente desalentada, ya que parece que dificulta la interoperabilidad con poco beneficio potencial. Su uso está permitido sólo como resultado de un acuerdo entre agentes de usuario cooperantes. Si aparece un campo de encabezado Content-Transfer-Encoding como parte de un encabezado de mensaje, se aplica a todo el cuerpo de ese mensaje. Si un campo de encabezado Content-Transfer-Encoding aparece como parte de los encabezados de las partes del cuerpo, sólo se aplica al cuerpo de esa parte del cuerpo. Si una entidad es de tipo multipart o mensaje, no se permite que Content-Transfer-Encoding tenga ningún valor distinto de un ancho de bit (por ejemplo, 7 bits, 8 bits, etc.) o binario. Debe señalarse que el correo electrónico está orientado a los caracteres, por lo que los mecanismos descritos aquí son mecanismos para codificar secuencias de octetos arbitrarias, no flujos de bits. Si se quiere codificar una secuencia de bits a través de uno de estos mecanismos, primero debe convertirse a una secuencia de bytes de 8 bits utilizando el orden de bits estándar de la red (big-endian), en el que los bits anteriores Ordenar bits en un byte. Una secuencia de bits que no termina en un límite de 8 bits debe estar rellenada con ceros. Este documento proporciona un mecanismo para anotar la adición de tal relleno en el caso de la aplicación Content-Type, que tiene un parámetro de relleno. Los mecanismos de codificación definidos aquí codifican explícitamente todos los datos en ASCII. Por ejemplo, supongamos que una entidad tiene campos de encabezado como: Esto debe interpretarse para significar que el cuerpo es una codificación ASCII de base64 de datos que estaba originalmente en ISO-8859-1, y que estará en ese conjunto de caracteres nuevamente después de decodificar . Las siguientes secciones definirán los dos mecanismos de codificación estándar. La definición de nuevas codificaciones de transferencia de contenido es explícitamente desalentada y sólo debe ocurrir cuando sea absolutamente necesario. Todo el espacio de nombres de codificación de transferencia de contenido excepto que el comienzo de X - está explícitamente reservado a la IANA para uso futuro. También se desaconsejan explícitamente los acuerdos privados sobre las codificaciones de transferencia de contenido. Ciertos valores de Content-Transfer-Encoding sólo se pueden utilizar en determinados Content-Types. En particular, está expresamente prohibido utilizar cualquier codificación distinta de 7 bits, 8 bits o binaria con cualquier tipo de contenido que incluya recursivamente otros campos de tipo de contenido, especialmente el multipart y el mensaje Content-Types. All encodings that are desired for bodies of type multipart or message must be done at the innermost level, by encoding the actual body that needs to be encoded.

Comments

Popular posts from this blog

Las Acciones De Swing Trading Señales

Proyecto En El Mercado De Divisas En La India

Forex Cuadrado