Comparación de HTTP y FTP para transferir archivos
125
¿Cuáles son las ventajas (o limitaciones) de uno sobre el otro para transferir archivos a través de Internet?
(Conozco 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 responde mejor a la solicitud-respuesta de archivos pequeños, pero FTP puede ser mejor para archivos grandes si se ajusta correctamente. FTP solía considerarse generalmente más rápido. FTP requiere que se mantenga un canal de control y un estado además del estado de 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 sintonizada correctamente tendría más efecto en la velocidad que la diferencia entre los protocolos de la capa de aplicación. Sun Blueprint Understanding Tuning TCP tiene detalles.
Aquí hay otra buena comparación de las características individuales de cada protocolo.
+1 buena respuesta. Creo que el día de FTP ya pasó y ya no tiene mucha relevancia. También es un cerdo absoluto para implementar.
skaffman
77
¿Qué tamaño se entiende por archivos "pequeños" o "grandes"?
Urbycoz
El enlace de comparación de rendimiento apunta a un análisis de las ganancias esperadas de la implementación de P-HTTP, T / TCP y S-TCB. En ningún lugar menciona FTP. Además, el enlace sintonizado correctamente está roto.
Trisped
@Trisped, ¿leíste el enlace de comparación de rendimiento? Hay 12 referencias a FTP y la primera sección dice "El protocolo HTTP fue desarrollado originalmente para reducir las ineficiencias del FTP ..." y luego continúa explicando. También actualicé el enlace "Comprensión del ajuste TCP" ... parece que Oracle tiró todos los viejos documentos de Sun Blueprints.
John Ellinwood el
2
16 de agosto de 1996 ... ¿en serio? Incluso en su respuesta de 2009, no podría esperar que esto sea representativo del estado actual de las cosas. -1
user541686
29
Acabo de comparar una transferencia de archivos a través de FTP y HTTP:
sobre dos muy buenas conexiones de servidor
usando el mismo archivo .zip de 1GB
bajo las mismas condiciones de red (probado uno tras otro)
El resultado:
usando FTP: 6 minutos
usando HTTP: 4 minutos
utilizando un software de descarga http concurrente ( fdm): 1 minuto
Entonces, básicamente bajo una situación de "vida real":
1) HTTP es más rápido que FTP cuando descarga un archivo grande.
2) HTTP puede usar la descarga de fragmentos paralelos, lo que lo hace 6 veces más rápido que FTP, según las condiciones de la red.
@anecdotal proporcionó números (hechos de la investigación) que es menos anecdótico que cualquier otra respuesta hasta ahora.
user1133275
¿Los tiempos son reproducibles, al menos aproximadamente?
masterxilo
Hace unos días intenté descargar archivos de 90 MB con http, fallé la red a 2 MB. Pero con ftp (mismo servidor, mismo archivo, misma red a través de punto de acceso móvil), la descarga se realizó con éxito. No se porque.
Rahmat Ihsan
1
ftp es más rápido para archivos individuales debido a una menor sobrecarga. Si sus pruebas obtuvieron una respuesta diferente, pruebe con otro cliente (o menos probable, con otro servidor). http no puede descargar más rápido que la velocidad de bits máxima y cualquier opción paralela utilizada para tratar de superar eso introducirá la sobrecarga del protocolo. Vs. Los archivos múltiples se pueden transferir de forma consecutiva a velocidades de línea a través de FTP sin sobrecarga de protocolo. La opción paralela de FTP utiliza múltiples conexiones TCP que generalmente superan las conexiones de un solo punto (por ejemplo, SMB3.1 vSMB2.1, 3.x puede usar conexión múltiple).
Astara
27
Muchos firewalls desconectan las conexiones salientes que no están en los puertos 80 o 443 (http & https); algunos incluso dejan caer conexiones a esos puertos que no son HTTP (S). FTP puede o no estar permitido, por no hablar de los modos activo / PASV.
Además, HTTP / 1.1 permite solicitudes parciales mucho mejores ("solo enviar desde el byte 123456 al final del archivo"), solicitudes condicionales y almacenamiento en caché ("solo enviar si el contenido cambió / si la última fecha de modificación modificada") y la compresión de contenido (gzip)
HTTP es mucho más fácil de usar a través de un proxy.
Según mi evidencia anecdótica, HTTP es más fácil de hacer con conexiones caídas / lentas / escamosas; por ejemplo, no es necesario (re) establecer una sesión de inicio de sesión antes de (re) iniciar la transferencia.
OTOH, HTTP no tiene estado, por lo que tendría que hacer la autenticación y crear un rastro de "quién hizo qué cuándo" usted mismo.
La única diferencia en velocidad que he notado es la transferencia de muchos archivos pequeños: HTTP con canalización 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 aún más optimizaciones, mientras que el protocolo FTP no ha visto ninguna actualización durante décadas (e incluso las extensiones a FTP tienen una aceptación insignificante por parte de los usuarios). Entonces, a menos que esté transfiriendo archivos a través de una máquina del tiempo, HTTP parece haber ganado.
(Tangencialmente: hay protocolos que son más adecuados para la transferencia de archivos, como rsyncBitTorrent, pero no tienen tanta participación mental, mientras que HTTP es Everywhere ™)
Una consideración es que FTP puede usar puertos no estándar, lo que puede dificultar el paso por los firewalls (especialmente si está utilizando SSL). HTTP suele estar en un puerto conocido, por lo que rara vez es un problema.
Acabo de comparar una transferencia de archivos a través de FTP y HTTP:
El resultado:
fdm
): 1 minutoEntonces, básicamente bajo una situación de "vida real":
1) HTTP es más rápido que FTP cuando descarga un archivo grande.
2) HTTP puede usar la descarga de fragmentos paralelos, lo que lo hace 6 veces más rápido que FTP, según las condiciones de la red.
fuente
Muchos firewalls desconectan las conexiones salientes que no están en los puertos 80 o 443 (http & https); algunos incluso dejan caer conexiones a esos puertos que no son HTTP (S). FTP puede o no estar permitido, por no hablar de los modos activo / PASV.
Además, HTTP / 1.1 permite solicitudes parciales mucho mejores ("solo enviar desde el byte 123456 al final del archivo"), solicitudes condicionales y almacenamiento en caché ("solo enviar si el contenido cambió / si la última fecha de modificación modificada") y la compresión de contenido (gzip)
HTTP es mucho más fácil de usar a través de un proxy.
Según mi evidencia anecdótica, HTTP es más fácil de hacer con conexiones caídas / lentas / escamosas; por ejemplo, no es necesario (re) establecer una sesión de inicio de sesión antes de (re) iniciar la transferencia.
OTOH, HTTP no tiene estado, por lo que tendría que hacer la autenticación y crear un rastro de "quién hizo qué cuándo" usted mismo.
La única diferencia en velocidad que he notado es la transferencia de muchos archivos pequeños: HTTP con canalización 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 aún más optimizaciones, mientras que el protocolo FTP no ha visto ninguna actualización durante décadas (e incluso las extensiones a FTP tienen una aceptación insignificante por parte de los usuarios). Entonces, a menos que esté transfiriendo archivos a través de una máquina del tiempo, HTTP parece haber ganado.
(Tangencialmente: hay protocolos que son más adecuados para la transferencia de archivos, como
rsync
BitTorrent, pero no tienen tanta participación mental, mientras que HTTP es Everywhere ™)fuente
Una consideración es que FTP puede usar puertos no estándar, lo que puede dificultar el paso por los firewalls (especialmente si está utilizando SSL). HTTP suele estar en un puerto conocido, por lo que rara vez es un problema.
Si decide usar FTP, asegúrese de leer sobre FTP activo y pasivo .
En términos de rendimiento, al final del día, ambos arrojan archivos directamente a las conexiones TCP, por lo que deberían ser casi lo mismo.
fuente
Ambos usan TCP como protocolo de transporte, pero HTTP usa una conexión persistente, lo que mejora el rendimiento del TCP.
fuente