NNTP e struttura di un articolo news

Ehilà! Siete ancora qui a leggermi? Peggio per voi: vorrà dire che dopo questo articolo non avrete più scuse per non sapere cos'è un messaggio news. Almeno questa sarebbe la mia idea, come promesso nello scorso numero: ma vista la situazione attuale delle aree it.*, dubito fortemente che i miei siano altro che pii propositi. Ad ogni modo, tanto vale dare almeno un'idea di come funzioni in pratica il mondo news.

Ah, mi è stato fatto notare che ho dimenticato di inserire FreeAgent tra i lettori news per Windows. Non è stata una dimenticanza voluta, ve lo assicuro. Semplicemente, mi ero completamente dimenticato della sua esistenza. Lo so, BETA è una e-zine espressamente dedicata a Windows: ma personalmente sto cercando di disintossicarmi, pur sapendo perfettamente che esso è onnipresente, come Pannella in televisione. Ma non divaghiamo.

NNTP... liofilizzato

Non ho nessuna intenzione di spiegarvi come funziona NNTP, anche perché non me lo ricordo mai bene nemmeno io: quando ne ho bisogno, do un'occhiata agli RFC che vi ho elencato la volta scorsa. Potete perciò saltare direttamente al paragrafo successivo[1] senza perdere nulla. Fidatevi. Comunque la cosa funziona a grandi linee così: si fa un telnet sulla porta[2] 119 del server, si controlla che si abbia la possibilità di usare il server - lo vediamo dal numero del primo messaggio che ci appare dopo il nome del calcolatore dall'altra parte: se questo è 200, va tutto bene; se è 201, possiamo leggere ma non scrivere; se infine è 501 oppure 502, non possiamo fare nulla, e veniamo sbattuti fuori non troppo gentilmente.

Supponendo di essere capitati su un server gentile che ci dà accesso completo[3], possiamo decidere di elencare tutti i gruppi presente, col comando LIST, e già che ci si è di sapere quanti messaggi essi contengono e come sono numerati. È così possibile chiedere i messaggi nuovi, per leggerceli con calma. Naturalmente può anche capitare, più spesso quando sono due server che parlano tra loro, ma anche quando un utente posta un messaggio, che bisogna avvisare il server che anche noi abbiamo qualcosa per lui: la parola magica è IHAVE, tutto attaccato, seguito dal codice del messaggio da inviare. Se il messaggio non è già presente, il server ci risponde dicendo più o meno "continua pure" (in realtà scrive il numero 335, ma poco importa); altrimenti ci spernacchia scrivendo "Duplicate". Il messaggio si termina con una riga contenente solo un punto; la sessione news col comando QUIT.

Le header di un messaggio news

Una cosa che non ho detto nel paragrafo precedente, ma che comunque dovrebbe interessare ciascun lettore, è che si può chiedere al server news di non farsi inviare tutto l'articolo, ma solamente la sua header. Per la precisione un articolo, più o meno come un messaggio di posta elettronica, è diviso logicamente in due parti: il testo vero e proprio, e tutte le cose amministrative, che stanno all'inizio e sono dette per l'appunto header. In realtà le header di un articolo e di un messaggio di posta elettronica sono molto simili, ma visto che non ho ancora scritto nulla su quest'ultimo, tanto vale dissertarne qui. Sapere come funzionano le header è infatti molto importante per utilizzare al meglio le news.

Le header sono un insieme di righe - le righe di header, per l'appunto, o header lines per gli anglofoni. Una riga comincia sempre con una parola, seguita da un "due punti", uno spazio, e il suo valore. Se si deve andare a capo, basta cominciare con un TAB e la riga viene automaticamente considerata di continuazione. Infine, una riga vuota segna la fine delle header. La riga probabilmente più importante è quella Newsgroups:; essa contiene infatti la lista di tutti i gruppi a cui si vuole mandare il messaggio. Il messaggio non verrà duplicato, ma sarà spedito (e letto!) solo una volta. Un gran risparmio di tempo e denaro per tutti...

