Nette Documentation Preview

syntax
HTTP-Konfiguration
******************

.[perex]
Übersicht der Konfigurationsoptionen für Nette HTTP.

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


HTTP-Header
===========

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

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

Aus Sicherheitsgründen sendet das Framework den Header `X-Frame-Options: SAMEORIGIN`, der besagt, dass eine Seite nur dann innerhalb einer anderen Seite (in einem `<iframe>`-Element) angezeigt werden darf, wenn sie auf derselben Domain liegt. In bestimmten Situationen kann das unerwünscht sein (etwa wenn Sie eine Facebook-Anwendung entwickeln), das Verhalten lässt sich also ändern: `frames: http://allowed-host.com` erlaubt einen bestimmten Host, `frames: true` erlaubt das Einbetten von überall (der Header entfällt) und `frames: false` verbietet es vollständig (`X-Frame-Options: DENY`).

Standardmäßig sendet Nette außerdem die Header `X-Powered-By: Nette Framework 3` und `Content-Type: text/html; charset=utf-8`. Jeden Header, auch diese Standardheader, können Sie entfernen, indem Sie seinen Wert auf einen leeren String setzen.


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

Die Header `Content-Security-Policy` (CSP) lassen sich leicht konfigurieren; ihre Beschreibung finden Sie in der [CSP-Spezifikation |https://content-security-policy.com]. CSP-Direktiven (etwa `script-src`) können entweder als Strings gemäß der Spezifikation oder für die bessere Lesbarkeit als Arrays von Werten geschrieben werden. Dann müssen um Schlüsselwörter wie `'self'` keine Anführungszeichen gesetzt werden. Nette erzeugt außerdem automatisch einen `nonce`-Wert, sodass im Header etwa `'nonce-y4PopTLM=='` gesendet wird.

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

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

		# bool im Fall von Schaltern
		upgrade-insecure-requests: true
		block-all-mixed-content: false
```

Verwenden Sie in Templates `<script n:nonce>...</script>`, und der nonce-Wert wird automatisch eingesetzt. Sichere Websites in Nette zu bauen ist wirklich einfach.

Ähnlich lassen sich die Header `Content-Security-Policy-Report-Only` (die parallel zu CSP verwendet werden können) und die [Feature Policy |https://developers.google.com/web/updates/2018/06/feature-policy] konfigurieren:

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

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

```neon
http:
	# Gültigkeitsbereich des Cookies nach Pfad
	cookiePath: ...          # (string) Standardwert ist '/'

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

	# Cookies nur über HTTPS senden?
	cookieSecure: ...        # (bool|auto) Standardwert ist auto

	# schaltet das Senden des Cookies ab, das Nette zum CSRF-Schutz verwendet
	disableNetteCookie: ...  # (bool) Standardwert ist false
```

Das Attribut `cookieDomain` bestimmt, welche Domains (Origins) das Cookie annehmen dürfen. Wird es nicht angegeben, nimmt es dieselbe (Sub-)Domain an, die es gesetzt hat, *ohne* deren Subdomains. Ist `cookieDomain` angegeben, sind auch die Subdomains eingeschlossen. Die Angabe von `cookieDomain` ist also weniger einschränkend als ihr Weglassen.

Ist zum Beispiel `cookieDomain: nette.org` gesetzt, sind die Cookies auch auf allen Subdomains wie `doc.nette.org` verfügbar. Dasselbe erreichen Sie mit dem speziellen Wert `domain`, also `cookieDomain: domain`.

Der Standardwert `auto` beim Attribut `cookieSecure` bedeutet, dass die Cookies mit dem Flag `Secure` gesendet werden und damit nur über HTTPS verfügbar sind, wenn die Website über HTTPS läuft.


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

Läuft die Site hinter einem HTTP-Proxy, geben Sie die IP-Adresse des Proxys an, damit die Erkennung der HTTPS-Verbindung und der IP-Adresse des Clients korrekt funktioniert. Also damit [Nette\Http\Request::getRemoteAddress() |request#getRemoteAddress()] und [isSecured() |request#isSecured()] die richtigen Werte zurückgeben und die Links in Templates mit dem Protokoll `https:` erzeugt werden.

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


HTTPS erzwingen .{data-version:3.3.4}
-------------------------------------

Erzwingt bedingungslos das Schema HTTPS für den Request. Das ist nützlich für reine HTTPS-Sites, die hinter einem Load Balancer oder Reverse Proxy laufen, der TLS terminiert, aber den Header `X-Forwarded-Proto` nicht weitergibt, sodass die übliche HTTPS-Erkennung (auch mit konfiguriertem [#HTTP-Proxy]) das nicht bemerken würde.

```neon
http:
	# HTTPS-Schema für alle Requests erzwingen
	forceHttps: true       # (bool) Standardwert ist false
```


Session
=======

Grundlegende Einstellungen der [Sessions |sessions]:

```neon
session:
	# das Session-Panel in der Tracy Bar anzeigen?
	debugger: ...        # (bool) Standardwert ist false

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

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

	# Handler, ein Service, der SessionHandlerInterface implementiert
	handler: @handlerService
```

Die Option `autoStart` steuert, wann die Session starten soll. Der Wert `always` bedeutet, dass die Session immer beim Start der Anwendung startet. Der Wert `smart` bedeutet, dass die Session mit der Anwendung nur dann startet, wenn sie bereits existiert, oder in dem Moment, in dem wir aus ihr lesen oder in sie schreiben wollen. Der Wert `never` schließlich schaltet den automatischen Start der Session ab.

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

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

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


Session-Cookie
--------------

Das Session-Cookie wird mit denselben Parametern gesendet wie [andere Cookies |#HTTP-Cookie], Sie können sie aber speziell dafür ändern:

```neon
session:
	# Domains, die das Cookie empfangen dürfen
	cookieDomain: 'example.com'   # (string|domain)

	# Einschränkung für den Cross-Origin-Zugriff
	cookieSamesite: None          # (Strict|Lax|None) Standardwert ist Lax
```

Das Attribut `cookieSamesite` beeinflusst, ob das Cookie bei [Cross-Origin-Requests |nette:glossary#SameSite-Cookie] gesendet wird, was einen gewissen Schutz gegen Angriffe vom Typ [Cross-Site Request Forgery |nette:glossary#Cross-Site Request Forgery (CSRF)] (CSRF) bietet.


DI-Services
===========

Diese Services werden dem DI-Container hinzugefügt:

| Name            | Typ                        | Beschreibung
|-----------------|----------------------------|---------------------------
| `http.request`  | [api:Nette\Http\Request]   | [HTTP-Request |request]
| `http.response` | [api:Nette\Http\Response]  | [HTTP-Response |response]
| `session.session`| [api:Nette\Http\Session]   | [Session-Verwaltung |sessions]
| `http.requestFactory`| [api:Nette\Http\RequestFactory] | Factory, die den HTTP-Request erzeugt

HTTP-Konfiguration

Übersicht der Konfigurationsoptionen für Nette HTTP.

Wenn Sie nicht das gesamte Framework, sondern nur diese Bibliothek verwenden, lesen Sie, wie man die Konfiguration lädt.

HTTP-Header

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

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

Aus Sicherheitsgründen sendet das Framework den Header X-Frame-Options: SAMEORIGIN, der besagt, dass eine Seite nur dann innerhalb einer anderen Seite (in einem <iframe>-Element) angezeigt werden darf, wenn sie auf derselben Domain liegt. In bestimmten Situationen kann das unerwünscht sein (etwa wenn Sie eine Facebook-Anwendung entwickeln), das Verhalten lässt sich also ändern: frames: http://allowed-host.com erlaubt einen bestimmten Host, frames: true erlaubt das Einbetten von überall (der Header entfällt) und frames: false verbietet es vollständig (X-Frame-Options: DENY).

Standardmäßig sendet Nette außerdem die Header X-Powered-By: Nette Framework 3 und Content-Type: text/html; charset=utf-8. Jeden Header, auch diese Standardheader, können Sie entfernen, indem Sie seinen Wert auf einen leeren String setzen.

Content Security Policy

Die Header Content-Security-Policy (CSP) lassen sich leicht konfigurieren; ihre Beschreibung finden Sie in der CSP-Spezifikation. CSP-Direktiven (etwa script-src) können entweder als Strings gemäß der Spezifikation oder für die bessere Lesbarkeit als Arrays von Werten geschrieben werden. Dann müssen um Schlüsselwörter wie 'self' keine Anführungszeichen gesetzt werden. Nette erzeugt außerdem automatisch einen nonce-Wert, sodass im Header etwa 'nonce-y4PopTLM==' gesendet wird.

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

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

		# bool im Fall von Schaltern
		upgrade-insecure-requests: true
		block-all-mixed-content: false

Verwenden Sie in Templates <script n:nonce>...</script>, und der nonce-Wert wird automatisch eingesetzt. Sichere Websites in Nette zu bauen ist wirklich einfach.

Ähnlich lassen sich die Header Content-Security-Policy-Report-Only (die parallel zu CSP verwendet werden können) und die Feature Policy konfigurieren:

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 Methode Nette\Http\Response::setCookie() und der Session-Behandlung ändern.

http:
	# Gültigkeitsbereich des Cookies nach Pfad
	cookiePath: ...          # (string) Standardwert ist '/'

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

	# Cookies nur über HTTPS senden?
	cookieSecure: ...        # (bool|auto) Standardwert ist auto

	# schaltet das Senden des Cookies ab, das Nette zum CSRF-Schutz verwendet
	disableNetteCookie: ...  # (bool) Standardwert ist false

Das Attribut cookieDomain bestimmt, welche Domains (Origins) das Cookie annehmen dürfen. Wird es nicht angegeben, nimmt es dieselbe (Sub-)Domain an, die es gesetzt hat, ohne deren Subdomains. Ist cookieDomain angegeben, sind auch die Subdomains eingeschlossen. Die Angabe von cookieDomain ist also weniger einschränkend als ihr Weglassen.

Ist zum Beispiel cookieDomain: nette.org gesetzt, sind die Cookies auch auf allen Subdomains wie doc.nette.org verfügbar. Dasselbe erreichen Sie mit dem speziellen Wert domain, also cookieDomain: domain.

Der Standardwert auto beim Attribut cookieSecure bedeutet, dass die Cookies mit dem Flag Secure gesendet werden und damit nur über HTTPS verfügbar sind, wenn die Website über HTTPS läuft.

HTTP-Proxy

Läuft die Site hinter einem HTTP-Proxy, geben Sie die IP-Adresse des Proxys an, damit die Erkennung der HTTPS-Verbindung und der IP-Adresse des Clients korrekt funktioniert. Also damit Nette\Http\Request::getRemoteAddress() und isSecured() die richtigen Werte zurückgeben und die Links in Templates mit dem Protokoll https: erzeugt werden.

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

HTTPS erzwingen

Erzwingt bedingungslos das Schema HTTPS für den Request. Das ist nützlich für reine HTTPS-Sites, die hinter einem Load Balancer oder Reverse Proxy laufen, der TLS terminiert, aber den Header X-Forwarded-Proto nicht weitergibt, sodass die übliche HTTPS-Erkennung (auch mit konfiguriertem HTTP-Proxy) das nicht bemerken würde.

http:
	# HTTPS-Schema für alle Requests erzwingen
	forceHttps: true       # (bool) Standardwert ist false

Session

Grundlegende Einstellungen der Sessions:

session:
	# das Session-Panel in der Tracy Bar anzeigen?
	debugger: ...        # (bool) Standardwert ist false

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

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

	# Handler, ein Service, der SessionHandlerInterface implementiert
	handler: @handlerService

Die Option autoStart steuert, wann die Session starten soll. Der Wert always bedeutet, dass die Session immer beim Start der Anwendung startet. Der Wert smart bedeutet, dass die Session mit der Anwendung nur dann startet, wenn sie bereits existiert, oder in dem Moment, in dem wir aus ihr lesen oder in sie schreiben wollen. Der Wert never schließlich schaltet den automatischen Start der Session ab.

Darüber hinaus können Sie alle Session-Direktiven von PHP setzen (im camelCase-Format) und außerdem readAndClose. Beispiel:

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

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

Das Session-Cookie wird mit denselben Parametern gesendet wie andere Cookies, Sie können sie aber speziell dafür ändern:

session:
	# Domains, die das Cookie empfangen dürfen
	cookieDomain: 'example.com'   # (string|domain)

	# Einschränkung für den Cross-Origin-Zugriff
	cookieSamesite: None          # (Strict|Lax|None) Standardwert ist Lax

Das Attribut cookieSamesite beeinflusst, ob das Cookie bei Cross-Origin-Requests gesendet wird, was einen gewissen Schutz gegen Angriffe vom Typ Cross-Site Request Forgery (CSRF) bietet.

DI-Services

Diese Services werden dem DI-Container hinzugefügt:

Name Typ Beschreibung
http.request Nette\Http\Request HTTP-Request
http.response Nette\Http\Response HTTP-Response
session.session Nette\Http\Session Session-Verwaltung
http.requestFactory Nette\Http\RequestFactory Factory, die den HTTP-Request erzeugt