📂 Oltre HTTP: introduzione a FTP e SFTP

  


Se sei uno sviluppatore web, è probabile che tu abbia passato gran parte della tua vita lavorativa interagendo con server tramite HTTP: richieste GET e POST, REST API, browser e fetch. Ma nel mondo reale del deployment, del trasferimento di backup, e della gestione remota di server, incontrerai presto altri due protocolli: FTP e SFTP.

Ma prima: cosa fa davvero HTTP?

HTTP è un protocollo di livello applicativo usato per trasferire dati ipertestuali tra client (di solito un browser) e server (tipicamente un'applicazione web). È basato su TCP, e ogni comunicazione è stateless: invii una richiesta, ricevi una risposta.

🔗 Ti piace Techelopment? Dai un'occhiata al sito per tutti i dettagli!

📂 Cos'è FTP (File Transfer Protocol)

FTP è anche un protocollo di livello applicativo, ma il suo scopo è diverso: trasferire file tra client e server.

Concettualmente:

  • Pensa a FTP come a un sistema "vecchia scuola" per esplorare directory e caricare o scaricare file da un server remoto.
  • Il client si collega a un server FTP e può navigare tra cartelle, leggere file o caricarne di nuovi.

Tecnicamente:

  • Usa due connessioni: una per i comandi (porta 21) e una per il trasferimento dati (porta separata e variabile).
  • Non è sicuro: username, password e file viaggiano in chiaro (come un vecchio HTTP senza HTTPS).
  • Non è progettato per API, ma per interazione manuale o script automatizzati.

🔐 Cos'è SFTP (SSH File Transfer Protocol)

SFTP, nonostante il nome simile, non è "FTP con la S di secure". È un protocollo completamente diverso, basato su SSH (porta 22), lo stesso che usi per collegarti a un server con ssh user@host.

In pratica:

  • Ti permette di sfogliare directory, trasferire file, modificare permessi, tutto in modo criptato.
  • Può essere visto come un file manager remoto con la sicurezza di SSH.
  • A differenza di FTP, tutto avviene su una singola connessione sicura.

Analogia con HTTP e HTTPS

Se ti aiuta, puoi pensare a:

  • FTP = HTTP (vecchio, senza crittografia)
  • SFTP = come se fosse HTTPS, ma per i file, con autenticazione forte, crittografia e integrità dei dati
Attenzione: FTPS (FTP over SSL) esiste, ma è ancora un'altra cosa — meno usato oggi rispetto a SFTP.

 

Quando e perché usarli

Usi FTP o SFTP quando devi caricare o scaricare file direttamente su un server — ad esempio:

  • Caricare una versione statica del tuo sito web
  • Fare il backup o il restore di file di configurazione
  • Automatizzare uno scambio di file tra sistemi (es. ERP, database esterni)

Non li usi per servire contenuti a browser o interagire con API.


Esempi concreti

Con HTTP:

GET https://api.example.com/users

Risponde con JSON.

[
  {
    name: "John",
    surname: "Smith"
  },
  {
    name: "Joe",
    surname: "Hill"
  }
]

Con SFTP (via terminale o script):

sftp user@example.com
# dentro la sessione navighi come se fossi in un FileSystem locale
cd /var/www
put index.html
get logs.zip

Oppure via script Python:

import paramiko

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('host.com', username='user', password='pass')

sftp = ssh.open_sftp()
sftp.put('local_file.txt', '/remote/path/file.txt')
sftp.get('/remote/path/logs.zip', 'logs.zip')
sftp.close()

🔍 Differenze pratiche tra HTTP, FTP e SFTP

Esempio 1: Download di un file

Con HTTP

Supponiamo tu voglia scaricare un'immagine da un sito web.

GET https://example.com/images/logo.png

Risposta del server:

200 OK
Content-Type: image/png
[...contenuto del file...]

Usi:

  • Browser (<img src="...">)
  • fetch() o axios in JavaScript
  • curl:
    curl -O https://example.com/images/logo.png

Con FTP

ftp ftp.example.com
Name: user
Password: *****
ftp> cd /images
ftp> get logo.png
ftp> bye

Con SFTP (sicuro)

sftp user@example.com
# Accesso con password o chiave SSH
sftp> cd /images
sftp> get logo.png
sftp> exit

Oppure:

sftp user@example.com:/images/logo.png .

Esempio 2: Upload di un file su un server remoto

Con HTTP (non pensato per upload di file “statici”)

Devi scrivere una API backend che accetti un file via POST multipart:

POST /upload
Content-Type: multipart/form-data
Body: [file]

Serve:

  • Un backend che accetti e salvi il file
  • Codice lato client (JS/HTML form)

Con FTP

ftp ftp.example.com
ftp> cd /public_html
ftp> put index.html
ftp> bye

Con SFTP

sftp user@example.com
sftp> cd /var/www/html
sftp> put index.html
sftp> exit

Oppure direttamente da terminale:

scp index.html user@example.com:/var/www/html/
SCP è un'alternativa rapida a SFTP basata sempre su SSH.

Esempio 3: Script Python per upload con SFTP

import paramiko

host = "example.com"
port = 22
username = "user"
password = "yourpassword"

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(host, port, username, password)

sftp = ssh.open_sftp()
sftp.put("local_file.txt", "/remote/path/remote_file.txt")
sftp.close()
ssh.close()

✅ Tutta la connessione è criptata e sicura.


Esempio 4: Interazione con interfaccia grafica

  • FTP: puoi usare strumenti come FileZilla, Cyberduck o WinSCP.
  • SFTP: gli stessi strumenti supportano SFTP con autenticazione tramite chiave o password.
  • Drag & Drop dei file, visualizzazione ad albero, gestione permessi.

🛠️ Casi d’uso tipici

Scenari HTTP FTP SFTP
Scaricare un'immagine da un sito ✅ ❌ ❌
Caricare contenuti statici su un server web

❌
(complicato)
✅

✅
(preferibile)
Automatizzare backup remoti

❌

✅
(rischioso)
✅
(consigliato)
Integrazione tra sistemi legacy ❌ ✅ ✅
Trasferire file in modo sicuro

❌

❌

✅
(con SSH)


Conclusione

Se vieni dal mondo HTTP, pensare in termini di FTP/SFTP può sembrare un salto nel passato. Ma in realtà, è solo un altro modo per interagire con file remoti, spesso necessario per deployment, manutenzione o integrazione tra sistemi legacy. 

La differenza fondamentale è che mentre HTTP si concentra su richieste e risposte, FTP/SFTP si concentra su esplorazione e trasferimento file.



Follow me #techelopment

Official site: www.techelopment.it
facebook: Techelopment
instagram: @techelopment
X: techelopment
Bluesky: @techelopment
telegram: @techelopment_channel
whatsapp: Techelopment
youtube: @techelopment