![]() |
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.
📂 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()oaxiosin JavaScriptcurl: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


