# Opzioni di trasporto di azione e pubblicazione TMS esplicita

> Test CSRF, crittografia, compressione e pubblicazione contro HTTP reale e TMS piuttosto che assumere i metadati esercitano il comportamento.

Framework: total5
Product: Total.js 5 (total5@0.0.19)
Language: it
Content-SHA256: 51b3954cd2826631d9873d06d827c980024aead5984f6ebe2db91cc79621c283
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: total5-installed@total5@0.0.19
Review: not-recorded

In `total5@0.0.19`: `NEWACTION()` memorizza i metadati di azione di `csrf`, `encrypt` e `compress`, ma non stabiliscono le garanzie HTTP che i loro nomi potrebbero suggerire sulle rotte HTTp:

- `csrf:true` da solo accetta un POST senza token. Usa un middleware che chiama `DEF.onCSRFcheck()` con `secret_csrf` configurato, come in [csrf-protection](/en/total5/csrf-protection/).
- `encrypt:true` su una rotta dichiarata aggiunge i metadati di `@encrypt`, ma questa versione accetta ancora il testo JSON e ritorna il testo jSON.
- `compress:false` non disabilita la compressione di risposta ordinaria HTTP; la compressa di risposta segue `$httpcompress`, il codice accettato del cliente e la dimensione della risposta. una grande risposta JSON può essere gzipped anche quando questa opzione di azione è falsa.
- `publish` dichiara un argomento / schema TMS. completare una azione non pubblica automaticamente il suo risultato. chiama `$.publish(value)` esplicitamente e costruisci deliberatamente la carica pubblica. Selezionare i campi per pubblicare prima di chiamare `$.publish(value)`.

Configurare il token TMS per la tua applicazione. messaggi TMS vanno ai abbonati di questo argomento; le autorizzazioni e le regole di prenotazione rimangono nel tuo codice.

```text config
secret_csrf : local-csrf-fixture-only
$tms : true
secret_tms : local-tms-fixture-only
$httpcompress : true
```

```js definitions/transport.js
NEWACTION('Transport|csrf', {
	csrf: true,
	input: '*value:String',
	action: function($, model) { $.callback(model); }
});
NEWACTION('Transport|encrypted', {
	encrypt: true,
	route: 'POST /encrypted/',
	input: '*value:String',
	action: function($, model) { $.callback(model); }
});
NEWACTION('Transport|compressed', {
	compress: false,
	action: function($) { $.callback({ text: 'abcdefghij'.repeat(400) }); }
});
NEWACTION('Transport|notice', {
	publish: 'value:String',
	input: '*value:String',
	action: function($, model) {
		$.publish({ value: model.value });
		$.success();
	}
});
```

```js controllers/transport.js
exports.install = function() {
	ROUTE('POST /csrf-option/ @json --> Transport|csrf');
	ROUTE('GET /compression-option/ --> Transport|compressed');
	ROUTE('POST /notice/ @json --> Transport|notice');
};
```
