Nette Documentation Preview

syntax
Налаштування HTTP
*****************

.[perex]
Огляд опцій конфігурації для Nette HTTP.

Якщо ви використовуєте не весь фреймворк, а тільки цю бібліотеку, прочитайте, [як завантажити конфігурацію |bootstrap:].


HTTP-заголовки .[#toc-http-headers]
===================================

```neon
http:
	# заголовки, які надсилаються з кожним запитом
	headers:
		X-Powered-By: MyCMS
		X-Content-Type-Options: nosniff
		X-XSS-Protection: '1; mode=block'

	# впливає на заголовок X-Frame-Options
	frames: ...      # (string|bool) за замовчуванням 'SAMEORIGIN'
```

З метою безпеки фреймворк надсилає заголовок `X-Frame-Options: SAMEORIGIN`, в якому йдеться про те, що сторінка може бути відображена всередині іншої сторінки (в елементі `<iframe>`) тільки в тому випадку, якщо вона знаходиться на тому ж домені. Це може бути небажано в деяких ситуаціях (наприклад, якщо ви розробляєте додаток для Facebook), тому поведінку можна змінити, встановивши фрейми `frames: http://allowed-host.com`.


Політика безпеки контенту .[#toc-content-security-policy]
---------------------------------------------------------

Заголовки `Content-Security-Policy` (далі CSP) можуть бути легко зібрані, їх опис можна знайти в [описі CSP |https://content-security-policy.com]. Директиви CSP (такі як `script-src`) можуть бути записані або як рядки відповідно до специфікації, або як масиви значень для кращої читабельності. Тоді немає необхідності писати лапки навколо ключових слів, таких як `'self'`. Nette також автоматично генерує значення `nonce`, тому `'nonce-y4PopTLM=='` буде надіслано в заголовку.

```neon
http:
	# Політика безпеки контенту
	csp:
		# рядок відповідно до специфікації CSP
		default-src: "'self' https://example.com"

		# масив значень
		script-src:
			- nonce
			- strict-dynamic
			- self
			- https://example.com

		# bool у разі перемикачів
		upgrade-insecure-requests: true
		block-all-mixed-content: false
```

Використовуйте `<script n:nonce>...</script>` у шаблонах, і значення nonce буде заповнено автоматично. Створювати захищені веб-сайти в Nette дуже просто.

Аналогічним чином можна додати заголовки `Content-Security-Policy-Report-Only` (який можна використовувати паралельно з CSP) і [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'

	# Політика можливостей
	featurePolicy:
		unsized-media: none
		geolocation:
			- self
			- https://example.com
```


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

Ви можете змінити значення за замовчуванням деяких параметрів методів [Nette\Http\Response::setCookie() |response#setCookie] і session.

```neon
http:
	# область застосування cookie на шляху
	cookiePath: ...          # (рядок) за замовчуванням '/'

	# яким хостам дозволено отримувати куки
	cookieDomain: 'example.com' # (рядок|домен) за замовчуванням unset

	# відправляти куки тільки через HTTPS?
	cookieSecure: ...        # (bool|auto) за замовчуванням auto

	# відключає надсилання кукі, які Nette використовує як захист від CSRF
	disableNetteCookie: ...  # (bool) за замовчуванням false
```

Параметр `cookieDomain` визначає, які домени (origin) можуть приймати куки. Якщо його не вказано, то cookie приймається тим самим (під)доменом, який ним задано, *виключаючи* їхні піддомени. Якщо вказано `cookieDomain`, то субдомени також будуть включені. Тому вказівка `cookieDomain` є менш обмежувальною, ніж опущення.

Наприклад, якщо задано `cookieDomain: nette.org`, то cookie також доступний на всіх піддоменах, таких як `doc.nette.org`. Цього також можна досягти за допомогою спеціального значення `domain`, тобто `cookieDomain: domain`.

Значення за замовчуванням `cookieSecure` дорівнює `auto`, що означає, що якщо сайт працює на HTTPS, cookie надсилатимуться з прапором `Secure` і, отже, будуть доступні тільки через HTTPS.


HTTP-проксі .[#toc-http-proxy]
------------------------------

Якщо сайт працює за HTTP-проксі, введіть IP-адресу проксі, щоб виявлення HTTPS-з'єднань працювало правильно, а також IP-адресу клієнта. Тобто, щоб [Nette\Http\Request::getRemoteAddress() |request#getRemoteAddress] та [isSecured() |request#isSecured] повертали правильні значення і в шаблонах генерувалися посилання з протоколом `https:`.

```neon
http:
	# IP-адреса, діапазон (тобто 127.0.0.1/8) або масив цих значень
	proxy: 127.0.0.1.1 # (string|string[]) за замовчуванням none
```


Сесія .[#toc-session]
=====================

Основні налаштування [сеансів |sessions]:

```neon
session:
	# показує панель сеансу в панелі трейсі?
	debugger: ...        # (bool) за замовчуванням false

	# час бездіяльності, після закінчення якого сесія завершується
	expiration: 14 days  # (string) за замовчуванням '3 години'

	# коли починати сесію?
	autoStart: ...       # (smart|always|never) за замовчуванням 'smart'

	# обробник, служба, що реалізує інтерфейс SessionHandlerInterface
	handler: @handlerService
```

Параметр `autoStart` визначає, коли починати сеанс. Значення `always` означає, що сесія завжди запускається під час запуску програми. Значення `smart` означає, що сесія буде запускатися під час запуску програми, тільки якщо вона вже існує, або в той момент, коли ми хочемо читати з неї або писати в неї. Нарешті, значення `never` відключає автоматичний запуск сесії.

Ви також можете задати всі [директиви |https://www.php.net/manual/en/session.configuration.php] PHP [сесії |https://www.php.net/manual/en/session.configuration.php] (у форматі camelCase), а також [readAndClose |https://www.php.net/manual/en/function.session-start.php#refsect1-function.session-start-parameters]. Приклад:

```neon
session:
	# 'session.name' записано як 'name'
	name: MYID

	# 'session.save_path' записано як 'savePath'
	savePath: "%tempDir%/sessions"
```


Сесійний файл cookie .[#toc-session-cookie]
-------------------------------------------

Сесійний cookie надсилається з тими самими параметрами, що й [інші cookie |#HTTP-Cookie], але ви можете змінити їх для нього:

```neon
session:
	# яким хостам дозволено отримувати cookie-файл
	cookieDomain: 'example.com' # (string|domain)

	# обмеження при доступі до крос-оригінального запиту
	cookieSamesite: None        # (Strict|Lax|None) за замовчуванням Lax
```

Параметр `cookieSamesite` впливає на те, чи надсилається cookie під час [міжсайтових запитів |nette:glossary#SameSite-Cookie], що забезпечує деякий захист від атак [Cross-Site Request Forgery |nette:glossary#Cross-Site-Request-Forgery-CSRF].


Послуги з проведення розслідувань .[#toc-di-services]
=====================================================

Ці сервіси додаються до контейнера ІР:

| Назва | Тип | Опис
|-----------------------------------------------------
| `http.request` | [api:Nette\Http\Request] | [HTTP-запит | request]
| `http.response` | [api:Nette\Http\Response] | [HTTP-відповідь | response]
| `session.session` |[api:Nette\Http\Session] | [управління сесіями | sessions]

Налаштування HTTP

Огляд опцій конфігурації для Nette HTTP.

Якщо ви використовуєте не весь фреймворк, а тільки цю бібліотеку, прочитайте, як завантажити конфігурацію.

HTTP-заголовки

http:
	# заголовки, які надсилаються з кожним запитом
	headers:
		X-Powered-By: MyCMS
		X-Content-Type-Options: nosniff
		X-XSS-Protection: '1; mode=block'

	# впливає на заголовок X-Frame-Options
	frames: ...      # (string|bool) за замовчуванням 'SAMEORIGIN'

З метою безпеки фреймворк надсилає заголовок X-Frame-Options: SAMEORIGIN, в якому йдеться про те, що сторінка може бути відображена всередині іншої сторінки (в елементі <iframe>) тільки в тому випадку, якщо вона знаходиться на тому ж домені. Це може бути небажано в деяких ситуаціях (наприклад, якщо ви розробляєте додаток для Facebook), тому поведінку можна змінити, встановивши фрейми frames: http://allowed-host.com.

Політика безпеки контенту

Заголовки Content-Security-Policy (далі CSP) можуть бути легко зібрані, їх опис можна знайти в описі CSP. Директиви CSP (такі як script-src) можуть бути записані або як рядки відповідно до специфікації, або як масиви значень для кращої читабельності. Тоді немає необхідності писати лапки навколо ключових слів, таких як 'self'. Nette також автоматично генерує значення nonce, тому 'nonce-y4PopTLM==' буде надіслано в заголовку.

http:
	# Політика безпеки контенту
	csp:
		# рядок відповідно до специфікації CSP
		default-src: "'self' https://example.com"

		# масив значень
		script-src:
			- nonce
			- strict-dynamic
			- self
			- https://example.com

		# bool у разі перемикачів
		upgrade-insecure-requests: true
		block-all-mixed-content: false

Використовуйте <script n:nonce>...</script> у шаблонах, і значення nonce буде заповнено автоматично. Створювати захищені веб-сайти в Nette дуже просто.

Аналогічним чином можна додати заголовки Content-Security-Policy-Report-Only (який можна використовувати паралельно з CSP) і Feature Policy:

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

	# Політика можливостей
	featurePolicy:
		unsized-media: none
		geolocation:
			- self
			- https://example.com

Ви можете змінити значення за замовчуванням деяких параметрів методів Nette\Http\Response::setCookie() і session.

http:
	# область застосування cookie на шляху
	cookiePath: ...          # (рядок) за замовчуванням '/'

	# яким хостам дозволено отримувати куки
	cookieDomain: 'example.com' # (рядок|домен) за замовчуванням unset

	# відправляти куки тільки через HTTPS?
	cookieSecure: ...        # (bool|auto) за замовчуванням auto

	# відключає надсилання кукі, які Nette використовує як захист від CSRF
	disableNetteCookie: ...  # (bool) за замовчуванням false

Параметр cookieDomain визначає, які домени (origin) можуть приймати куки. Якщо його не вказано, то cookie приймається тим самим (під)доменом, який ним задано, виключаючи їхні піддомени. Якщо вказано cookieDomain, то субдомени також будуть включені. Тому вказівка cookieDomain є менш обмежувальною, ніж опущення.

Наприклад, якщо задано cookieDomain: nette.org, то cookie також доступний на всіх піддоменах, таких як doc.nette.org. Цього також можна досягти за допомогою спеціального значення domain, тобто cookieDomain: domain.

Значення за замовчуванням cookieSecure дорівнює auto, що означає, що якщо сайт працює на HTTPS, cookie надсилатимуться з прапором Secure і, отже, будуть доступні тільки через HTTPS.

HTTP-проксі

Якщо сайт працює за HTTP-проксі, введіть IP-адресу проксі, щоб виявлення HTTPS-з'єднань працювало правильно, а також IP-адресу клієнта. Тобто, щоб Nette\Http\Request::getRemoteAddress() та isSecured() повертали правильні значення і в шаблонах генерувалися посилання з протоколом https:.

http:
	# IP-адреса, діапазон (тобто 127.0.0.1/8) або масив цих значень
	proxy: 127.0.0.1.1 # (string|string[]) за замовчуванням none

Сесія

Основні налаштування сеансів:

session:
	# показує панель сеансу в панелі трейсі?
	debugger: ...        # (bool) за замовчуванням false

	# час бездіяльності, після закінчення якого сесія завершується
	expiration: 14 days  # (string) за замовчуванням '3 години'

	# коли починати сесію?
	autoStart: ...       # (smart|always|never) за замовчуванням 'smart'

	# обробник, служба, що реалізує інтерфейс SessionHandlerInterface
	handler: @handlerService

Параметр autoStart визначає, коли починати сеанс. Значення always означає, що сесія завжди запускається під час запуску програми. Значення smart означає, що сесія буде запускатися під час запуску програми, тільки якщо вона вже існує, або в той момент, коли ми хочемо читати з неї або писати в неї. Нарешті, значення never відключає автоматичний запуск сесії.

Ви також можете задати всі директиви PHP сесії (у форматі camelCase), а також readAndClose. Приклад:

session:
	# 'session.name' записано як 'name'
	name: MYID

	# 'session.save_path' записано як 'savePath'
	savePath: "%tempDir%/sessions"

Сесійний cookie надсилається з тими самими параметрами, що й інші cookie, але ви можете змінити їх для нього:

session:
	# яким хостам дозволено отримувати cookie-файл
	cookieDomain: 'example.com' # (string|domain)

	# обмеження при доступі до крос-оригінального запиту
	cookieSamesite: None        # (Strict|Lax|None) за замовчуванням Lax

Параметр cookieSamesite впливає на те, чи надсилається cookie під час міжсайтових запитів, що забезпечує деякий захист від атак Cross-Site Request Forgery.

Послуги з проведення розслідувань

Ці сервіси додаються до контейнера ІР:

Назва Тип Опис
http.request Nette\Http\Request HTTP-запит
http.response Nette\Http\Response HTTP-відповідь
session.session Nette\Http\Session управління сесіями