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'

	# header 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:
	# Доклад за политиката за сигурност на съдържанието
	cspReportOnly:
		default-src: self
		report-uri: 'https://my-report-uri-endpoint'

	# Политика за характеристиките
	featurePolicy:
		unsized-media: none
		geolocation:
			- self
			- https://example.com
```


Бисквитка HTTP .[#toc-http-cookie]
----------------------------------

Можете да промените стойностите по подразбиране на някои параметри на методите [Nette\Http\Response::setCookie( |response#setCookie] ) и session.

```neon
http:
	# обхвата на "бисквитката" по пътя
	cookiePath: ...             # (string) по подразбиране е '/'

	# на кои хостове е разрешено да получават бисквитки
	cookieDomain: 'example.com' # (string|домейн) по подразбиране не е зададен

	# изпращате бисквитки само чрез HTTPS?
	cookieSecure: ...           # (bool|auto) по подразбиране е auto

	# деактивира изпращането на бисквитки, които Nette използва за защита срещу CSRF
	disableNetteCookie: ...     # (bool) по подразбиране е false
```

Параметърът `cookieDomain` определя кои домейни (произход) могат да приемат "бисквитката". Ако не е посочено, "бисквитката" се приема от същия (под)домейн, за който е зададена, *изключвайки* техните поддомейни. Ако е посочен `cookieDomain`, поддомейните също ще бъдат включени. Така че посочването на `cookieDomain` е по-малко ограничаващо, отколкото пропускането му.

Например, ако е посочен `cookieDomain: nette.org`, "бисквитката" е достъпна и за всички поддомейни, например `doc.nette.org`. Това може да се постигне и чрез посочване на `domain`, т.е. `cookieDomain: domain`.

Стойността по подразбиране на `cookieSecure` е `auto`, което означава, че ако сайтът работи на HTTPS, бисквитката ще бъде изпратена с флаг `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 # (string|string[]) по подразбиране е none
```


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

Основни настройки на [сесията |sessions]:

```neon
session:
	# показва панела на сесията в панела на Tracey?
	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"
```


Бисквитка за сесия .[#toc-session-cookie]
-----------------------------------------

Сесийната "бисквитка" се изпраща със същите параметри като [другите "бисквитки" |#HTTP-Cookie], но можете да ги промените за нея:

```neon
session:
	# на кои хостове е разрешено да получават "бисквитката
	cookieDomain: 'example.com' # (string|домейн)

	# ограничения на кръстосания достъп до заявките
	cookieSamesite: None        # (Strict|Lax|None) по подразбиране е Lax
```

Опцията `cookieSamesite` влияе върху това дали се изпраща бисквитка при [заявки от различни сайтове |nette:glossary#SameSite-Cookie], което осигурява известна защита срещу атаки [Cross-Site Request Forgery |nette:glossary#Cross-Site-Request-Forgery-CSRF].


Услуги на DI .[#toc-di-services]
================================

Тези услуги се добавят към контейнера DI:

| Име | Тип | Описание
|-----------------------------------------------------
| `http.request` | [api:Nette\Http\Request] | [HTTP request | request]
| `http.response` | [api:Nette\Http\Response] | [HTTP response | 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'

	# header 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:
	# Доклад за политиката за сигурност на съдържанието
	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:
	# обхвата на "бисквитката" по пътя
	cookiePath: ...             # (string) по подразбиране е '/'

	# на кои хостове е разрешено да получават бисквитки
	cookieDomain: 'example.com' # (string|домейн) по подразбиране не е зададен

	# изпращате бисквитки само чрез HTTPS?
	cookieSecure: ...           # (bool|auto) по подразбиране е auto

	# деактивира изпращането на бисквитки, които Nette използва за защита срещу CSRF
	disableNetteCookie: ...     # (bool) по подразбиране е false

Параметърът cookieDomain определя кои домейни (произход) могат да приемат „бисквитката“. Ако не е посочено, „бисквитката“ се приема от същия (под)домейн, за който е зададена, изключвайки техните поддомейни. Ако е посочен cookieDomain, поддомейните също ще бъдат включени. Така че посочването на cookieDomain е по-малко ограничаващо, отколкото пропускането му.

Например, ако е посочен cookieDomain: nette.org, „бисквитката“ е достъпна и за всички поддомейни, например doc.nette.org. Това може да се постигне и чрез посочване на domain, т.е. cookieDomain: domain.

Стойността по подразбиране на cookieSecure е auto, което означава, че ако сайтът работи на HTTPS, бисквитката ще бъде изпратена с флаг 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 # (string|string[]) по подразбиране е none

Сесия

Основни настройки на сесията:

session:
	# показва панела на сесията в панела на Tracey?
	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"

Сесийната „бисквитка“ се изпраща със същите параметри като другите „бисквитки“, но можете да ги промените за нея:

session:
	# на кои хостове е разрешено да получават "бисквитката
	cookieDomain: 'example.com' # (string|домейн)

	# ограничения на кръстосания достъп до заявките
	cookieSamesite: None        # (Strict|Lax|None) по подразбиране е Lax

Опцията cookieSamesite влияе върху това дали се изпраща бисквитка при заявки от различни сайтове, което осигурява известна защита срещу атаки Cross-Site Request Forgery.

Услуги на DI

Тези услуги се добавят към контейнера DI:

Име Тип Описание
http.request Nette\Http\Request HTTP request
http.response Nette\Http\Response HTTP response
session.session Nette\Http\Session управление на сесии