Nette Documentation Preview

syntax
Configuration HTTP
******************

.[perex]
Aperçu des options de configuration pour Nette HTTP.

Si vous n'utilisez pas l'ensemble du framework, mais seulement cette bibliothèque, lisez [comment charger la configuration |bootstrap:].


En-têtes HTTP
=============

```neon
http:
	# en-têtes qui seront envoyés avec chaque requête
	headers:
		X-Powered-By: MyCMS
		X-Content-Type-Options: nosniff
		X-XSS-Protection: '1; mode=block'

	# affecte l'en-tête X-Frame-Options
	frames: ...      # (string|bool) la valeur par défaut est 'SAMEORIGIN'
```

Pour des raisons de sécurité, le framework envoie l'en-tête `X-Frame-Options: SAMEORIGIN`, qui indique que la page ne peut être affichée à l'intérieur d'une autre page (dans un élément `<iframe>`) que si elle se trouve sur le même domaine. Cela peut être indésirable dans certaines situations (par exemple, si vous développez une application pour Facebook), le comportement peut donc être modifié en définissant `frames: http://allowed-host.com` ou `frames: true`.


Content Security Policy
-----------------------

Il est facile de construire des en-têtes `Content-Security-Policy` (ci-après CSP), dont la description se trouve dans la [description de CSP |https://content-security-policy.com]. Les directives CSP (comme par exemple `script-src`) peuvent être écrites soit comme des chaînes de caractères selon la spécification, soit comme des tableaux de valeurs pour une meilleure lisibilité. Il n'est alors pas nécessaire d'écrire des guillemets autour des mots-clés, comme par exemple `'self'`. Nette génère également automatiquement la valeur `nonce`, de sorte que l'en-tête contiendra par exemple `'nonce-y4PopTLM=='`.

```neon
http:
	# Content Security Policy
	csp:
		# chaîne de caractères au format selon la spécification CSP
		default-src: "'self' https://example.com"

		# tableau de valeurs
		script-src:
			- nonce
			- strict-dynamic
			- self
			- https://example.com

		# booléen dans le cas des commutateurs
		upgrade-insecure-requests: true
		block-all-mixed-content: false
```

Dans les templates, utilisez `<script n:nonce>...</script>` et la valeur nonce sera complétée automatiquement. Créer des sites web sécurisés dans Nette est vraiment facile.

De même, il est possible de construire les en-têtes `Content-Security-Policy-Report-Only` (qui peuvent être utilisés en parallèle avec CSP) et [Feature Policy|https://developers.google.com/web/updates/2018/06/feature-policy] :

```neon
http:
	# Content Security Policy Report-Only
	cspReportOnly:
		default-src: self
		report-uri: 'https://my-report-uri-endpoint'

	# Feature Policy
	featurePolicy:
		unsized-media: none
		geolocation:
			- self
			- https://example.com
```


Cookie HTTP
-----------

Il est possible de modifier les valeurs par défaut de certains paramètres de la méthode [Nette\Http\Response::setCookie() |response#setCookie] et de la session.

```neon
http:
	# portée du cookie selon le chemin
	cookiePath: ...          # (string) la valeur par défaut est '/'

	# domaines qui acceptent le cookie
	cookieDomain: 'example.com'  # (string|domain) la valeur par défaut n'est pas définie

	# envoyer le cookie uniquement via HTTPS ?
	cookieSecure: ...        # (bool|auto) la valeur par défaut est auto

	# désactive l'envoi du cookie utilisé par Nette comme protection contre CSRF
	disableNetteCookie: ...  # (bool) la valeur par défaut est false
```

L'attribut `cookieDomain` détermine quels domaines peuvent accepter le cookie. S'il n'est pas spécifié, le cookie est accepté par le même (sous-)domaine qui l'a défini, *mais pas* par ses sous-domaines. Si `cookieDomain` est spécifié, les sous-domaines sont également inclus. Par conséquent, spécifier `cookieDomain` est moins restrictif que de l'omettre.

Par exemple, avec `cookieDomain: nette.org`, les cookies sont également disponibles sur tous les sous-domaines comme `doc.nette.org`. Le même résultat peut également être obtenu en utilisant la valeur spéciale `domain`, c'est-à-dire `cookieDomain: domain`.

La valeur par défaut `auto` pour l'attribut `cookieSecure` signifie que si le site fonctionne en HTTPS, les cookies seront envoyés avec l'indicateur `Secure` et ne seront donc disponibles que via HTTPS.


Proxy HTTP
----------

Si le site fonctionne derrière un proxy HTTP, spécifiez son adresse IP pour que la détection de la connexion via HTTPS et l'adresse IP du client fonctionnent correctement. C'est-à-dire pour que les fonctions [Nette\Http\Request::getRemoteAddress() |request#getRemoteAddress] et [isSecured() |request#isSecured] retournent les bonnes valeurs et que les liens avec le protocole `https:` soient générés dans les templates.

```neon
http:
	# Adresse IP, plage (par ex. 127.0.0.1/8) ou tableau de ces valeurs
	proxy: 127.0.0.1       # (string|string[]) la valeur par défaut n'est pas définie
```


Session
=======

Configuration de base des [sessions |sessions] :

```neon
session:
	# afficher le panneau de session dans la barre Tracy ?
	debugger: ...        # (bool) la valeur par défaut est false

	# durée d'inactivité après laquelle la session expire
	expiration: 14 days  # (string) la valeur par défaut est '3 hours'

	# quand la session doit-elle démarrer ?
	autoStart: ...       # (smart|always|never) la valeur par défaut est 'smart'

	# gestionnaire, service implémentant l'interface SessionHandlerInterface
	handler: @handlerService
```

L'option `autoStart` contrôle quand la session doit démarrer. La valeur `always` signifie que la session démarrera toujours au lancement de l'application. La valeur `smart` signifie que la session ne démarrera au lancement de l'application que si elle existe déjà, ou au moment où nous voulons lire ou écrire dedans. Enfin, la valeur `never` interdit le démarrage automatique de la session.

De plus, il est possible de définir toutes les [directives de session PHP |https://www.php.net/manual/en/session.configuration.php] (au format camelCase) ainsi que [readAndClose |https://www.php.net/manual/en/function.session-start.php#refsect1-function.session-start-parameters]. Exemple :

```neon
session:
	# 'session.name' s'écrit 'name'
	name: MYID

	# 'session.save_path' s'écrit 'savePath'
	savePath: "%tempDir%/sessions"
```


Cookie de session
-----------------

Le cookie de session est envoyé avec les mêmes paramètres que les [autres cookies |#Cookie HTTP], mais vous pouvez modifier ceux-ci pour lui :

```neon
session:
	# domaines qui acceptent le cookie
	cookieDomain: 'example.com'   # (string|domain)

	# restriction lors de l'accès depuis un autre domaine
	cookieSamesite: None          # (Strict|Lax|None) la valeur par défaut est Lax
```

L'attribut `cookieSamesite` influence si le cookie sera envoyé lors d'un [accès depuis un domaine différent |nette:glossary#Cookie SameSite], ce qui offre une certaine protection contre les attaques [Cross-Site Request Forgery |nette:glossary#Cross-Site Request Forgery CSRF] (CSRF).


Services DI
===========

Ces services sont ajoutés au conteneur DI :

| Nom             | Type                       | Description
|-----------------------------------------------------|
| `http.request`	  | [api:Nette\Http\Request]   | [Requête HTTP | request]
| `http.response`	  | [api:Nette\Http\Response]  | [Réponse HTTP | response]
| `session.session`   | [api:Nette\Http\Session]   | [Gestion de session | sessions]

Configuration HTTP

Aperçu des options de configuration pour Nette HTTP.

Si vous n'utilisez pas l'ensemble du framework, mais seulement cette bibliothèque, lisez comment charger la configuration.

En-têtes HTTP

http:
	# en-têtes qui seront envoyés avec chaque requête
	headers:
		X-Powered-By: MyCMS
		X-Content-Type-Options: nosniff
		X-XSS-Protection: '1; mode=block'

	# affecte l'en-tête X-Frame-Options
	frames: ...      # (string|bool) la valeur par défaut est 'SAMEORIGIN'

Pour des raisons de sécurité, le framework envoie l'en-tête X-Frame-Options: SAMEORIGIN, qui indique que la page ne peut être affichée à l'intérieur d'une autre page (dans un élément <iframe>) que si elle se trouve sur le même domaine. Cela peut être indésirable dans certaines situations (par exemple, si vous développez une application pour Facebook), le comportement peut donc être modifié en définissant frames: http://allowed-host.com ou frames: true.

Content Security Policy

Il est facile de construire des en-têtes Content-Security-Policy (ci-après CSP), dont la description se trouve dans la description de CSP. Les directives CSP (comme par exemple script-src) peuvent être écrites soit comme des chaînes de caractères selon la spécification, soit comme des tableaux de valeurs pour une meilleure lisibilité. Il n'est alors pas nécessaire d'écrire des guillemets autour des mots-clés, comme par exemple 'self'. Nette génère également automatiquement la valeur nonce, de sorte que l'en-tête contiendra par exemple 'nonce-y4PopTLM=='.

http:
	# Content Security Policy
	csp:
		# chaîne de caractères au format selon la spécification CSP
		default-src: "'self' https://example.com"

		# tableau de valeurs
		script-src:
			- nonce
			- strict-dynamic
			- self
			- https://example.com

		# booléen dans le cas des commutateurs
		upgrade-insecure-requests: true
		block-all-mixed-content: false

Dans les templates, utilisez <script n:nonce>...</script> et la valeur nonce sera complétée automatiquement. Créer des sites web sécurisés dans Nette est vraiment facile.

De même, il est possible de construire les en-têtes Content-Security-Policy-Report-Only (qui peuvent être utilisés en parallèle avec CSP) et Feature Policy :

http:
	# Content Security Policy Report-Only
	cspReportOnly:
		default-src: self
		report-uri: 'https://my-report-uri-endpoint'

	# Feature Policy
	featurePolicy:
		unsized-media: none
		geolocation:
			- self
			- https://example.com

Il est possible de modifier les valeurs par défaut de certains paramètres de la méthode Nette\Http\Response::setCookie() et de la session.

http:
	# portée du cookie selon le chemin
	cookiePath: ...          # (string) la valeur par défaut est '/'

	# domaines qui acceptent le cookie
	cookieDomain: 'example.com'  # (string|domain) la valeur par défaut n'est pas définie

	# envoyer le cookie uniquement via HTTPS ?
	cookieSecure: ...        # (bool|auto) la valeur par défaut est auto

	# désactive l'envoi du cookie utilisé par Nette comme protection contre CSRF
	disableNetteCookie: ...  # (bool) la valeur par défaut est false

L'attribut cookieDomain détermine quels domaines peuvent accepter le cookie. S'il n'est pas spécifié, le cookie est accepté par le même (sous-)domaine qui l'a défini, mais pas par ses sous-domaines. Si cookieDomain est spécifié, les sous-domaines sont également inclus. Par conséquent, spécifier cookieDomain est moins restrictif que de l'omettre.

Par exemple, avec cookieDomain: nette.org, les cookies sont également disponibles sur tous les sous-domaines comme doc.nette.org. Le même résultat peut également être obtenu en utilisant la valeur spéciale domain, c'est-à-dire cookieDomain: domain.

La valeur par défaut auto pour l'attribut cookieSecure signifie que si le site fonctionne en HTTPS, les cookies seront envoyés avec l'indicateur Secure et ne seront donc disponibles que via HTTPS.

Proxy HTTP

Si le site fonctionne derrière un proxy HTTP, spécifiez son adresse IP pour que la détection de la connexion via HTTPS et l'adresse IP du client fonctionnent correctement. C'est-à-dire pour que les fonctions Nette\Http\Request::getRemoteAddress() et isSecured() retournent les bonnes valeurs et que les liens avec le protocole https: soient générés dans les templates.

http:
	# Adresse IP, plage (par ex. 127.0.0.1/8) ou tableau de ces valeurs
	proxy: 127.0.0.1       # (string|string[]) la valeur par défaut n'est pas définie

Session

Configuration de base des sessions :

session:
	# afficher le panneau de session dans la barre Tracy ?
	debugger: ...        # (bool) la valeur par défaut est false

	# durée d'inactivité après laquelle la session expire
	expiration: 14 days  # (string) la valeur par défaut est '3 hours'

	# quand la session doit-elle démarrer ?
	autoStart: ...       # (smart|always|never) la valeur par défaut est 'smart'

	# gestionnaire, service implémentant l'interface SessionHandlerInterface
	handler: @handlerService

L'option autoStart contrôle quand la session doit démarrer. La valeur always signifie que la session démarrera toujours au lancement de l'application. La valeur smart signifie que la session ne démarrera au lancement de l'application que si elle existe déjà, ou au moment où nous voulons lire ou écrire dedans. Enfin, la valeur never interdit le démarrage automatique de la session.

De plus, il est possible de définir toutes les directives de session PHP (au format camelCase) ainsi que readAndClose. Exemple :

session:
	# 'session.name' s'écrit 'name'
	name: MYID

	# 'session.save_path' s'écrit 'savePath'
	savePath: "%tempDir%/sessions"

Le cookie de session est envoyé avec les mêmes paramètres que les autres cookies, mais vous pouvez modifier ceux-ci pour lui :

session:
	# domaines qui acceptent le cookie
	cookieDomain: 'example.com'   # (string|domain)

	# restriction lors de l'accès depuis un autre domaine
	cookieSamesite: None          # (Strict|Lax|None) la valeur par défaut est Lax

L'attribut cookieSamesite influence si le cookie sera envoyé lors d'un accès depuis un domaine différent, ce qui offre une certaine protection contre les attaques Cross-Site Request Forgery (CSRF).

Services DI

Ces services sont ajoutés au conteneur DI :

Nom Type Description
http.request Nette\Http\Request Requête HTTP
http.response Nette\Http\Response Réponse HTTP
session.session Nette\Http\Session Gestion de session