Nette Documentation Preview

syntax
Configurazione di HTTP
**********************

.[perex]
Panoramica delle opzioni di configurazione di Nette HTTP.

Se non si utilizza l'intero framework, ma solo questa libreria, leggere [come caricare la configurazione |bootstrap:].


Intestazioni HTTP .[#toc-http-headers]
======================================

```neon
http:
	# intestazioni che vengono inviate con ogni richiesta
	headers:
		X-Powered-By: MyCMS
		X-Content-Type-Options: nosniff
		X-XSS-Protection: '1; mode=block'

	# influisce sull'intestazione X-Frame-Options
	frames: ...      # (string|bool) predefinito a "SAMEORIGIN".
```

Per motivi di sicurezza, il framework invia un'intestazione `X-Frame-Options: SAMEORIGIN`, che dice che una pagina può essere visualizzata all'interno di un'altra pagina (nell'elemento `<iframe>`) solo se si trova sullo stesso dominio. Questo può essere indesiderato in alcune situazioni (per esempio, se si sta sviluppando un'applicazione Facebook), quindi il comportamento può essere modificato impostando i frame `frames: http://allowed-host.com`.


Politica di sicurezza dei contenuti .[#toc-content-security-policy]
-------------------------------------------------------------------

Le intestazioni `Content-Security-Policy` (d'ora in poi denominate CSP) possono essere facilmente assemblate; la loro descrizione si trova nella [descrizione delle CSP |https://content-security-policy.com]. Le direttive CSP (come `script-src`) possono essere scritte come stringhe secondo le specifiche o come array di valori per una migliore leggibilità. Non è quindi necessario scrivere le virgolette intorno a parole chiave come `'self'`. Nette genererà automaticamente anche un valore di `nonce`, quindi `'nonce-y4PopTLM=='` sarà inviato nell'intestazione.

```neon
http:
	# Politica di sicurezza dei contenuti
	csp:
		# stringa secondo le specifiche CSP
		default-src: "'self' https://example.com"

		# array di valori
		script-src:
			- nonce
			- strict-dynamic
			- self
			- https://example.com

		# bool nel caso di switch
		upgrade-insecure-requests: true
		block-all-mixed-content: false
```

Utilizzare `<script n:nonce>...</script>` nei template e il valore nonce verrà compilato automaticamente. Creare siti web sicuri in Nette è davvero facile.

Allo stesso modo, è possibile aggiungere le intestazioni `Content-Security-Policy-Report-Only` (che può essere utilizzata in parallelo con CSP) e [Feature Policy |https://developers.google.com/web/updates/2018/06/feature-policy]:

```neon
http:
	# Rapporto sulla politica di sicurezza dei contenuti
	cspReportOnly:
		default-src: self
		report-uri: 'https://my-report-uri-endpoint'

	# Politica sulle caratteristiche
	featurePolicy:
		unsized-media: none
		geolocation:
			- self
			- https://example.com
```


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

È possibile modificare i valori predefiniti di alcuni parametri dei metodi [Nette\Http\Response::setCookie() |response#setCookie] e session.

```neon
http:
	# cookie scope per percorso
	cookiePath: ...          # (string) predefinito a "/".

	# quali host sono autorizzati a ricevere il cookie
	cookieDomain: 'example.com' # (string|dominio) predefinito a non impostato

	# inviare i cookie solo tramite HTTPS?
	cookieSecure: ...        # (bool|auto) predefinito a auto

	# disabilita l'invio del cookie che Nette usa come protezione contro il CSRF
	disableNetteCookie: ...  # (bool) predefinito a false
```

L'opzione `cookieDomain` determina quali domini (origini) possono accettare i cookie. Se non è specificata, il cookie viene accettato dallo stesso (sotto)dominio in cui è impostato, *escludendo* i suoi sottodomini. Se viene specificato `cookieDomain`, sono inclusi anche i sottodomini. Pertanto, specificare `cookieDomain` è meno restrittivo che ometterlo.

Ad esempio, se viene impostato `cookieDomain: nette.org`, il cookie è disponibile anche su tutti i sottodomini come `doc.nette.org`. Questo può essere ottenuto anche con il valore speciale `domain`, cioè `cookieDomain: domain`.

Il valore predefinito di `cookieSecure` è `auto`, il che significa che se il sito web funziona su HTTPS, i cookie saranno inviati con il flag `Secure` e saranno quindi disponibili solo tramite HTTPS.


Proxy HTTP .[#toc-http-proxy]
-----------------------------

Se il sito funziona dietro un proxy HTTP, inserire l'indirizzo IP del proxy in modo che il rilevamento delle connessioni HTTPS funzioni correttamente, oltre all'indirizzo IP del client. In altre parole, affinché [Nette\Http\Request::getRemoteAddress() |request#getRemoteAddress] e [isSecured() |request#isSecured] restituiscano i valori corretti e i link siano generati con il protocollo `https:` nei template.

```neon
http:
	# indirizzo IP, intervallo (es. 127.0.0.1/8) o array di questi valori
	proxy: 127.0.0.1 # (string|stringa[]) predefinito a nessuno
```


Sessione .[#toc-session]
========================

Impostazioni di base [delle sessioni |sessions]:

```neon
session:
	# mostra il pannello della sessione nella barra Tracy?
	debugger: ...        # (bool) predefinito a false

	# tempo di inattività dopo il quale la sessione scade
	expiration: 14 days  # (string) predefinito a "3 ore".

	# quando avviare la sessione?
	autoStart: ...       # (smart|true|false) predefinito a "smart".

	# handler, servizio che implementa l'interfaccia SessionHandlerInterface
	handler: @handlerService
```

L'opzione `autoStart` controlla quando avviare la sessione. Il valore `always` significa che la sessione viene sempre avviata all'avvio dell'applicazione. Il valore `smart` significa che la sessione verrà avviata all'avvio dell'applicazione solo se esiste già, oppure nel momento in cui si vuole leggere o scrivere su di essa. Infine, il valore `never` disabilita l'avvio automatico della sessione.

È inoltre possibile impostare tutte le [direttive di sessione |https://www.php.net/manual/en/session.configuration.php] di PHP (in formato camelCase) e anche [readAndClose |https://www.php.net/manual/en/function.session-start.php#refsect1-function.session-start-parameters]. Esempio:

```neon
session:
	# 'session.name' scritto come 'name'.
	name: MYID

	# 'session.save_path' scritto come 'savePath'
	savePath: "%tempDir%/sessioni"
```


Cookie di sessione .[#toc-session-cookie]
-----------------------------------------

Il cookie di sessione viene inviato con gli stessi parametri degli [altri cookie |#HTTP cookie], ma è possibile modificarli:

```neon
session:
	# quali host sono autorizzati a ricevere il cookie
	cookieDomain: 'example.com' # (string|dominio)

	# restrizioni per l'accesso a richieste di origine incrociata
	cookieSamesite: ...         # (Strict|Lax|None) predefinito a Lax
```

L'opzione `cookieSamesite` influisce sull'invio del cookie con le [richieste di origine incrociata |nette:glossary#SameSite cookie], il che fornisce una certa protezione contro gli attacchi di [Cross-Site Request Forgery |nette:glossary#cross-site-request-forgery-csrf].


Servizi DI .[#toc-di-services]
==============================

Questi servizi vengono aggiunti al contenitore DI:

| Nome | Tipo | Descrizione
|-----------------------------------------------------
| `http.request` | [api:Nette\Http\Request] | [Richiesta HTTP | request]
| `http.response` | [api:Nette\Http\Response] | [Risposta HTTP | response]
| `session.session` |[api:Nette\Http\Session] | [gestione della sessione | sessions]

Configurazione di HTTP

Panoramica delle opzioni di configurazione di Nette HTTP.

Se non si utilizza l'intero framework, ma solo questa libreria, leggere come caricare la configurazione.

Intestazioni HTTP

http:
	# intestazioni che vengono inviate con ogni richiesta
	headers:
		X-Powered-By: MyCMS
		X-Content-Type-Options: nosniff
		X-XSS-Protection: '1; mode=block'

	# influisce sull'intestazione X-Frame-Options
	frames: ...      # (string|bool) predefinito a "SAMEORIGIN".

Per motivi di sicurezza, il framework invia un'intestazione X-Frame-Options: SAMEORIGIN, che dice che una pagina può essere visualizzata all'interno di un'altra pagina (nell'elemento <iframe>) solo se si trova sullo stesso dominio. Questo può essere indesiderato in alcune situazioni (per esempio, se si sta sviluppando un'applicazione Facebook), quindi il comportamento può essere modificato impostando i frame frames: http://allowed-host.com.

Politica di sicurezza dei contenuti

Le intestazioni Content-Security-Policy (d'ora in poi denominate CSP) possono essere facilmente assemblate; la loro descrizione si trova nella descrizione delle CSP. Le direttive CSP (come script-src) possono essere scritte come stringhe secondo le specifiche o come array di valori per una migliore leggibilità. Non è quindi necessario scrivere le virgolette intorno a parole chiave come 'self'. Nette genererà automaticamente anche un valore di nonce, quindi 'nonce-y4PopTLM==' sarà inviato nell'intestazione.

http:
	# Politica di sicurezza dei contenuti
	csp:
		# stringa secondo le specifiche CSP
		default-src: "'self' https://example.com"

		# array di valori
		script-src:
			- nonce
			- strict-dynamic
			- self
			- https://example.com

		# bool nel caso di switch
		upgrade-insecure-requests: true
		block-all-mixed-content: false

Utilizzare <script n:nonce>...</script> nei template e il valore nonce verrà compilato automaticamente. Creare siti web sicuri in Nette è davvero facile.

Allo stesso modo, è possibile aggiungere le intestazioni Content-Security-Policy-Report-Only (che può essere utilizzata in parallelo con CSP) e Feature Policy:

http:
	# Rapporto sulla politica di sicurezza dei contenuti
	cspReportOnly:
		default-src: self
		report-uri: 'https://my-report-uri-endpoint'

	# Politica sulle caratteristiche
	featurePolicy:
		unsized-media: none
		geolocation:
			- self
			- https://example.com

È possibile modificare i valori predefiniti di alcuni parametri dei metodi Nette\Http\Response::setCookie() e session.

http:
	# cookie scope per percorso
	cookiePath: ...          # (string) predefinito a "/".

	# quali host sono autorizzati a ricevere il cookie
	cookieDomain: 'example.com' # (string|dominio) predefinito a non impostato

	# inviare i cookie solo tramite HTTPS?
	cookieSecure: ...        # (bool|auto) predefinito a auto

	# disabilita l'invio del cookie che Nette usa come protezione contro il CSRF
	disableNetteCookie: ...  # (bool) predefinito a false

L'opzione cookieDomain determina quali domini (origini) possono accettare i cookie. Se non è specificata, il cookie viene accettato dallo stesso (sotto)dominio in cui è impostato, escludendo i suoi sottodomini. Se viene specificato cookieDomain, sono inclusi anche i sottodomini. Pertanto, specificare cookieDomain è meno restrittivo che ometterlo.

Ad esempio, se viene impostato cookieDomain: nette.org, il cookie è disponibile anche su tutti i sottodomini come doc.nette.org. Questo può essere ottenuto anche con il valore speciale domain, cioè cookieDomain: domain.

Il valore predefinito di cookieSecure è auto, il che significa che se il sito web funziona su HTTPS, i cookie saranno inviati con il flag Secure e saranno quindi disponibili solo tramite HTTPS.

Proxy HTTP

Se il sito funziona dietro un proxy HTTP, inserire l'indirizzo IP del proxy in modo che il rilevamento delle connessioni HTTPS funzioni correttamente, oltre all'indirizzo IP del client. In altre parole, affinché Nette\Http\Request::getRemoteAddress() e isSecured() restituiscano i valori corretti e i link siano generati con il protocollo https: nei template.

http:
	# indirizzo IP, intervallo (es. 127.0.0.1/8) o array di questi valori
	proxy: 127.0.0.1 # (string|stringa[]) predefinito a nessuno

Sessione

Impostazioni di base delle sessioni:

session:
	# mostra il pannello della sessione nella barra Tracy?
	debugger: ...        # (bool) predefinito a false

	# tempo di inattività dopo il quale la sessione scade
	expiration: 14 days  # (string) predefinito a "3 ore".

	# quando avviare la sessione?
	autoStart: ...       # (smart|true|false) predefinito a "smart".

	# handler, servizio che implementa l'interfaccia SessionHandlerInterface
	handler: @handlerService

L'opzione autoStart controlla quando avviare la sessione. Il valore always significa che la sessione viene sempre avviata all'avvio dell'applicazione. Il valore smart significa che la sessione verrà avviata all'avvio dell'applicazione solo se esiste già, oppure nel momento in cui si vuole leggere o scrivere su di essa. Infine, il valore never disabilita l'avvio automatico della sessione.

È inoltre possibile impostare tutte le direttive di sessione di PHP (in formato camelCase) e anche readAndClose. Esempio:

session:
	# 'session.name' scritto come 'name'.
	name: MYID

	# 'session.save_path' scritto come 'savePath'
	savePath: "%tempDir%/sessioni"

Il cookie di sessione viene inviato con gli stessi parametri degli altri cookie, ma è possibile modificarli:

session:
	# quali host sono autorizzati a ricevere il cookie
	cookieDomain: 'example.com' # (string|dominio)

	# restrizioni per l'accesso a richieste di origine incrociata
	cookieSamesite: ...         # (Strict|Lax|None) predefinito a Lax

L'opzione cookieSamesite influisce sull'invio del cookie con le richieste di origine incrociata, il che fornisce una certa protezione contro gli attacchi di Cross-Site Request Forgery.

Servizi DI

Questi servizi vengono aggiunti al contenitore DI:

Nome Tipo Descrizione
http.request Nette\Http\Request Richiesta HTTP
http.response Nette\Http\Response Risposta HTTP
session.session Nette\Http\Session gestione della sessione