Non bisogna abusare però di questa possibilità. Può essere infatti utile raggiungere molti gruppi diversi con un messaggio, ma non è quasi mai necessario che la discussione prosegua contemporaneamente su tutti questi gruppi. Per specificare dove si vuole che i messaggi di commento vengano inviati, si utilizza la riga Followup-To:, la cui sintassi è esattamente simile a quella di Newsgroup:. Il followup è utilizzato anche quando si decide che la trattazione di un discorso è oramai finita fuori tema rispetto all'argomento del gruppo: si annuncia magari all'interno del messaggio che il tema ormai dovrebbe essere appannaggio di un nuovo gruppo, si setta il followup a questo gruppo, e via! Il followup serve anche nel caso si voglia ricevere direttamente le risposte alla propria richiesta, invece che andare a cercarle nel gruppo. In questo caso, basta usare la formula magica Followup-To: poster. Poster non è la canzone di Baglioni, naturalmente, ma l'"impostatore" dell'articolo. Ah: è buona norma in questo caso postare un messaggio ringraziando chiunque ci abbia risposto e riassumendo la soluzione: potrebbe servire anche ad altri. Peccato che questa, come tante belle usanze, si stia perdendo...

Le header più comuni

Altre righe di header sempre, o quasi, presenti sono la From:, che contiene l'indirizzo di posta elettronica di chi ha spedito il messaggio, o quello che lui vuole fare credere (in questo caso, è presente anche la riga Sender:, che ha il vero indirizzo); Subject:, che come starete immaginando contiene il titolo del nostro messaggio; Summary: e Keywords:, che potrebbero contenere rispettivamente un riassunto e le parole più importanti dell'articolo - ricordate che ci si può fare mandare la header senza il resto dell'articolo?
Organization: dovrebbe invece indicare il "cappello" sotto di cui si scrive un articolo. Ad esempio, i miei articoli news hanno come Organization "CSELT UF/DD - Torino", cioè la sigla del mio gruppo di ricerca dove lavoro, tranne quando invio messaggi in qualità di membro del GCN[4], nel qual caso mi presento come "Gruppo Coordinamento NEWS-IT". Date: indica infine la data in cui il messaggio è stato originariamente spedito.

Alcune header facoltative

Oltre alle linee di header descritte nella sezione precedente, se ne possono trovare molte altre. Per consuetudine Internet, chiunque può decidere di aggiungere una header qualsiasi, sempre che essa cominci con X-. Penso che la X stia per eXperimental, ma non ne sono sicuro, e penso che la storia del termine si perda oramai nella nebbia dei tempi. Magari sta per eXtension... Tra le estensioni più note, posso accennare alla X-Disclaimer:, che contiene una breve frase per assicurare che i propri capi non sanno niente di quello che stiamo scrivendo; X-Pgp-Checksum: può servire per verificare via PGP che il testo del messaggio non è stato modificato; X-Loop: viene spesso usato se il newsgroup è in gateway[5] con una mailing list, per evitare che i messaggi rimbalzino avanti e indietro; X-Face:... Sì. Serve per mettere una bitmap della vostra faccia. Ci devono anche essere dei programmi apposta per fare sì che l'immagine venga visualizzata, ma non ho avuto mai il coraggio di cercarli.

Vi sono però alcune linee di header che, pur non essendo spesso presenti, sono comunque ufficiali. Lines:, ad esempio, contiene il numero di linee presenti nel corpo del messaggio; Cc:, proprio come in un messaggio di posta elettronica, permette di aggiungere una lista di persone cui si vuole mandare l'articolo, perché non leggono le news o perché si vuole lasciarglielo leggere immediatamente. Se si vuole che le risposte private all'articolo vengano spedite a un indirizzo diverso da quello del mittente, si specifica questo indirizzo nella riga Reply-To:, il parallelo del Followup-To: che abbiamo visto in precedenza; infine, se ci sono dei messaggi che dovrebbero restare a lungo nel server e non venire cancellati, si può suggerirlo al server stesso utilizzando la riga Expire: seguita dalla data di cancellazione voluta. Naturalemente il server può decidere se onorare o no questa richiesta - non pensate di lasciare per sempre tracce della vostra presenza!

Nel caso si abbiano messaggi che vengono aggiornati di frequente, è anche possibile specificare che la versione precedente deve essere cancellata. Si usa in questo caso la riga Supersedes:, seguita dall'identificativo del messaggio da aggiornare. Ma per capire meglio queste cose, occorre passare alla sezione seguente...

Header per la "storia" di un messaggio

