Nette Documentation Preview

syntax
HTTP konfigurieren
******************

.[perex]
Überblick über die Konfigurationsmöglichkeiten für Nette HTTP.

Wenn Sie nicht das gesamte Framework, sondern nur diese Bibliothek verwenden, lesen Sie [, wie Sie die Konfiguration laden |bootstrap:].


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

```neon
http:
	# Header, die mit jeder Anfrage gesendet werden
	headers:
		X-Powered-By: MyCMS
		X-Content-Type-Options: nosniff
		X-XSS-Protection: '1; mode=block'

	# betrifft den Header X-Frame-Options
	frames: ...      # (string|bool) Standardwert ist 'SAMEORIGIN'
```

Aus Sicherheitsgründen sendet das Framework einen Header `X-Frame-Options: SAMEORIGIN`, der besagt, dass eine Seite nur dann innerhalb einer anderen Seite angezeigt werden kann (im Element `<iframe>`) nur angezeigt werden kann, wenn sie sich auf derselben Domäne befindet. Dies kann in bestimmten Situationen unerwünscht sein (z. B. wenn Sie eine Facebook-Anwendung entwickeln), daher kann das Verhalten durch die Einstellung von `frames: http://allowed-host.com`.


Sicherheitsrichtlinien für Inhalte .[#toc-content-security-policy]
------------------------------------------------------------------

Header `Content-Security-Policy` (im Folgenden als CSP bezeichnet) lassen sich leicht zusammenstellen, ihre Beschreibung ist in der [CSP-Beschreibung |https://content-security-policy.com] zu finden. CSP-Direktiven (wie z. B. `script-src`) können zur besseren Lesbarkeit entweder als Zeichenketten gemäß der Spezifikation oder als Arrays von Werten geschrieben werden. Dann ist es nicht notwendig, Anführungszeichen um Schlüsselwörter wie `'self'` zu setzen. Nette generiert auch automatisch einen Wert von `nonce`, so dass `'nonce-y4PopTLM=='` im Header gesendet wird.

```neon
http:
	# Content Security Policy
	csp:
		# String gemäß CSP-Spezifikation
		default-src: "'self' https://example.com"

		# Array von Werten
		script-src:
			- nonce
			- strict-dynamic
			- self
			- https://example.com

		# bool für den Fall von Schaltern
		upgrade-insecure-requests: true
		block-all-mixed-content: false
```

Verwenden Sie `<script n:nonce>...</script>` in den Vorlagen und der Nonce-Wert wird automatisch ausgefüllt. Die Erstellung sicherer Websites in Nette ist wirklich einfach.

In ähnlicher Weise können die Header `Content-Security-Policy-Report-Only` (die parallel zu CSP verwendet werden können) und [Feature Policy |https://developers.google.com/web/updates/2018/06/feature-policy] hinzugefügt werden:

```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
```


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

Sie können die Standardwerte einiger Parameter der Methoden [Nette\Http\Response::setCookie() |response#setCookie] und session ändern.

```neon
http:
	# Cookie-Bereich nach Pfad
	cookiePath: ...        # (String) standardmäßig '/'

	# welche Hosts das Cookie empfangen dürfen
	cookieDomain: 'example.com' # (string|domain) ist standardmäßig nicht gesetzt

	# Cookies nur über HTTPS senden?
	cookieSecure: ...      # (bool|auto) ist standardmäßig auf auto eingestellt

	# deaktiviert das Senden des Cookies, das Nette als Schutz gegen CSRF verwendet
	disableNetteCookie: ...  # (bool) Standardwert ist false
```

Die Option `cookieDomain` bestimmt, welche Domänen (Ursprünge) Cookies akzeptieren können. Ist sie nicht angegeben, wird das Cookie von derselben (Sub-)Domain akzeptiert, die es gesetzt hat, *ausgenommen* deren Subdomains. Wenn `cookieDomain` angegeben ist, werden auch Subdomains einbezogen. Daher ist die Angabe von `cookieDomain` weniger restriktiv als das Weglassen.

Wenn z. B. `cookieDomain: nette.org` angegeben wird, ist das Cookie auch auf allen Subdomains wie `doc.nette.org` verfügbar. Dies kann auch mit dem speziellen Wert `domain`, also `cookieDomain: domain` erreicht werden.

Der Standardwert von `cookieSecure` ist `auto`, d. h. wenn die Website über HTTPS läuft, werden Cookies mit dem Flag `Secure` gesendet und sind daher nur über HTTPS verfügbar.


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

Wenn die Website hinter einem HTTP-Proxy läuft, geben Sie die IP-Adresse des Proxys ein, damit die Erkennung von HTTPS-Verbindungen korrekt funktioniert, sowie die IP-Adresse des Clients. Das heißt, damit [Nette\Http\Request::getRemoteAddress() |request#getRemoteAddress] und [isSecured() |request#isSecured] die richtigen Werte zurückgeben und Links mit dem Protokoll `https:` in den Vorlagen erzeugt werden.

```neon
http:
	# IP-Adresse, Bereich (z. B. 127.0.0.1/8) oder Array dieser Werte
	proxy: 127.0.0.1 # (string|string[]) ist standardmäßig none
```


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

Grundeinstellungen für [Sessionen |sessions]:

```neon
session:
	# zeigt das Sessionsfenster in der Tracy Bar?
	debugger: ...        # (bool) ist standardmäßig auf false eingestellt

	# Inaktivitätszeit, nach der die Session abläuft
	expiration: 14 days  # (string) Standardwert ist '3 Stunden'

	# wann wird die Session gestartet?
	autoStart: ...       # (smart|always|never) Standardwert ist 'smart'

	# handler, Dienst, der die Schnittstelle SessionHandlerInterface implementiert
	handler: @handlerService
```

Mit der Option `autoStart` wird festgelegt, wann die Session gestartet werden soll. Der Wert `always` bedeutet, dass die Session immer gestartet wird, wenn die Anwendung startet. Der Wert `smart` bedeutet, dass die Session beim Starten der Anwendung nur dann gestartet wird, wenn sie bereits existiert, oder in dem Moment, in dem wir aus ihr lesen oder in sie schreiben wollen. Mit dem Wert `never` schließlich wird der automatische Start der Session deaktiviert.

Sie können auch alle [PHP-Session-Direktiven |https://www.php.net/manual/en/session.configuration.php] (im camelCase-Format) und auch [readAndClose |https://www.php.net/manual/en/function.session-start.php#refsect1-function.session-start-parameters] setzen. Beispiel:

```neon
session:
	# 'session.name' geschrieben als 'name'
	name: MYID

	# 'session.save_path' geschrieben als 'savePath'
	savePath: "%tempDir%/sessions"
```


Sessions-Cookie .[#toc-session-cookie]
--------------------------------------

Das Sessions-Cookie wird mit denselben Parametern wie [andere Cookies |#HTTP cookie] gesendet, aber Sie können diese Parameter ändern:

```neon
session:
	# welche Hosts dürfen das Cookie erhalten
	cookieDomain: 'example.com' # (string|domain)

	# Einschränkungen beim Zugriff auf herkunftsübergreifende Anfragen
	cookieSamesite: None        # (Strict|Lax|None) Standardwert ist Lax
```

Die Option `cookieSamesite` bestimmt, ob das Cookie bei [herkunftsübergreifenden Anfragen |nette:glossary#SameSite cookie] gesendet wird, was einen gewissen Schutz gegen [Cross-Site Request Forgery-Angriffe |nette:glossary#cross-site-request-forgery-csrf] bietet.


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

Diese Dienste werden dem DI-Container hinzugefügt:

| Name | Typ | Beschreibung
|-----------------------------------------------------
| `http.request` | [api:Nette\Http\Request] | [HTTP-Anfrage | request]
| `http.response` | [api:Nette\Http\Response] | [HTTP-Antwort | response]
| `session.session` |[api:Nette\Http\Session] | [Sitzungsverwaltung | sessions]

HTTP konfigurieren

Überblick über die Konfigurationsmöglichkeiten für Nette HTTP.

Wenn Sie nicht das gesamte Framework, sondern nur diese Bibliothek verwenden, lesen Sie , wie Sie die Konfiguration laden.

HTTP-Kopfzeilen

http:
	# Header, die mit jeder Anfrage gesendet werden
	headers:
		X-Powered-By: MyCMS
		X-Content-Type-Options: nosniff
		X-XSS-Protection: '1; mode=block'

	# betrifft den Header X-Frame-Options
	frames: ...      # (string|bool) Standardwert ist 'SAMEORIGIN'

Aus Sicherheitsgründen sendet das Framework einen Header X-Frame-Options: SAMEORIGIN, der besagt, dass eine Seite nur dann innerhalb einer anderen Seite angezeigt werden kann (im Element <iframe>) nur angezeigt werden kann, wenn sie sich auf derselben Domäne befindet. Dies kann in bestimmten Situationen unerwünscht sein (z. B. wenn Sie eine Facebook-Anwendung entwickeln), daher kann das Verhalten durch die Einstellung von frames: http://allowed-host.com.

Sicherheitsrichtlinien für Inhalte

Header Content-Security-Policy (im Folgenden als CSP bezeichnet) lassen sich leicht zusammenstellen, ihre Beschreibung ist in der CSP-Beschreibung zu finden. CSP-Direktiven (wie z. B. script-src) können zur besseren Lesbarkeit entweder als Zeichenketten gemäß der Spezifikation oder als Arrays von Werten geschrieben werden. Dann ist es nicht notwendig, Anführungszeichen um Schlüsselwörter wie 'self' zu setzen. Nette generiert auch automatisch einen Wert von nonce, so dass 'nonce-y4PopTLM==' im Header gesendet wird.

http:
	# Content Security Policy
	csp:
		# String gemäß CSP-Spezifikation
		default-src: "'self' https://example.com"

		# Array von Werten
		script-src:
			- nonce
			- strict-dynamic
			- self
			- https://example.com

		# bool für den Fall von Schaltern
		upgrade-insecure-requests: true
		block-all-mixed-content: false

Verwenden Sie <script n:nonce>...</script> in den Vorlagen und der Nonce-Wert wird automatisch ausgefüllt. Die Erstellung sicherer Websites in Nette ist wirklich einfach.

In ähnlicher Weise können die Header Content-Security-Policy-Report-Only (die parallel zu CSP verwendet werden können) und Feature Policy hinzugefügt werden:

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

Sie können die Standardwerte einiger Parameter der Methoden Nette\Http\Response::setCookie() und session ändern.

http:
	# Cookie-Bereich nach Pfad
	cookiePath: ...        # (String) standardmäßig '/'

	# welche Hosts das Cookie empfangen dürfen
	cookieDomain: 'example.com' # (string|domain) ist standardmäßig nicht gesetzt

	# Cookies nur über HTTPS senden?
	cookieSecure: ...      # (bool|auto) ist standardmäßig auf auto eingestellt

	# deaktiviert das Senden des Cookies, das Nette als Schutz gegen CSRF verwendet
	disableNetteCookie: ...  # (bool) Standardwert ist false

Die Option cookieDomain bestimmt, welche Domänen (Ursprünge) Cookies akzeptieren können. Ist sie nicht angegeben, wird das Cookie von derselben (Sub-)Domain akzeptiert, die es gesetzt hat, ausgenommen deren Subdomains. Wenn cookieDomain angegeben ist, werden auch Subdomains einbezogen. Daher ist die Angabe von cookieDomain weniger restriktiv als das Weglassen.

Wenn z. B. cookieDomain: nette.org angegeben wird, ist das Cookie auch auf allen Subdomains wie doc.nette.org verfügbar. Dies kann auch mit dem speziellen Wert domain, also cookieDomain: domain erreicht werden.

Der Standardwert von cookieSecure ist auto, d. h. wenn die Website über HTTPS läuft, werden Cookies mit dem Flag Secure gesendet und sind daher nur über HTTPS verfügbar.

HTTP-Proxy

Wenn die Website hinter einem HTTP-Proxy läuft, geben Sie die IP-Adresse des Proxys ein, damit die Erkennung von HTTPS-Verbindungen korrekt funktioniert, sowie die IP-Adresse des Clients. Das heißt, damit Nette\Http\Request::getRemoteAddress() und isSecured() die richtigen Werte zurückgeben und Links mit dem Protokoll https: in den Vorlagen erzeugt werden.

http:
	# IP-Adresse, Bereich (z. B. 127.0.0.1/8) oder Array dieser Werte
	proxy: 127.0.0.1 # (string|string[]) ist standardmäßig none

Session

Grundeinstellungen für Sessionen:

session:
	# zeigt das Sessionsfenster in der Tracy Bar?
	debugger: ...        # (bool) ist standardmäßig auf false eingestellt

	# Inaktivitätszeit, nach der die Session abläuft
	expiration: 14 days  # (string) Standardwert ist '3 Stunden'

	# wann wird die Session gestartet?
	autoStart: ...       # (smart|always|never) Standardwert ist 'smart'

	# handler, Dienst, der die Schnittstelle SessionHandlerInterface implementiert
	handler: @handlerService

Mit der Option autoStart wird festgelegt, wann die Session gestartet werden soll. Der Wert always bedeutet, dass die Session immer gestartet wird, wenn die Anwendung startet. Der Wert smart bedeutet, dass die Session beim Starten der Anwendung nur dann gestartet wird, wenn sie bereits existiert, oder in dem Moment, in dem wir aus ihr lesen oder in sie schreiben wollen. Mit dem Wert never schließlich wird der automatische Start der Session deaktiviert.

Sie können auch alle PHP-Session-Direktiven (im camelCase-Format) und auch readAndClose setzen. Beispiel:

session:
	# 'session.name' geschrieben als 'name'
	name: MYID

	# 'session.save_path' geschrieben als 'savePath'
	savePath: "%tempDir%/sessions"

Das Sessions-Cookie wird mit denselben Parametern wie andere Cookies gesendet, aber Sie können diese Parameter ändern:

session:
	# welche Hosts dürfen das Cookie erhalten
	cookieDomain: 'example.com' # (string|domain)

	# Einschränkungen beim Zugriff auf herkunftsübergreifende Anfragen
	cookieSamesite: None        # (Strict|Lax|None) Standardwert ist Lax

Die Option cookieSamesite bestimmt, ob das Cookie bei herkunftsübergreifenden Anfragen gesendet wird, was einen gewissen Schutz gegen Cross-Site Request Forgery-Angriffe bietet.

DI-Dienste

Diese Dienste werden dem DI-Container hinzugefügt:

Name Typ Beschreibung
http.request Nette\Http\Request HTTP-Anfrage
http.response Nette\Http\Response HTTP-Antwort
session.session Nette\Http\Session Sitzungsverwaltung