Nette Documentation Preview

syntax
Ρύθμιση του HTTP
****************

.[perex]
Επισκόπηση των επιλογών διαμόρφωσης για το Nette HTTP.

Αν δεν χρησιμοποιείτε ολόκληρο το πλαίσιο, αλλά μόνο αυτή τη βιβλιοθήκη, διαβάστε [πώς να φορτώσετε τη διαμόρφωση |bootstrap:].


Κεφαλίδες HTTP .[#toc-http-headers]
===================================

```neon
http:
	# επικεφαλίδες που αποστέλλονται με κάθε αίτηση
	headers:
		X-Powered-By: MyCMS
		X-Content-Type-Options: nosniff
		X-XSS-Protection: '1; mode=block'

	# επηρεάζει την επικεφαλίδα X-Frame-Options
	frames: ...      # (string|bool) προεπιλογή 'SAMEORIGIN'
```

Για λόγους ασφαλείας, το πλαίσιο στέλνει μια επικεφαλίδα `X-Frame-Options: SAMEORIGIN`, η οποία λέει ότι μια σελίδα μπορεί να εμφανιστεί μέσα σε μια άλλη σελίδα (στο στοιχείο `<iframe>`) μόνο εάν αυτή βρίσκεται στον ίδιο τομέα. Αυτό μπορεί να είναι ανεπιθύμητο σε ορισμένες περιπτώσεις (για παράδειγμα, αν αναπτύσσετε μια εφαρμογή στο Facebook), οπότε η συμπεριφορά μπορεί να αλλάξει με τον καθορισμό των πλαισίων `frames: http://allowed-host.com`.


Πολιτική ασφάλειας περιεχομένου .[#toc-content-security-policy]
---------------------------------------------------------------

Οι επικεφαλίδες `Content-Security-Policy` (εφεξής CSP) μπορούν να συναρμολογηθούν εύκολα, η περιγραφή τους μπορεί να βρεθεί στην [περιγραφή CSP |https://content-security-policy.com]. Οι οδηγίες CSP (όπως `script-src`) μπορούν να γραφούν είτε ως συμβολοσειρές σύμφωνα με τις προδιαγραφές είτε ως πίνακες τιμών για καλύτερη αναγνωσιμότητα. Τότε δεν χρειάζεται να γράφονται εισαγωγικά γύρω από λέξεις-κλειδιά όπως το `'self'`. Η Nette θα παράγει επίσης αυτόματα μια τιμή του `nonce`, έτσι ώστε το `'nonce-y4PopTLM=='` να αποστέλλεται στην επικεφαλίδα.

```neon
http:
	# Πολιτική ασφάλειας περιεχομένου
	csp:
		# συμβολοσειρά σύμφωνα με την προδιαγραφή CSP
		default-src: "'self' https://example.com"

		# πίνακας τιμών
		script-src:
			- nonce
			- strict-dynamic
			- self
			- https://example.com

		# bool στην περίπτωση των διακοπτών
		upgrade-insecure-requests: true
		block-all-mixed-content: false
```

Χρήση `<script n:nonce>...</script>` στα πρότυπα και η τιμή nonce θα συμπληρωθεί αυτόματα. Η δημιουργία ασφαλών ιστότοπων στη Nette είναι πραγματικά εύκολη.

Ομοίως, μπορούν να προστεθούν οι επικεφαλίδες `Content-Security-Policy-Report-Only` (οι οποίες μπορούν να χρησιμοποιηθούν παράλληλα με το CSP) και η [Πολιτική χαρακτηριστικών |https://developers.google.com/web/updates/2018/06/feature-policy]:

```neon
http:
	# Έκθεση πολιτικής ασφάλειας περιεχομένου Μόνο
	cspReportOnly:
		default-src: self
		report-uri: 'https://my-report-uri-endpoint'

	# Πολιτική χαρακτηριστικών
	featurePolicy:
		unsized-media: none
		geolocation:
			- self
			- https://example.com
```


HTTP Cookie .[#toc-http-cookie]
-------------------------------

Μπορείτε να αλλάξετε τις προεπιλεγμένες τιμές ορισμένων παραμέτρων των μεθόδων [Nette\Http\Response::setCookie() |response#setCookie] και session.

```neon
http:
	# Πεδίο εφαρμογής cookie ανά διαδρομή
	cookiePath: ...          # (συμβολοσειρά) προεπιλογή '/'

	# ποιοι υπολογιστές επιτρέπεται να λάβουν το cookie
	cookieDomain: 'example.com'  # (string|domain) με προεπιλογή unset

	# να αποστέλλονται cookies μόνο μέσω HTTPS;
	cookieSecure: ...        # (bool|auto) προεπιλογή σε auto

	# απενεργοποιεί την αποστολή του cookie που χρησιμοποιεί η Nette ως προστασία κατά του CSRF
	disableNetteCookie: ...  # (bool) προεπιλογή σε false
```

Η επιλογή `cookieDomain` καθορίζει ποιοι τομείς (origins) μπορούν να δέχονται cookies. Αν δεν καθοριστεί, το cookie γίνεται αποδεκτό από το ίδιο (υπο)domain που έχει οριστεί από αυτό, *εξαιρώντας* τα υποτομείς τους. Αν καθοριστεί η επιλογή `cookieDomain`, τότε συμπεριλαμβάνονται και τα subdomains. Επομένως, ο προσδιορισμός του `cookieDomain` είναι λιγότερο περιοριστικός από την παράλειψη.

Για παράδειγμα, αν οριστεί το `cookieDomain: nette.org`, το cookie είναι επίσης διαθέσιμο σε όλα τα subdomains όπως το `doc.nette.org`. Αυτό μπορεί επίσης να επιτευχθεί με την ειδική τιμή `domain`, δηλαδή `cookieDomain: domain`.

Η προεπιλεγμένη τιμή του `cookieSecure` είναι `auto`, πράγμα που σημαίνει ότι εάν ο ιστότοπος εκτελείται σε HTTPS, τα cookies θα αποστέλλονται με τη σημαία `Secure` και επομένως θα είναι διαθέσιμα μόνο μέσω HTTPS.


Μεσολάβηση HTTP .[#toc-http-proxy]
----------------------------------

Εάν ο ιστότοπος λειτουργεί πίσω από έναν διακομιστή μεσολάβησης HTTP, εισαγάγετε τη διεύθυνση IP του διακομιστή μεσολάβησης, ώστε να λειτουργεί σωστά η ανίχνευση των συνδέσεων HTTPS, καθώς και τη διεύθυνση IP του πελάτη. Δηλαδή, έτσι ώστε οι [Nette\Http\Request::getRemoteAddress() |request#getRemoteAddress] και [isSecured() |request#isSecured] να επιστρέφουν τις σωστές τιμές και να δημιουργούνται σύνδεσμοι με το πρωτόκολλο `https:` στα πρότυπα.

```neon
http:
	# Διεύθυνση IP, περιοχή (π.χ. 127.0.0.1/8) ή συστοιχία αυτών των τιμών
	proxy: 127.0.0.1       # (string|string[]) προεπιλογή σε none
```


Σύνοδος .[#toc-session]
=======================

Βασικές ρυθμίσεις [συνεδριών |sessions]:

```neon
session:
	# εμφανίζει πάνελ συνεδρίας στο Tracy Bar;
	debugger: ...        # (bool) προεπιλογή false

	# χρόνος αδράνειας μετά τον οποίο λήγει η σύνοδος
	expiration: 14 days  # (string) προεπιλογή '3 ώρες'

	# πότε θα ξεκινήσει η συνεδρία;
	autoStart: ...       # (smart|always|never) προεπιλογή 'smart'

	# handler, υπηρεσία που υλοποιεί τη διεπαφή SessionHandlerInterface
	handler: @handlerService
```

Η επιλογή `autoStart` ελέγχει πότε θα ξεκινήσει η σύνοδος. Η τιμή `always` σημαίνει ότι η σύνοδος ξεκινά πάντα κατά την εκκίνηση της εφαρμογής. Η τιμή `smart` σημαίνει ότι η σύνοδος θα ξεκινήσει κατά την εκκίνηση της εφαρμογής μόνο αν υπάρχει ήδη ή τη στιγμή που θέλουμε να διαβάσουμε από αυτήν ή να γράψουμε σε αυτήν. Τέλος, η τιμή `never` απενεργοποιεί την αυτόματη εκκίνηση της συνόδου.

Μπορείτε επίσης να ορίσετε όλες τις [οδηγίες συνόδου |https://www.php.net/manual/en/session.configuration.php] της PHP (σε μορφή camelCase) και επίσης το [readAndClose |https://www.php.net/manual/en/function.session-start.php#refsect1-function.session-start-parameters]. Παράδειγμα:

```neon
session:
	# 'session.name' γραμμένο ως 'όνομα'
	name: MYID

	# 'session.save_path' γραμμένο ως 'savePath'
	savePath: "%tempDir%/sessions"
```


Cookie συνόδου .[#toc-session-cookie]
-------------------------------------

Το cookie συνεδρίας αποστέλλεται με τις ίδιες παραμέτρους όπως και τα [άλλα cookies |#HTTP cookie], αλλά μπορείτε να τις αλλάξετε:

```neon
session:
	# ποιοι κεντρικοί υπολογιστές επιτρέπεται να λάβουν το cookie
	cookieDomain: 'example.com'   # (string|domain)

	# περιορισμοί κατά την πρόσβαση σε cross-origin αίτημα
	cookieSamesite: None          # (Strict|Lax|None) προεπιλογή σε Lax
```

Η επιλογή `cookieSamesite` επηρεάζει το αν το cookie αποστέλλεται με [αιτήσεις cross-origin |nette:glossary#SameSite cookie], γεγονός που παρέχει κάποια προστασία από επιθέσεις [Cross-Site Request Forgery |nette:glossary#cross-site-request-forgery-csrf].


Υπηρεσίες DI .[#toc-di-services]
================================

Αυτές οι υπηρεσίες προστίθενται στο δοχείο DI:

| Όνομα | Τύπος | Περιγραφή
|-----------------------------------------------------
| `http.request` | [api:Nette\Http\Request] | [Αίτημα HTTP | request]
| `http.response` | [api:Nette\Http\Response] | [Απάντηση HTTP | response]
| `session.session` |[api:Nette\Http\Session] | [διαχείριση συνόδου | sessions]

Ρύθμιση του HTTP

Επισκόπηση των επιλογών διαμόρφωσης για το Nette HTTP.

Αν δεν χρησιμοποιείτε ολόκληρο το πλαίσιο, αλλά μόνο αυτή τη βιβλιοθήκη, διαβάστε πώς να φορτώσετε τη διαμόρφωση.

Κεφαλίδες HTTP

http:
	# επικεφαλίδες που αποστέλλονται με κάθε αίτηση
	headers:
		X-Powered-By: MyCMS
		X-Content-Type-Options: nosniff
		X-XSS-Protection: '1; mode=block'

	# επηρεάζει την επικεφαλίδα X-Frame-Options
	frames: ...      # (string|bool) προεπιλογή 'SAMEORIGIN'

Για λόγους ασφαλείας, το πλαίσιο στέλνει μια επικεφαλίδα X-Frame-Options: SAMEORIGIN, η οποία λέει ότι μια σελίδα μπορεί να εμφανιστεί μέσα σε μια άλλη σελίδα (στο στοιχείο <iframe>) μόνο εάν αυτή βρίσκεται στον ίδιο τομέα. Αυτό μπορεί να είναι ανεπιθύμητο σε ορισμένες περιπτώσεις (για παράδειγμα, αν αναπτύσσετε μια εφαρμογή στο Facebook), οπότε η συμπεριφορά μπορεί να αλλάξει με τον καθορισμό των πλαισίων frames: http://allowed-host.com.

Πολιτική ασφάλειας περιεχομένου

Οι επικεφαλίδες Content-Security-Policy (εφεξής CSP) μπορούν να συναρμολογηθούν εύκολα, η περιγραφή τους μπορεί να βρεθεί στην περιγραφή CSP. Οι οδηγίες CSP (όπως script-src) μπορούν να γραφούν είτε ως συμβολοσειρές σύμφωνα με τις προδιαγραφές είτε ως πίνακες τιμών για καλύτερη αναγνωσιμότητα. Τότε δεν χρειάζεται να γράφονται εισαγωγικά γύρω από λέξεις-κλειδιά όπως το 'self'. Η Nette θα παράγει επίσης αυτόματα μια τιμή του nonce, έτσι ώστε το 'nonce-y4PopTLM==' να αποστέλλεται στην επικεφαλίδα.

http:
	# Πολιτική ασφάλειας περιεχομένου
	csp:
		# συμβολοσειρά σύμφωνα με την προδιαγραφή CSP
		default-src: "'self' https://example.com"

		# πίνακας τιμών
		script-src:
			- nonce
			- strict-dynamic
			- self
			- https://example.com

		# bool στην περίπτωση των διακοπτών
		upgrade-insecure-requests: true
		block-all-mixed-content: false

Χρήση <script n:nonce>...</script> στα πρότυπα και η τιμή nonce θα συμπληρωθεί αυτόματα. Η δημιουργία ασφαλών ιστότοπων στη Nette είναι πραγματικά εύκολη.

Ομοίως, μπορούν να προστεθούν οι επικεφαλίδες Content-Security-Policy-Report-Only (οι οποίες μπορούν να χρησιμοποιηθούν παράλληλα με το CSP) και η Πολιτική χαρακτηριστικών:

http:
	# Έκθεση πολιτικής ασφάλειας περιεχομένου Μόνο
	cspReportOnly:
		default-src: self
		report-uri: 'https://my-report-uri-endpoint'

	# Πολιτική χαρακτηριστικών
	featurePolicy:
		unsized-media: none
		geolocation:
			- self
			- https://example.com

Μπορείτε να αλλάξετε τις προεπιλεγμένες τιμές ορισμένων παραμέτρων των μεθόδων Nette\Http\Response::setCookie() και session.

http:
	# Πεδίο εφαρμογής cookie ανά διαδρομή
	cookiePath: ...          # (συμβολοσειρά) προεπιλογή '/'

	# ποιοι υπολογιστές επιτρέπεται να λάβουν το cookie
	cookieDomain: 'example.com'  # (string|domain) με προεπιλογή unset

	# να αποστέλλονται cookies μόνο μέσω HTTPS;
	cookieSecure: ...        # (bool|auto) προεπιλογή σε auto

	# απενεργοποιεί την αποστολή του cookie που χρησιμοποιεί η Nette ως προστασία κατά του CSRF
	disableNetteCookie: ...  # (bool) προεπιλογή σε false

Η επιλογή cookieDomain καθορίζει ποιοι τομείς (origins) μπορούν να δέχονται cookies. Αν δεν καθοριστεί, το cookie γίνεται αποδεκτό από το ίδιο (υπο)domain που έχει οριστεί από αυτό, εξαιρώντας τα υποτομείς τους. Αν καθοριστεί η επιλογή cookieDomain, τότε συμπεριλαμβάνονται και τα subdomains. Επομένως, ο προσδιορισμός του cookieDomain είναι λιγότερο περιοριστικός από την παράλειψη.

Για παράδειγμα, αν οριστεί το cookieDomain: nette.org, το cookie είναι επίσης διαθέσιμο σε όλα τα subdomains όπως το doc.nette.org. Αυτό μπορεί επίσης να επιτευχθεί με την ειδική τιμή domain, δηλαδή cookieDomain: domain.

Η προεπιλεγμένη τιμή του cookieSecure είναι auto, πράγμα που σημαίνει ότι εάν ο ιστότοπος εκτελείται σε HTTPS, τα cookies θα αποστέλλονται με τη σημαία Secure και επομένως θα είναι διαθέσιμα μόνο μέσω HTTPS.

Μεσολάβηση HTTP

Εάν ο ιστότοπος λειτουργεί πίσω από έναν διακομιστή μεσολάβησης HTTP, εισαγάγετε τη διεύθυνση IP του διακομιστή μεσολάβησης, ώστε να λειτουργεί σωστά η ανίχνευση των συνδέσεων HTTPS, καθώς και τη διεύθυνση IP του πελάτη. Δηλαδή, έτσι ώστε οι Nette\Http\Request::getRemoteAddress() και isSecured() να επιστρέφουν τις σωστές τιμές και να δημιουργούνται σύνδεσμοι με το πρωτόκολλο https: στα πρότυπα.

http:
	# Διεύθυνση IP, περιοχή (π.χ. 127.0.0.1/8) ή συστοιχία αυτών των τιμών
	proxy: 127.0.0.1       # (string|string[]) προεπιλογή σε none

Σύνοδος

Βασικές ρυθμίσεις συνεδριών:

session:
	# εμφανίζει πάνελ συνεδρίας στο Tracy Bar;
	debugger: ...        # (bool) προεπιλογή false

	# χρόνος αδράνειας μετά τον οποίο λήγει η σύνοδος
	expiration: 14 days  # (string) προεπιλογή '3 ώρες'

	# πότε θα ξεκινήσει η συνεδρία;
	autoStart: ...       # (smart|always|never) προεπιλογή 'smart'

	# handler, υπηρεσία που υλοποιεί τη διεπαφή SessionHandlerInterface
	handler: @handlerService

Η επιλογή autoStart ελέγχει πότε θα ξεκινήσει η σύνοδος. Η τιμή always σημαίνει ότι η σύνοδος ξεκινά πάντα κατά την εκκίνηση της εφαρμογής. Η τιμή smart σημαίνει ότι η σύνοδος θα ξεκινήσει κατά την εκκίνηση της εφαρμογής μόνο αν υπάρχει ήδη ή τη στιγμή που θέλουμε να διαβάσουμε από αυτήν ή να γράψουμε σε αυτήν. Τέλος, η τιμή never απενεργοποιεί την αυτόματη εκκίνηση της συνόδου.

Μπορείτε επίσης να ορίσετε όλες τις οδηγίες συνόδου της PHP (σε μορφή camelCase) και επίσης το readAndClose. Παράδειγμα:

session:
	# 'session.name' γραμμένο ως 'όνομα'
	name: MYID

	# 'session.save_path' γραμμένο ως 'savePath'
	savePath: "%tempDir%/sessions"

Το cookie συνεδρίας αποστέλλεται με τις ίδιες παραμέτρους όπως και τα άλλα cookies, αλλά μπορείτε να τις αλλάξετε:

session:
	# ποιοι κεντρικοί υπολογιστές επιτρέπεται να λάβουν το cookie
	cookieDomain: 'example.com'   # (string|domain)

	# περιορισμοί κατά την πρόσβαση σε cross-origin αίτημα
	cookieSamesite: None          # (Strict|Lax|None) προεπιλογή σε Lax

Η επιλογή cookieSamesite επηρεάζει το αν το cookie αποστέλλεται με αιτήσεις cross-origin, γεγονός που παρέχει κάποια προστασία από επιθέσεις Cross-Site Request Forgery.

Υπηρεσίες DI

Αυτές οι υπηρεσίες προστίθενται στο δοχείο DI:

Όνομα Τύπος Περιγραφή
http.request Nette\Http\Request Αίτημα HTTP
http.response Nette\Http\Response Απάντηση HTTP
session.session Nette\Http\Session διαχείριση συνόδου