# Options de transport d'action et publication explicite TMS

> Tester CSRF, chiffrer, compresser et publier contre HTTP réel et TMS plutôt que d'assumer les metadata impose le comportement.

Framework: total5
Product: Total.js 5 (total5@0.0.19)
Language: fr
Content-SHA256: 80c0161c66eb54a74fddc568d8da986351c7edc22089afce6d307154d9ace8fc
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: total5-installed@total5@0.0.19
Review: not-recorded

Dans `total5@0.0.19`: `NEWACTION()` stocke `csrf`, `encrypt` et `compress` dans les métadonnées d'action, mais ils ne définissent pas les garanties HTTP que leurs noms pourraient suggérer sur les routes HTTp:

- `csrf:true` seul accepte un POST sans jeton. Utilisez un middleware qui appelle `DEF.onCSRFcheck()` avec `secret_csrf` configuré, comme dans [csrf-protection](/en/total5/csrf-protection/).
- `encrypt:true` sur une route déclarée ajoute les métadonnées de `@encrypt`, mais cette version accepte toujours le plaintext JSON et retourne le plaintesxt J SON.
- `compress:false` ne désactive pas l'ordinaire HTTP gzip; la compression de réponse suit `$httpcompress`, le chiffrement accepté du client et la taille de réponse.
- `publish` déclare un thème / schéma TMS. La réalisation d'une action ne publie pas automatiquement son résultat. Appelez le `$.publish(value)` explicitement et construisez la charge publique intentionnellement. Sélectionnez les champs à publier avant de appeler le `$.publish(value)`.

Configurez le token TMS pour votre application. les messages TMS vont aux abonnés de ce sujet; les règles d'autorisation de l'application et de tenance appartiennent toujours à votre code.

```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');
};
```
