example - HTTP Chunked Encoding. Necesita un ejemplo de ''Trailer'' mencionado en SPEC
transfer-encoding chunked example (3)
Estoy escribiendo un analizador HTTP para un proxy transparente. Lo que me sorprende es el Trailer:
mencionado en las especificaciones de Transfer-Encoding: chunked
. Cómo se ve?
Normalmente, un HTTP fragmentado termina de esta manera.
0/r/n
/r/n
Estoy confundido sobre cómo detectar el final del fragmento si hay algún tipo de encabezados finales ...
ACTUALIZACIÓN: Creo que una simple /r/n/r/n
es decir, una línea vacía es suficiente para detectar el final de los encabezados finales ... ¿Es eso correcto?
0 / r / n
SomeAfterHeader: TheData / r / n
/ r / n
En otras palabras, es suficiente buscar una /r/n/r/n
, en términos simples: una línea en blanco . Para detectar el final de una transmisión fragmentada. Pero es muy importante que cada parte se lea antes de hacer esto. Debido a que los datos fragmentados en sí mismos pueden contener líneas en blanco que se detectarán erróneamente como el final de la secuencia.
A continuación se muestra una copia de un ejemplo de avance que copié del sitio de la Guía TCP / IP .
Como podemos ver, si queremos usar el encabezado del trailer, necesitamos agregar un campo de encabezado "Trailer: header_name" con un nombre de encabezado y luego agregar la entidad del encabezado del trailer después del área del cuerpo fragmentado.
Podemos agregar 0 o más encabezados de tráiler en un cuerpo HTTP según el RFC. La Sección 4.1.2 de RFC7230 prohíbe el uso de los siguientes encabezados en el área de encabezado del remolque:
Un remitente NO DEBE generar un tráiler que contenga un campo necesario para el enmarcado de mensajes (por ejemplo, Transferencia-Codificación y Contenido-Longitud), enrutamiento (por ejemplo, Host), modificadores de solicitud (por ejemplo, controles y condicionales en la Sección 5 de RFC7231 ), autenticación (por ejemplo, consulte RFC7235 y RFC6265 ), datos de control de respuesta (por ejemplo, consulte la Sección 7.1 de RFC7231 ), o determine cómo procesar la carga útil (por ejemplo, Codificación de contenido, Tipo de contenido, Rango de contenido y Remolque).
Esto significa que podemos usar otros encabezados estándar y encabezados personalizados en el área del encabezado del remolque.
Respecto al trailer:
La lista de encabezados finales se debe especificar en el encabezado del Remolque, como se indica.
El BNF en la Sección 14.40 de RFC 2616 es este:
Trailer = "Trailer" ":" 1#field-name
Gourley y Totty dan este ejemplo:
Trailer: Content-Length
(Es extraño que den este ejemplo, ya que Content-Length está explícitamente prohibido ser un encabezado final en 14.40).
Shiflett da este ejemplo:
Trailer: Date
Con respecto al final del mensaje con encabezados finales:
El BNF en la Sección 3.6.1 de RFC 2616 es lo que está buscando. Aquí está la parte:
Chunked-Body = *chunk
last-chunk
trailer
CRLF
last-chunk = 1*("0") [ chunk-extension ] CRLF
trailer = *(entity-header CRLF)
Por lo tanto, el último fragmento y los dos encabezados finales podrían tener este aspecto:
0<CRLF>
Date:Sun, 06 Nov 1994 08:49:37 GMT<CRLF>
Content-MD5:1B2M2Y8AsgTpgAmY7PhCfg==<CRLF>
<CRLF>