# Επιλογές μεταφοράς δράσης και ρητή TMS δημοσίευση

> Δοκιμάστε csrf, κρυπτογραφήστε, συμπιέστε και δημοσιεύστε ενάντια στο πραγματικό HTTP και TMS αντί να υποθέσετε ότι τα μεταδεδομένα επιβάλλουν τη συμπεριφορά.

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

Στο `total5@0.0.19`: το `NEWACTION()` αποθηκεύει τα μεταδεδομένα δράσης `csrf`, `encrypt` και `compress`, αλλά δεν εγγυώνται ότι τα ονόματά τους θα μπορούσαν να προτείνουν στις διαδρομές HTTP:

- Το `csrf:true` από μόνο του δέχεται ένα POST χωρίς token. Χρησιμοποιήστε ένα middleware που καλεί το `DEF.onCSRFcheck()` με ρυθμισμένο `secret_csrf`, όπως στο [csrf-protection](/en/total5/csrf-protection/).
- Το `encrypt:true` σε μια δηλωμένη διαδρομή προσθέτει μεταδεδομένα του `@encrypt`, αλλά αυτή η έκδοση εξακολουθεί να δέχεται το έντυπο JSON και επιστρέφει το ένγραφο JSON.
- Το `compress:false` δεν απενεργοποιεί το συνηθισμένο HTTP gzip. η συμπίεση της απάντησης ακολουθεί το `$httpcompress`, το αποδεκτό κρυπτογράφημα και το μέγεθος της απάντηση του πελάτη.
- Το `publish` δηλώνει ένα θέμα / σχήμα του TMS. Η ολοκλήρωση μιας ενέργειας δεν δημοσιεύει αυτόματα το αποτέλεσμα της. Καλέστε το `$.publish(value)` ρητά και δημιουργήστε το δημόσιο φορτίο σκόπιμα. Επιλέξτε τα πεδία για δημοσίευση πριν καλέσετε το `$.publish(value)`.

Τα μηνύματα TMS πηγαίνουν στους συνδρομητές αυτού του θέματος. οι κανόνες άδειας εφαρμογής και επιδόσεων εξακολουθούν να ανήκουν στον κωδικό σας.

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