http browser race-condition keep-alive

¿Cómo manejan los navegadores la condición de raza keepalive HTTP?



browser race-condition (1)

Existe una condición de carrera conocida en el mecanismo keepalive de HTTP:

Según tengo entendido, necesito que mi cliente HTTP tenga un tiempo de espera más corto que mi servidor HTTP o vuelva a intentarlo cuando obtenga TCP-FIN o TCP-RST.

Mi pregunta es, ¿cómo manejan esta condición de carrera los navegadores web actuales que usan la función keepalive de HTTP ? ¿Intentan de nuevo?

Estaré contento por las referencias, una búsqueda en Google no ha encontrado nada.


De acuerdo con el RFC , en estos casos, un servidor debe responder con un código de error 408, indicando al cliente que la conexión ya ha sido cerrada por su lado. Como afirma el RFC:

Si el cliente tiene una solicitud pendiente en tránsito, el cliente PUEDE repetir esa solicitud en una nueva conexión.

Esto significa que depende del cliente (también conocido como cada navegador) decidir cómo se manejará una respuesta 408. Hay 2 alternativas:

  • maneje con elegancia: vuelva a intentar las solicitudes restantes en una nueva conexión de forma automática, de modo que el usuario permanezca completamente ajeno a la falla subyacente que sucedió
  • fail-fast: muestra al usuario una falla con el mensaje de error 408 apropiado

Por ejemplo, parece que Chrome en el pasado estaba siguiendo el segundo enfoque hasta un punto en el que las personas comenzaron a considerar esto como un comportamiento "defectuoso" y cambiaron al primero. here puede encontrar el hilo de error relacionado con el error de Chromium y el código asociado here .

Nota: Como puede leer en los correos electrónicos finales en el hilo enlazado, Chrome realiza estos reintentos, solo cuando algunas solicitudes han tenido éxito a este respecto. Como resultado, si intenta reproducir eso con una sola solicitud, devolviendo una respuesta 408, notará que Chrome probablemente no volverá a intentarlo en ese caso.