2 votos

Stock Browser dividiendo las peticiones HTTP POST en segmentos TCP separados

Actualmente estoy probando diferentes navegadores y dispositivos para comprobar la compatibilidad con una interfaz web que se ha desarrollado. Nos hemos dado cuenta de que tenemos un problema con el código que ya está en producción. El fallo se produce porque cualquier solicitud HTTP POST enviada desde el navegador Android (tanto en un Galaxy Nexus (que ejecuta JB) como en un Galaxy Tab (que ejecuta ICS)) se divide en dos segmentos TCP en el límite de las cabeceras HTTP y los datos HTTP POST.

Curiosamente, Chrome para Android no muestra este mismo comportamiento, sino que toda la solicitud se envía como un solo paquete.

No estamos ni siquiera cerca de alcanzar la MTU, así que eso no es un problema.

Mis preguntas son:

  1. ¿Hay alguna configuración que se pueda cambiar para evitar esto?
  2. Sé que tanto el navegador integrado de Android como Chrome utilizan Webkit, que tenía la impresión de que estaba integrado en el sistema operativo Android, así que ¿por qué el comportamiento diferente entre los navegadores?
  3. Por último, ¿qué se gana o qué se pretende con esto?

1voto

sarego Puntos 1150

El navegador no controla directamente eso; es la elección del kernel, ya que el kernel es donde vive la implementación de TCP. Sin embargo, una forma en la que la aplicación puede influir es estableciendo el parámetro TCP_NODELAY en la toma de corriente, que solicita que el kernel desactive Algoritmo de Nagle y enviar cada trozo de datos lo antes posible.

Esto puede ser una optimización: dado que muchas peticiones HTTP sólo contienen cabeceras y ningún cuerpo, es mejor para el núcleo enviar un paquete con las cabeceras inmediatamente, en lugar de esperar un poco para ver si el navegador produce más datos que puedan caber en el mismo paquete.

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X