2010-04-19 16 views
7

Al usar HTTP/1.1 Pipelining ¿qué dice la norma sobre la emisión de varias solicitudes sin esperar a que se complete cada solicitud? ¿Qué hacen los servidores en la práctica?Emitir solicitudes múltiples utilizando HTTP/1.1 Pipelining

Lo pido porque una vez intenté escribir un cliente que emitiría un lote de solicitudes de GET para varios archivos y recuerde haber recibido errores. No estaba seguro de si se debió a que emití incorrectamente el GET o necesité esperar a que cada solicitud individual finalizara antes de emitir el siguiente GET.

Respuesta

7

Pipelining es simplemente eso: tener más de una solicitud "en vuelo" en una sola conexión.

En Internet abierta, la canalización no es muy común, porque un pocos servidores intermediarios y no hacer las cosas bien, y las consecuencias de echar a perder la canalización puede ser grave (por ejemplo, mezclando las respuestas a dos diferentes usuarios).

Tenga en cuenta que solo HTTP/1.1 admite canalización; si tiene un servidor HTTP/1.0, o un proxy 1.0 en el medio, probablemente no funcionará.

Además, la canalización solo se puede utilizar en métodos "idempotentes" como GET y HEAD; no está permitido por la POST, etc.

Ver: http://tools.ietf.org/html/draft-ietf-httpbis-p1-messaging-09#section-7.1.2.2

+0

@ Marcos Nottingham: Eso es interesante, por lo que las conexiones persistentes por sí mismos no son considerados canalización - sólo la emisión de lotes de múltiples solicitudes se consideran la canalización? –

+0

Sí. Las conexiones persistentes se pueden usar en HTTP/10, con Connection: Keep-Alive (aunque hay algunos pequeños problemas de interoperabilidad allí). –

Cuestiones relacionadas