Nette Documentation Preview

syntax
HTTP konfigurálása
******************

.[perex]
A Nette HTTP konfigurációs lehetőségeinek áttekintése.

Ha nem a teljes keretrendszert, hanem csak ezt a könyvtárat használja, olvassa el [, hogyan töltse be a konfigurációt |bootstrap:].


HTTP fejlécek .[#toc-http-headers]
==================================

```neon
http:
	# headerek, amelyeket minden egyes kéréssel elküldenek
	headers:
		X-Powered-By: MyCMS
		X-Content-Type-Options: nosniff
		X-XSS-Protection: '1; mode=block'

	# befolyásolja az X-Frame-Options fejlécet
	frames: ...      # (string|bool) alapértelmezett értéke 'SAMEORIGIN'
```

Biztonsági okokból a keretrendszer egy `X-Frame-Options: SAMEORIGIN` fejlécet küld, amely azt mondja, hogy egy oldal egy másik oldalon belül jeleníthető meg (az elemben `<iframe>`) csak akkor, ha az ugyanabban a tartományban van. Ez bizonyos helyzetekben nem kívánatos lehet (például, ha Facebook-alkalmazást fejlesztünk), ezért a viselkedés megváltoztatható a `frames: http://allowed-host.com`.


Tartalombiztonsági politika .[#toc-content-security-policy]
-----------------------------------------------------------

Fejlécek `Content-Security-Policy` (a továbbiakban CSP) könnyen összeállítható, leírásuk a [CSP leírásában |https://content-security-policy.com] található. A CSP irányelvek (például `script-src`) a specifikációnak megfelelően karakterláncokként vagy a jobb olvashatóság érdekében értékekből álló tömbként írhatók. Ekkor nem szükséges idézőjeleket írni az olyan kulcsszavak köré, mint a `'self'`. A Nette automatikusan generálja a `nonce` értékét is, így a `'nonce-y4PopTLM=='` a fejlécben kerül elküldésre.

```neon
http:
	# Content Security Policy
	csp:
		# a CSP specifikáció szerinti karakterlánc
		default-src: "'self' https://example.com"

		# értékek tömbje
		script-src:
			- nonce
			- strict-dynamic
			- self
			- https://example.com

		# bool a kapcsolók esetében
		upgrade-insecure-requests: true
		block-all-mixed-content: false
```

Használja a `<script n:nonce>...</script>` a sablonokban, és a nonce érték automatikusan kitöltődik. Biztonságos weboldalak készítése a Nette-ben nagyon egyszerű.

Hasonlóképpen hozzáadható a `Content-Security-Policy-Report-Only` fejléc (amely a CSP-vel párhuzamosan használható) és a [Feature Policy |https://developers.google.com/web/updates/2018/06/feature-policy]:

```neon
http:
	# Csak a tartalombiztonsági szabályzat jelentése
	cspReportOnly:
		default-src: self
		report-uri: 'https://my-report-uri-endpoint'

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


HTTP süti .[#toc-http-cookie]
-----------------------------

A [Nette\Http\Response::setCookie() |response#setCookie] és a session metódusok néhány paraméterének alapértelmezett értékét megváltoztathatja.

```neon
http:
	# cookie hatókör az útvonal szerint
	cookiePath: ...          # (string) alapértelmezett értéke '/'

	# mely hosztok kaphatják meg a cookie-t
	cookieDomain: 'example.com' # (string|domain) alapértelmezés szerint nem beállított

	# a cookie-kat csak HTTPS-en keresztül küldjük?
	cookieSecure: ...        # (bool|auto) alapértelmezés szerint auto

	# letiltja a cookie küldését, amelyet a Nette a CSRF elleni védelemként használ.
	disableNetteCookie: ...  # (bool) alapértelmezés szerint false
```

A `cookieDomain` opció határozza meg, hogy mely tartományok (eredet) fogadhatják el a cookie-kat. Ha nincs megadva, akkor a cookie-t ugyanaz a (al)tartomány fogadja el, amelyik az általa beállított, *kizárva* az aldomainjeiket. Ha a `cookieDomain` van megadva, akkor az aldomainek is bevonásra kerülnek. Ezért a `cookieDomain` megadása kevésbé korlátozó, mint az elhagyása.

Például, ha a `cookieDomain: nette.org` van megadva, a cookie az összes aldomainen is elérhető, mint a `doc.nette.org`. Ez a `domain`, azaz `cookieDomain: domain` speciális értékével is elérhető.

A `cookieSecure` alapértelmezett értéke a `auto`, ami azt jelenti, hogy ha a weboldal HTTPS-en fut, a cookie-kat a `Secure` jelzővel küldi el, és így csak HTTPS-en keresztül lesznek elérhetőek.


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

Ha a webhely HTTP-proxy mögött fut, adja meg a proxy IP-címét, hogy a HTTPS-kapcsolatok felismerése megfelelően működjön, valamint az ügyfél IP-címét. Azaz, hogy a [Nette\Http\Request::getRemoteAddress() |request#getRemoteAddress] és az [isSecured() |request#isSecured] a megfelelő értékeket adja vissza, és a sablonokban a `https:` protokollal generálódjanak linkek.

```neon
http:
	# IP-cím, tartomány (pl. 127.0.0.0.1/8) vagy ezek tömbje.
	proxy: 127.0.0.1 # (string|string[]) alapértelmezett értéke none
```


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

Alapvető [munkamenetek |sessions] beállításai:

```neon
session:
	# megjeleníti a munkamenet panelt a Tracy Barban?
	debugger: ...        # (bool) alapértelmezett értéke false

	# inaktivitási idő, amely után a munkamenet lejár.
	expiration:          # (string) alapértelmezett értéke

	# mikor kezdjük el a munkamenetet?
	autoStart: ...       # (smart|always|never) alapértelmezés szerint 'smart'

	# handler, a SessionHandlerInterface interfészt megvalósító szolgáltatás.
	handler: @handlerService
```

A `autoStart` opció szabályozza a munkamenet indításának időpontját. A `always` érték azt jelenti, hogy a munkamenet mindig az alkalmazás indításakor indul. A `smart` érték azt jelenti, hogy a munkamenet csak akkor indul el az alkalmazás indításakor, ha már létezik, vagy abban a pillanatban, amikor olvasni akarunk róla vagy írni akarunk rá. Végül a `never` érték kikapcsolja a munkamenet automatikus indítását.

Beállíthatjuk továbbá az összes PHP [munkamenet direktívát |https://www.php.net/manual/en/session.configuration.php] (camelCase formátumban), valamint a [readAndClose |https://www.php.net/manual/en/function.session-start.php#refsect1-function.session-start-parameters] értéket is. Példa:

```neon
session:
	# 'session.name' írva mint 'name'
	name: MYID

	# 'session.save_path' írva mint 'savePath'
	savePath: "%tempDir%/sessions"
```


Munkamenet süti .[#toc-session-cookie]
--------------------------------------

A munkamenet süti ugyanazokkal a paraméterekkel kerül elküldésre, mint a [többi süti |#HTTP cookie], de ezeket megváltoztathatja:

```neon
session:
	# mely hosztok kaphatják meg a cookie-t
	cookieDomain: 'example.com' # (string|domain)

	# korlátozások a cross-origin kérés elérésekor
	cookieSamesite: None        # (Strict|Lax|None) alapértelmezés szerint Lax
```

A `cookieSamesite` opció befolyásolja, hogy a cookie-t a [cross-origin kérésekkel |nette:glossary#SameSite cookie] együtt küldi-e el, ami némi védelmet nyújt a [Cross-Site Request Forgery |nette:glossary#cross-site-request-forgery-csrf] támadások ellen.


DI-szolgáltatások .[#toc-di-services]
=====================================

Ezek a szolgáltatások hozzáadódnak a DI konténerhez:

| Név | Típus | Leírás
|-----------------------------------------------------
| `http.request` | [api:Nette\Http\Request] | [HTTP-kérelem | request]
| `http.response` | [api:Nette\Http\Response] | [HTTP-válasz | response]
| `session.session` |[api:Nette\Http\Session] | [session management | sessions]

HTTP konfigurálása

A Nette HTTP konfigurációs lehetőségeinek áttekintése.

Ha nem a teljes keretrendszert, hanem csak ezt a könyvtárat használja, olvassa el , hogyan töltse be a konfigurációt.

HTTP fejlécek

http:
	# headerek, amelyeket minden egyes kéréssel elküldenek
	headers:
		X-Powered-By: MyCMS
		X-Content-Type-Options: nosniff
		X-XSS-Protection: '1; mode=block'

	# befolyásolja az X-Frame-Options fejlécet
	frames: ...      # (string|bool) alapértelmezett értéke 'SAMEORIGIN'

Biztonsági okokból a keretrendszer egy X-Frame-Options: SAMEORIGIN fejlécet küld, amely azt mondja, hogy egy oldal egy másik oldalon belül jeleníthető meg (az elemben <iframe>) csak akkor, ha az ugyanabban a tartományban van. Ez bizonyos helyzetekben nem kívánatos lehet (például, ha Facebook-alkalmazást fejlesztünk), ezért a viselkedés megváltoztatható a frames: http://allowed-host.com.

Tartalombiztonsági politika

Fejlécek Content-Security-Policy (a továbbiakban CSP) könnyen összeállítható, leírásuk a CSP leírásában található. A CSP irányelvek (például script-src) a specifikációnak megfelelően karakterláncokként vagy a jobb olvashatóság érdekében értékekből álló tömbként írhatók. Ekkor nem szükséges idézőjeleket írni az olyan kulcsszavak köré, mint a 'self'. A Nette automatikusan generálja a nonce értékét is, így a 'nonce-y4PopTLM==' a fejlécben kerül elküldésre.

http:
	# Content Security Policy
	csp:
		# a CSP specifikáció szerinti karakterlánc
		default-src: "'self' https://example.com"

		# értékek tömbje
		script-src:
			- nonce
			- strict-dynamic
			- self
			- https://example.com

		# bool a kapcsolók esetében
		upgrade-insecure-requests: true
		block-all-mixed-content: false

Használja a <script n:nonce>...</script> a sablonokban, és a nonce érték automatikusan kitöltődik. Biztonságos weboldalak készítése a Nette-ben nagyon egyszerű.

Hasonlóképpen hozzáadható a Content-Security-Policy-Report-Only fejléc (amely a CSP-vel párhuzamosan használható) és a Feature Policy:

http:
	# Csak a tartalombiztonsági szabályzat jelentése
	cspReportOnly:
		default-src: self
		report-uri: 'https://my-report-uri-endpoint'

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

Nette\Http\Response::setCookie() és a session metódusok néhány paraméterének alapértelmezett értékét megváltoztathatja.

http:
	# cookie hatókör az útvonal szerint
	cookiePath: ...          # (string) alapértelmezett értéke '/'

	# mely hosztok kaphatják meg a cookie-t
	cookieDomain: 'example.com' # (string|domain) alapértelmezés szerint nem beállított

	# a cookie-kat csak HTTPS-en keresztül küldjük?
	cookieSecure: ...        # (bool|auto) alapértelmezés szerint auto

	# letiltja a cookie küldését, amelyet a Nette a CSRF elleni védelemként használ.
	disableNetteCookie: ...  # (bool) alapértelmezés szerint false

A cookieDomain opció határozza meg, hogy mely tartományok (eredet) fogadhatják el a cookie-kat. Ha nincs megadva, akkor a cookie-t ugyanaz a (al)tartomány fogadja el, amelyik az általa beállított, kizárva az aldomainjeiket. Ha a cookieDomain van megadva, akkor az aldomainek is bevonásra kerülnek. Ezért a cookieDomain megadása kevésbé korlátozó, mint az elhagyása.

Például, ha a cookieDomain: nette.org van megadva, a cookie az összes aldomainen is elérhető, mint a doc.nette.org. Ez a domain, azaz cookieDomain: domain speciális értékével is elérhető.

A cookieSecure alapértelmezett értéke a auto, ami azt jelenti, hogy ha a weboldal HTTPS-en fut, a cookie-kat a Secure jelzővel küldi el, és így csak HTTPS-en keresztül lesznek elérhetőek.

HTTP proxy

Ha a webhely HTTP-proxy mögött fut, adja meg a proxy IP-címét, hogy a HTTPS-kapcsolatok felismerése megfelelően működjön, valamint az ügyfél IP-címét. Azaz, hogy a Nette\Http\Request::getRemoteAddress() és az isSecured() a megfelelő értékeket adja vissza, és a sablonokban a https: protokollal generálódjanak linkek.

http:
	# IP-cím, tartomány (pl. 127.0.0.0.1/8) vagy ezek tömbje.
	proxy: 127.0.0.1 # (string|string[]) alapértelmezett értéke none

Munkamenet

Alapvető munkamenetek beállításai:

session:
	# megjeleníti a munkamenet panelt a Tracy Barban?
	debugger: ...        # (bool) alapértelmezett értéke false

	# inaktivitási idő, amely után a munkamenet lejár.
	expiration:          # (string) alapértelmezett értéke

	# mikor kezdjük el a munkamenetet?
	autoStart: ...       # (smart|always|never) alapértelmezés szerint 'smart'

	# handler, a SessionHandlerInterface interfészt megvalósító szolgáltatás.
	handler: @handlerService

A autoStart opció szabályozza a munkamenet indításának időpontját. A always érték azt jelenti, hogy a munkamenet mindig az alkalmazás indításakor indul. A smart érték azt jelenti, hogy a munkamenet csak akkor indul el az alkalmazás indításakor, ha már létezik, vagy abban a pillanatban, amikor olvasni akarunk róla vagy írni akarunk rá. Végül a never érték kikapcsolja a munkamenet automatikus indítását.

Beállíthatjuk továbbá az összes PHP munkamenet direktívát (camelCase formátumban), valamint a readAndClose értéket is. Példa:

session:
	# 'session.name' írva mint 'name'
	name: MYID

	# 'session.save_path' írva mint 'savePath'
	savePath: "%tempDir%/sessions"

A munkamenet süti ugyanazokkal a paraméterekkel kerül elküldésre, mint a többi süti, de ezeket megváltoztathatja:

session:
	# mely hosztok kaphatják meg a cookie-t
	cookieDomain: 'example.com' # (string|domain)

	# korlátozások a cross-origin kérés elérésekor
	cookieSamesite: None        # (Strict|Lax|None) alapértelmezés szerint Lax

A cookieSamesite opció befolyásolja, hogy a cookie-t a cross-origin kérésekkel együtt küldi-e el, ami némi védelmet nyújt a Cross-Site Request Forgery támadások ellen.

DI-szolgáltatások

Ezek a szolgáltatások hozzáadódnak a DI konténerhez:

Név Típus Leírás
http.request Nette\Http\Request HTTP-kérelem
http.response Nette\Http\Response HTTP-válasz
session.session Nette\Http\Session session management