📂 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