L'ultimo insieme di header che voglio presentarvi riguardano appunto la "carta d'identità" e la storia di un messaggio. Message-Id: è un identificativo di quello che si è scritto, che deve essere unico in tutto il mondo, almeno per un po' di tempo. Il sistema più semplice per fare ciò, e che viene usato in genere, è quello di usare l'ora di spedizione, il nodo da cui si sta scrivendo e un numero a caso per buona misura, e infilare il tutto nel messaggio. Naturalmente non siete voi a fare questa operazione, ma il software. Tra l'altro, è per mezzo del Message-Id che il nostro server poteva risalire al fatto che un messaggio che si vuole inviare è in realtà un duplicato.

Questi identificativi vengono anche usati nella riga References:, Più precisamente, quando si risponde a un messaggio viene preso il Message-Id del messaggio originario e aggiunto alle References, cioè ai riferimenti. In questo modo, i programmi di lettura news possono ricostruire il thread, vale a dire il filo del discorso, e dare un minimo di possibilità al povero lettore di capire cosa succede. Capita spesso, infatti, che un server riceva la risposta a una domanda prima della domanda stessa: la cosa anzi è considerata una feature, visto che la maggior parte dei server è configurata in maniera tale da inviare subito gli articoli che ha appena ricevuto, e spedire gli "arretrati" solo quando c'è un attimo di tempo libero. Se quindi un nodo rimane fuori linea per un po', subito si creano questi paradossi temporali. Naturalmente il fatto che si usi il meccanismo dei riferimenti fa sì che si possa persino cambiare il titolo del messaggio senza che il lettore news si lasci ingannare e separi i due filoni.

Ultima, ma non meno importante riga - in genere è la seconda come posizione fisica! - di header è quella di Path:. Questa contiene il percorso completo fatto dal messaggio per essere letto da voi, cioè i server da cui è passato; il tutto in formato UUCP[6]. Alla fine viene fuori un serpentone come questo, che ho riesumato dal mio hard disk:

Path: mnemosyne.cs.du.edu!uunet!portal!lll-winken!
        iggy.GW.Vitalink.COM!cs.widener.edu!eff!world!awp
E questo è ancora piccolo - ho visto esempi di quattro e più righe!

A che serve il path? A nulla. O meglio, è un utilissimo strumento per il debugging, quando si vuole capire che giro stanno facendo i messaggi nel caso questi stiano arrivando con forte ritardo, ma non penso proprio venga usato esplicitamente da nessun programma. Forse anche per questo è rimasto con una sintassi così antiquata...

Note & Chiose

[1]
Grande cosa gli iperlink, vero?
[2]
Quando si parla di telnet generico, non si pensa solo all'applicazione che serve ad avere una sessione terminale remota, ma più genericamente alla connessione con un servizio dall'altra parte della connessione. L'"indirizzo" di tale servizio è per l'appunto la porta. HTTP, ad esempio, lavora sulla porta 80.
[3]
Il che non è affatto semplice. Tipicamente, ogni sistema si deve accordare con un news provider per potercisi collegare... Italia on Line e Video On Line al momento danno però accesso a tutti.
[4]
Avevo promesso che questa seconda parte sarebbe stata l'ultima, e ci sarebbero state ampi stralci della storia del GCN. Ho mentito. Mentre stavo scrivendo questo articolo, ho pensato che potevo benissimo fare tre puntate, e la suddivisione logica sarebbe stata migliore... Visto poi che non ho troppi problemi a sbrodolare qualche KB in più, la decisione non è stata sofferta.
[5]
Un gateway serve appunto a mettere in comunicazione due mondi diversi come le news e le mailing list, prendendo i messaggi inviati in uno di essi e distribuendoli all'altro. Avere un gateway perfettamente funzionante non è così semplice: a gennaio si è parlato a lungo del "Virus Sabbatini", che informava tutti coloro che scrivevano un messaggio in it.news.aiuto che questo non era stato spedito (falso, tra l'altro).
[6]
Voi siete troppo giovani, ma io ho usato i famigerati bang path UUCP. In fin dei conti era come spiegare allo stupido mailer tutti, o quasi, i calcolatori che doveva incontrare per strada... perlomeno così l'instradamento lo potevi decidere tu.
.mau.
Copyright © 1996 Maurizio Codogno. Questo testo può essere liberamente distribuito purché non a fini di lucro. Per ogni altro utilizzo, si prega contattare l'autore.