usuario useragent tienen test que parse navegador los función detectar chrome cadena agentes agente http-headers sample chunked-encoding http-1.1 trailing

http headers - useragent - ¿Los navegadores son compatibles con los remolques enviados en respuestas de codificación fragmentadas?



test my useragent (3)

HTTP/1.1 especifica que una respuesta enviada como Transfer-Encoding: chunked puede incluir remolques opcionales (es decir, lo que normalmente se enviaría como encabezados, pero por cualquier motivo no se puede calcular antes del contenido, por lo que se pueden adjuntar hasta el final) ), por ejemplo:

Solicitud:

GET /trailers.html HTTP/1.1 TE: chunked, trailers

Respuesta:

HTTP/1.1 200 OK Transfer-Encoding: chunked Trailer: My-Test-Trailer D/r/n All your base/r/n B/r/n; are belong/r/n 6/r/n to us/r/n 0/r/n My-Test-Trailer: something/r/n /r/n

Esta solicitud especifica en el encabezado TE que está esperando una respuesta chunked , y buscará trailers después de la porción final.

La respuesta especifica en el encabezado del Trailer la lista de remolques que enviará (en este caso, solo uno: My-Test-Trailer )

Cada uno de los trozos se envían como:

  • tamaño del fragmento en hexadecimal ( D = 13), seguido de un CRLF
  • Chunk Data ( All your base ), seguido de un CRLF

Un fragmento de tamaño cero ( 0/r/n ) indica el final del cuerpo.

Luego se especifican los tráilers ( My-Test-Trailer: something/r/n ), seguidos de un CRLF final.

Ahora, de todo lo que he leído hasta ahora, los remolques rara vez se usan. La mayoría de las discusiones here y en otros lugares sobre los remolques suelen comenzar con "pero, ¿por qué quiere usar remolques de todos modos?".

Dejando de lado la pregunta de por qué, por curiosidad, he estado intentando simular un intercambio de solicitud / respuesta HTTP que utiliza remolques; pero hasta ahora no he podido hacer que funcione, y no estoy seguro de si hay algún error con la respuesta que estoy generando, o si (como algunos han sugerido) simplemente no hay clientes que busquen encabezados finales. .

Los clientes que he probado incluyen: curl, wfetch, Chrome + jQuery.

En todos los casos, el cliente recibe y reconstruye correctamente la respuesta fragmentada ( All your base are belong to us ); y puedo ver en los encabezados de respuesta que se está enviando el Trailer: My-Test-Trailer ; pero no veo My-Test-Trailier: something devolvió en los encabezados de respuesta o en cualquier otro lugar. ¿No está claro si un encabezado final como este debería aparecer en el cliente como un encabezado de respuesta normal, después de que se haya recibido la respuesta completa y se haya cerrado la conexión?

Curiosamente, los registros de cambios de curvatura parecen sugerir que la curvatura admite remolques opcionales, y que la curvatura procesará cualquier remolque que encuentre en la secuencia de encabezado normal .

Entonces, ¿alguien sabe?

  • de una URL válida a la que podría hacer ping, que envía tráilers en una respuesta fragmentada? (para que pueda confirmar si es solo mi respuesta de prueba que no funciona); y
  • ¿Qué clientes son conocidos por admitir (y acceder / mostrar) los remolques enviados por el servidor?

Desde este compromiso , el cliente Jodd HTTP Java soporta cabeceras de remolque.

En la primera pregunta, todavía no he encontrado ninguna respuesta en vivo que los use;)


Hace más de 5 años que formulo esta pregunta, ahora puedo contestarla definitivamente.

Mozilla acaba de anunciar que admitirá el nuevo campo de Server-Timing como un encabezado final HTTP (su primer soporte para remolques).

https://bugzilla.mozilla.org/show_bug.cgi?id=1413999

Sin embargo, lo que es más importante, confirman que se incluirá en la lista blanca de modo que Server-Timing sea ​​el único valor de soporte (el énfasis es mío):

Server-Timing es un tráiler HTTP, no un encabezado. : mcmanus me dice que actualmente analizamos remolques, pero luego los desechamos en silencio. No queremos cambiar ese comportamiento en general (no queremos alentar a los remolques), así que querremos incluir en la lista blanca el trailer de Server-Timing , almacenarlo en algún lugar (probablemente incluso un encabezado mServerTiming funcionará por ahora, ya que es el único tráiler que admitimos) y luego lo hace disponible a través de una nueva llamada a channel.getTrailers ().

Así que supongo que eso lo confirma de una vez por todas: los encabezados finales no son compatibles (y es probable que nunca lo sean en un sentido general) por parte de Moz, y presumiblemente la misma postura es adoptada por todos los demás proveedores de navegadores.


No hay navegadores comunes compatibles con los tráilers HTTP / 1.1. Mire la columna "Encabezados en el tráiler" en la pestaña "Red" de browserscope .

  • Chrome: No, y no arreglará ( bug ). Soporta remolques H / 2 ( bug ).
  • Firefox: No, y no veo un ticket en bugzilla para eso. Parece que apoya H / 2.
  • IE: No
  • Edge: No
  • Safari: No
  • Opera: solo versiones anteriores (v10 - 12, eliminadas en 14)

Como ha descubierto, una serie de clientes que no son navegadores lo admiten.