Nette Documentation Preview

syntax
Configurando o HTTP
*******************

.[perex]
Visão geral das opções de configuração para o Nette HTTP.

Se você não estiver usando toda a estrutura, mas apenas esta biblioteca, leia [como carregar a configuração |bootstrap:].


Cabeçalhos HTTP .[#toc-http-headers]
====================================

```neon
http:
	# cabeçalhos que são enviados com cada pedido
	headers:
		X-Powered-By: MyCMS
		X-Content-Type-Options: nosniff
		X-XSS-Protection: '1; mode=block'

	# afeta o cabeçalho X-Frame-Options
	frames: ...      # (string|bool) padrão de 'SAMEORIGIN'
```

Por razões de segurança, a estrutura envia um cabeçalho `X-Frame-Options: SAMEORIGIN`, que diz que uma página pode ser exibida dentro de outra página (no elemento `<iframe>`) somente se estiver no mesmo domínio. Isto pode ser indesejado em certas situações (por exemplo, se você estiver desenvolvendo um aplicativo do Facebook), portanto, o comportamento pode ser alterado através da definição de quadros `frames: http://allowed-host.com`.


Política de Segurança de Conteúdo .[#toc-content-security-policy]
-----------------------------------------------------------------

Os cabeçalhos `Content-Security-Policy` (doravante denominados CSP) podem ser facilmente montados, sua descrição pode ser encontrada na [descrição do CSP |https://content-security-policy.com]. As diretrizes CSP (tais como `script-src`) podem ser escritas como cordas de acordo com a especificação ou como matrizes de valores para melhor legibilidade. Então não há necessidade de escrever aspas em torno de palavras-chave, como `'self'`. A Nette também gerará automaticamente um valor de `nonce`, portanto `'nonce-y4PopTLM=='` será enviado no cabeçalho.

```neon
http:
	# Política de Segurança de Conteúdo
	csp:
		# string de acordo com a especificação CSP
		default-src: "'self' https://example.com"

		# matriz de valores
		script-src:
			- nonce
			- strict-dynamic
			- self
			- https://example.com

		# bool no caso de interruptores
		upgrade-insecure-requests: true
		block-all-mixed-content: false
```

Use `<script n:nonce>...</script>` nos gabaritos e o valor nonce será preenchido automaticamente. Fazer sites seguros em Nette é realmente fácil.

Da mesma forma, os cabeçalhos `Content-Security-Policy-Report-Only` (que podem ser usados em paralelo com o CSP) e a [Política de Recursos |https://developers.google.com/web/updates/2018/06/feature-policy] podem ser acrescentados:

```neon
http:
	# Relatório de Política de Segurança de Conteúdo - Somente
	cspReportOnly:
		default-src: self
		report-uri: 'https://my-report-uri-endpoint'

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


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

Você pode alterar os valores padrão de alguns parâmetros do [Nette\HttpResposta::setCookie() |response#setCookie] e métodos de sessão.

```neon
http:
	# escopo do cookie por caminho
	cookiePath: ...          # (cordão) padrão de '/'

	# que hospeda é permitido receber o cookie
	cookieDomain: 'example.com' # (string|domain) default to unset

	# para enviar cookies somente via HTTPS?
	cookieSecure: ...        # (bool|auto) padrão para auto

	# desativa o envio do cookie que a Nette utiliza como proteção contra o CSRF
	disableNetteCookie: ...  # (bool) falha em false
```

A opção `cookieDomain` determina quais domínios (origens) podem aceitar cookies. Se não especificado, o cookie é aceito pelo mesmo (sub)domínio que é definido por ele, *excluindo* seus subdomínios. Se `cookieDomain` for especificado, então os subdomínios também serão incluídos. Portanto, a especificação do `cookieDomain` é menos restritiva do que a omissão.

Por exemplo, se `cookieDomain: nette.org` estiver definido, o cookie também está disponível em todos os subdomínios como `doc.nette.org`. Isto também pode ser conseguido com o valor especial `domain`, ou seja, `cookieDomain: domain`.

O valor padrão de `cookieSecure` é `auto` o que significa que se o site estiver rodando em HTTPS, os cookies serão enviados com a bandeira `Secure` e, portanto, só estarão disponíveis via HTTPS.


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

Se o site estiver rodando atrás de um proxy HTTP, digite o endereço IP do proxy para que a detecção de conexões HTTPS funcione corretamente, assim como o endereço IP do cliente. Ou seja, para que [Nette\Http\Request::getRemoteAddress() |request#getRemoteAddress] e [isSecured() |request#isSecured] retornem os valores corretos e os links sejam gerados com o protocolo `https:` nos templates.

```neon
http:
	# endereço IP, faixa (ou seja, 127.0.0.1/8) ou matriz destes valores
	proxy: 127.0.0.1 # (string|string[]) não tem padrão
```


Sessão .[#toc-session]
======================

Configurações básicas das [sessões |sessions]:

```neon
session:
	# mostra painel da sessão em Tracy Bar?
	debugger: ...        # (bool) falha em falso

	# tempo de inatividade após o qual a sessão expira
	expiration: 14 days  # (string) por defeito a '3 horas'.

	# quando começar a sessão?
	autoStart: ...       # (smart|always|never) por padrão para 'smart'...

	# handler, serviço que implementa a interface SessionHandlerInterface
	handler: @handlerService
```

A opção `autoStart` controla quando iniciar a sessão. O valor `always` significa que a sessão é sempre iniciada quando a aplicação é iniciada. O valor `smart` significa que a sessão será iniciada quando a aplicação começar somente se ela já existir, ou no momento em que quisermos ler ou escrever para ela. Finalmente, o valor `never` desabilita o início automático da sessão.

Você também pode definir todas as [diretrizes de sessão |https://www.php.net/manual/en/session.configuration.php] PHP (em formato camelCase) e também [lerAndClose |https://www.php.net/manual/en/function.session-start.php#refsect1-function.session-start-parameters]. Exemplo:

```neon
session:
	# 'session.name' escrito como 'name
	name: MYID

	# 'session.save_path' escrito como 'savePath'.
	savePath: "%tempDir%/sessões"
```


Sessão Cookie .[#toc-session-cookie]
------------------------------------

O cookie da sessão é enviado com os mesmos parâmetros que os [outros cookies |#HTTP cookie], mas você pode alterá-los para ele:

```neon
session:
	# que hospeda é permitido receber o cookie
	cookieDomain: 'example.com' # (string|domain)

	# restrições ao acessar pedidos de origem cruzada
	cookieSamesite: ...         # (Strict|Lax|None) tem como padrão Lax
```

A opção `cookieSamesite` afeta se o cookie é enviado com [pedidos de origem cruzada |nette:glossary#SameSite cookie], o que proporciona alguma proteção contra [falsificações em locais cruzados |nette:glossary#cross-site-request-forgery-csrf].


Serviços de DI .[#toc-di-services]
==================================

Esses serviços são adicionados ao contêiner DI:

| Nome | Tipo | Descrição
|-----------------------------------------------------
| `http.request` | [api:Nette\Http\Request] | [solicitação HTTP | request]
| `http.response` | [api:Nette\Http\Response] | [resposta HTTP | response]
| `session.session` | [api:Nette\Http\Session] | [gerenciamento de sessão | sessions]

Configurando o HTTP

Visão geral das opções de configuração para o Nette HTTP.

Se você não estiver usando toda a estrutura, mas apenas esta biblioteca, leia como carregar a configuração.

Cabeçalhos HTTP

http:
	# cabeçalhos que são enviados com cada pedido
	headers:
		X-Powered-By: MyCMS
		X-Content-Type-Options: nosniff
		X-XSS-Protection: '1; mode=block'

	# afeta o cabeçalho X-Frame-Options
	frames: ...      # (string|bool) padrão de 'SAMEORIGIN'

Por razões de segurança, a estrutura envia um cabeçalho X-Frame-Options: SAMEORIGIN, que diz que uma página pode ser exibida dentro de outra página (no elemento <iframe>) somente se estiver no mesmo domínio. Isto pode ser indesejado em certas situações (por exemplo, se você estiver desenvolvendo um aplicativo do Facebook), portanto, o comportamento pode ser alterado através da definição de quadros frames: http://allowed-host.com.

Política de Segurança de Conteúdo

Os cabeçalhos Content-Security-Policy (doravante denominados CSP) podem ser facilmente montados, sua descrição pode ser encontrada na descrição do CSP. As diretrizes CSP (tais como script-src) podem ser escritas como cordas de acordo com a especificação ou como matrizes de valores para melhor legibilidade. Então não há necessidade de escrever aspas em torno de palavras-chave, como 'self'. A Nette também gerará automaticamente um valor de nonce, portanto 'nonce-y4PopTLM==' será enviado no cabeçalho.

http:
	# Política de Segurança de Conteúdo
	csp:
		# string de acordo com a especificação CSP
		default-src: "'self' https://example.com"

		# matriz de valores
		script-src:
			- nonce
			- strict-dynamic
			- self
			- https://example.com

		# bool no caso de interruptores
		upgrade-insecure-requests: true
		block-all-mixed-content: false

Use <script n:nonce>...</script> nos gabaritos e o valor nonce será preenchido automaticamente. Fazer sites seguros em Nette é realmente fácil.

Da mesma forma, os cabeçalhos Content-Security-Policy-Report-Only (que podem ser usados em paralelo com o CSP) e a Política de Recursos podem ser acrescentados:

http:
	# Relatório de Política de Segurança de Conteúdo - Somente
	cspReportOnly:
		default-src: self
		report-uri: 'https://my-report-uri-endpoint'

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

Você pode alterar os valores padrão de alguns parâmetros do Nette\HttpResposta::setCookie() e métodos de sessão.

http:
	# escopo do cookie por caminho
	cookiePath: ...          # (cordão) padrão de '/'

	# que hospeda é permitido receber o cookie
	cookieDomain: 'example.com' # (string|domain) default to unset

	# para enviar cookies somente via HTTPS?
	cookieSecure: ...        # (bool|auto) padrão para auto

	# desativa o envio do cookie que a Nette utiliza como proteção contra o CSRF
	disableNetteCookie: ...  # (bool) falha em false

A opção cookieDomain determina quais domínios (origens) podem aceitar cookies. Se não especificado, o cookie é aceito pelo mesmo (sub)domínio que é definido por ele, excluindo seus subdomínios. Se cookieDomain for especificado, então os subdomínios também serão incluídos. Portanto, a especificação do cookieDomain é menos restritiva do que a omissão.

Por exemplo, se cookieDomain: nette.org estiver definido, o cookie também está disponível em todos os subdomínios como doc.nette.org. Isto também pode ser conseguido com o valor especial domain, ou seja, cookieDomain: domain.

O valor padrão de cookieSecure é auto o que significa que se o site estiver rodando em HTTPS, os cookies serão enviados com a bandeira Secure e, portanto, só estarão disponíveis via HTTPS.

Proxy HTTP

Se o site estiver rodando atrás de um proxy HTTP, digite o endereço IP do proxy para que a detecção de conexões HTTPS funcione corretamente, assim como o endereço IP do cliente. Ou seja, para que Nette\Http\Request::getRemoteAddress() e isSecured() retornem os valores corretos e os links sejam gerados com o protocolo https: nos templates.

http:
	# endereço IP, faixa (ou seja, 127.0.0.1/8) ou matriz destes valores
	proxy: 127.0.0.1 # (string|string[]) não tem padrão

Sessão

Configurações básicas das sessões:

session:
	# mostra painel da sessão em Tracy Bar?
	debugger: ...        # (bool) falha em falso

	# tempo de inatividade após o qual a sessão expira
	expiration: 14 days  # (string) por defeito a '3 horas'.

	# quando começar a sessão?
	autoStart: ...       # (smart|always|never) por padrão para 'smart'...

	# handler, serviço que implementa a interface SessionHandlerInterface
	handler: @handlerService

A opção autoStart controla quando iniciar a sessão. O valor always significa que a sessão é sempre iniciada quando a aplicação é iniciada. O valor smart significa que a sessão será iniciada quando a aplicação começar somente se ela já existir, ou no momento em que quisermos ler ou escrever para ela. Finalmente, o valor never desabilita o início automático da sessão.

Você também pode definir todas as diretrizes de sessão PHP (em formato camelCase) e também lerAndClose. Exemplo:

session:
	# 'session.name' escrito como 'name
	name: MYID

	# 'session.save_path' escrito como 'savePath'.
	savePath: "%tempDir%/sessões"

O cookie da sessão é enviado com os mesmos parâmetros que os outros cookies, mas você pode alterá-los para ele:

session:
	# que hospeda é permitido receber o cookie
	cookieDomain: 'example.com' # (string|domain)

	# restrições ao acessar pedidos de origem cruzada
	cookieSamesite: ...         # (Strict|Lax|None) tem como padrão Lax

A opção cookieSamesite afeta se o cookie é enviado com pedidos de origem cruzada, o que proporciona alguma proteção contra falsificações em locais cruzados.

Serviços de DI

Esses serviços são adicionados ao contêiner DI:

Nome Tipo Descrição
http.request Nette\Http\Request solicitação HTTP
http.response Nette\Http\Response resposta HTTP
session.session Nette\Http\Session gerenciamento de sessão