2009-02-06 6 views

Respuesta

8

Si está diseñando su propio campo de extensión personalizado, puede usar BASE64 o imprimible con comillas para escapar (y deshacer) el valor.

+0

+1 - significa que no tiene que preocuparse por caracteres fuera de límites, qué codificación de caracteres está en uso, etc. Las formas nativas de encapsular estos RFC822 son horribles, frágiles y, por lo general, no funcionarán. HTTP. – bobince

1

Si se trata de un campo personalizado, la forma en que se puede escapar depende completamente de cómo la aplicación seleccionada lo vaya a analizar. Si esto es un poco más de lo que creó, podría quedarse con la codificación URL ya que es bastante probado y muchos lenguajes tienen métodos de codificación/decodificación integrados para que su aplicación web pueda codificarlo y conectarlo (o lo que sea que esté trabajando en él).) lo decodificaría.

3

Según RFC2616 4.2 Message Headers: -

campos de cabecera se puede extender más de múltiples líneas precediendo cada línea adicional con al menos un SP o HT.

Supongo que SP significa un carácter de espacio y HT significa un carácter de tabulación dura.

+2

No espere que la nueva línea salga en la versión analizada que su aplicación pueda obtener sin embargo; este mecanismo existe históricamente desde RFC822 solo para doblar líneas de cabecera largas en 80 caracteres. – bobince

+0

@bobince, este tipo de reglas divertidas realmente deberían ser eliminadas. Ellos complican las cosas sin una buena razón. – Pacerier

+1

@Pacerier: de acuerdo, hay demasiadas pequeñas arrugas divertidas donde HTTP no está claro y los encabezados se analizan de forma inconsistente: la falta de correspondencia en la interpretación entre los componentes puede causar problemas de seguridad. Pero ya es demasiado tarde para hacer algo al respecto: la sintaxis del encabezado HTTP es insalvable, todo lo que podemos esperar es reemplazarlo por algo mejor, definido en HTTP 2.0. – bobince

5

La idea es que HTTP es ASCII - sólo y saltos de línea y tales están no pueden. Si tanto el emisor como el receptor pueden interpretar SU codificación, puede codificar lo que quiera, como quiera. Así es como se manejan los nombres internacionales de DNS con el encabezado Host (se llama PUNYCODE).

La respuesta breve es: no, a menos que controle el emisor y el receptor.

3

La respuesta real a esta pregunta es que no hay un estándar para codificar saltos de línea.

Puede usar cualquier Binary-to-text encoding como URL-Encoding o Base64, pero obviamente eso solo funcionará si tanto el emisor como el receptor implementan el mismo método.


RFC 2616 permitió a 'doblar' valores (es decir envoltura) de cabecera a través de múltiples líneas, pero los saltos de línea fueron tratados como un único carácter de espacio y no forma parte del valor del campo analizado.

Sin embargo, que la especificación se ha quedado obsoletos por RFC 7230 que prohíbe plegables:

Históricamente, los valores de campo de encabezamiento HTTP podría extenderse a través de múltiples líneas precediendo cada línea adicional con al menos un espacio o pestaña horizontal (obs-fold).
Esta especificación desaprueba tal plegado de línea excepto dentro del tipo de medio message/http(Section 8.3.1).
Un remitente NO DEBE generar un mensaje que incluye la línea de plegado

Un estándar para saltos de línea en los valores de campo de encabezado HTTP no es - y nunca fue - establecido.

Cuestiones relacionadas