Comparando HTTP y FTP para transferir archivos

¿Cuáles son las ventajas (o limitaciones) de una sobre la otra para transferir archivos a través de Internet?

(Estoy al tanto de las formas seguras de ambos protocolos. Me gustaría escuchar comparaciones a través de experiencias personales en términos de rendimiento, confiabilidad, limitaciones de tamaño de archivo, etc.)

Aquí hay una comparación de rendimiento de los dos. HTTP es más receptivo para la solicitud-respuesta de archivos pequeños, pero FTP puede ser mejor para archivos grandes si está sintonizado correctamente. FTP solía ser considerado generalmente más rápido. FTP requiere un canal de control y se debe mantener el estado además del estado TCP pero HTTP no. Hay 6 transferencias de paquetes antes de que los datos comiencen a transferirse en FTP, pero solo 4 en HTTP.

Creo que una capa TCP ajustada correctamente tendría más efecto sobre la velocidad que la diferencia entre los protocolos de capa de aplicación. The Sun Blueprint Understanding Tuning TCP tiene detalles.

Aquí hay otra buena comparación de las características individuales de cada protocolo.

Muchos cortafuegos abandonan las conexiones salientes que no están en los puertos 80 o 443 (http y https); algunos incluso lanzan conexiones a esos puertos que no son HTTP (S). FTP puede o no estar permitido, para no hablar de los modos activo / PASV.

Además, HTTP / 1.1 permite solicitudes parciales mucho mejores (“solo envía desde el byte 123456 hasta el final del archivo”), solicitudes condicionales y almacenamiento en caché (“solo envía si el contenido ha cambiado / si la fecha de última modificación ha cambiado”) y compresión de contenido (gzip).

HTTP es mucho más fácil de usar a través de un proxy.

A partir de mi evidencia anecdótica, HTTP es más fácil de hacer el trabajo con conexiones caídas / lentas / escamosas; por ejemplo, no es necesario para (re) establecer una sesión de inicio de sesión antes de (re) iniciar la transferencia.

OTOH, HTTP es sin estado, por lo que tendrías que hacer autenticación y crear un rastro de “quién hizo qué y cuándo”.

La única diferencia en velocidad que he notado es la transferencia de muchos archivos pequeños: HTTP con pipelining es más rápido (reduce los viajes de ida y vuelta, especialmente en redes de alta latencia).

Tenga en cuenta que HTTP / 2 ofrece incluso más optimizaciones, mientras que el protocolo FTP no ha visto ninguna actualización durante décadas (e incluso las extensiones de FTP tienen una captación insignificante por parte de los usuarios). Entonces, a menos que esté transfiriendo archivos a través de una máquina del tiempo, parece que HTTP ha ganado.

(Tangencialmente: hay protocolos que son más adecuados para la transferencia de archivos, como rsync o BitTorrent, pero que no tienen tanta atención, mientras que HTTP es Everywhere ™)

Acabo de comparar una transferencia de archivos en FTP y HTTP:

  • más de dos muy buenas conexiones de servidor
  • usando el mismo archivo .zip de 1GB
  • bajo las mismas condiciones de red (probadas una después de la otra)

El resultado:

  • usando FTP: 6 minutos
  • usando HTTP: 4 minutos
  • utilizando un software de descarga http simultáneo ( fdm ): 1 minuto

Entonces, básicamente bajo una situación de “vida real”:

1) HTTP es más rápido que FTP al descargar un archivo grande.

2) HTTP puede usar la descarga de fragmentos paralelos, lo que lo hace 6 veces más rápido que FTP dependiendo de las condiciones de la red.

Una consideración es que FTP puede usar puertos no estándar, lo que puede dificultar la obtención de cortafuegos (especialmente si usa SSL). HTTP generalmente está en un puerto conocido, por lo que esto rara vez es un problema.

Si decides usar FTP, asegúrate de leer sobre FTP activo y pasivo .

En términos de rendimiento, al final del día ambos lanzan archivos directamente hacia abajo en las conexiones TCP, por lo que deberían ser más o menos lo mismo.

Ambos usan TCP como protocolo de transporte, pero HTTP usa una conexión persistente, lo que mejora el rendimiento del TCP.

Intereting Posts