Nette Documentation Preview

syntax
Configuración HTTP
******************

.[perex]
Resumen de las opciones de configuración para Nette HTTP.

Si no utiliza todo el framework, sino solo esta librería, lea [cómo cargar la configuración|bootstrap:].


Cabeceras HTTP
==============

```neon
http:
	# cabeceras que se envían con cada petición
	headers:
		X-Powered-By: MyCMS
		X-Content-Type-Options: nosniff
		X-XSS-Protection: '1; mode=block'

	# afecta a la cabecera X-Frame-Options
	frames: ...      # (string|bool) el valor por defecto es 'SAMEORIGIN'
```

El framework, por razones de seguridad, envía la cabecera `X-Frame-Options: SAMEORIGIN`, que indica que la página solo se puede mostrar dentro de otra página (en un elemento `<iframe>`) si se encuentra en el mismo dominio. Esto puede ser no deseado en algunas situaciones (por ejemplo, si está desarrollando una aplicación para Facebook), por lo que el comportamiento se puede cambiar estableciendo `frames: http://allowed-host.com` o `frames: true`.


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

Se pueden construir fácilmente las cabeceras `Content-Security-Policy` (en adelante CSP), cuya descripción encontrará en la [descripción de CSP |https://content-security-policy.com]. Las directivas CSP (como `script-src`) pueden escribirse como cadenas según la especificación, o como un array de valores para una mejor legibilidad. Entonces no es necesario escribir comillas alrededor de palabras clave como `'self'`. Nette también genera automáticamente el valor `nonce`, por lo que en la cabecera habrá, por ejemplo, `'nonce-y4PopTLM=='`.

```neon
http:
	# Content Security Policy
	csp:
		# cadena en formato según la especificación CSP
		default-src: "'self' https://example.com"

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

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

En las plantillas, use `<script n:nonce>...</script>` y el valor nonce se completará automáticamente. Hacer sitios web seguros en Nette es realmente fácil.

De manera similar, se pueden construir las cabeceras `Content-Security-Policy-Report-Only` (que se pueden usar simultáneamente con CSP) y [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'

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


Cookie HTTP
-----------

Se pueden cambiar los valores predeterminados de algunos parámetros del método [Nette\Http\Response::setCookie() |response#setCookie] y de la sesión.

```neon
http:
	# alcance de la cookie por ruta
	cookiePath: ...          # (string) el valor por defecto es '/'

	# dominios que aceptan la cookie
	cookieDomain: 'example.com'  # (string|domain) el valor por defecto es no establecido

	# ¿enviar cookie solo a través de HTTPS?
	cookieSecure: ...        # (bool|auto) el valor por defecto es auto

	# desactiva el envío de la cookie que Nette usa como protección contra CSRF
	disableNetteCookie: ...  # (bool) el valor por defecto es false
```

El atributo `cookieDomain` determina qué dominios pueden aceptar la cookie. Si no se especifica, la cookie es aceptada por el mismo (sub)dominio que la estableció, *pero no* por sus subdominios. Si se especifica `cookieDomain`, también se incluyen los subdominios. Por lo tanto, especificar `cookieDomain` es menos restrictivo que omitirlo.

Por ejemplo, con `cookieDomain: nette.org`, las cookies también están disponibles en todos los subdominios como `doc.nette.org`. Lo mismo se puede lograr también con el valor especial `domain`, es decir, `cookieDomain: domain`.

El valor predeterminado `auto` para el atributo `cookieSecure` significa que si el sitio web se ejecuta en HTTPS, las cookies se enviarán con el indicador `Secure` y, por lo tanto, solo estarán disponibles a través de HTTPS.


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

Si el sitio web se ejecuta detrás de un proxy HTTP, especifique su dirección IP para que la detección de la conexión a través de HTTPS y también la dirección IP del cliente funcionen correctamente. Es decir, para que las funciones [Nette\Http\Request::getRemoteAddress() |request#getRemoteAddress] y [isSecured() |request#isSecured] devuelvan los valores correctos y en las plantillas se generen enlaces con el protocolo `https:`.

```neon
http:
	# Dirección IP, rango (p. ej. 127.0.0.1/8) o array de estos valores
	proxy: 127.0.0.1       # (string|string[]) el valor por defecto es no establecido
```


Sesión
======

Configuración básica de [sesiones|sessions]:

```neon
session:
	# ¿mostrar el panel de sesión en Tracy Bar?
	debugger: ...        # (bool) el valor por defecto es false

	# tiempo de inactividad después del cual la sesión expira
	expiration: 14 days  # (string) el valor por defecto es '3 hours'

	# ¿cuándo debe iniciarse la sesión?
	autoStart: ...       # (smart|always|never) el valor por defecto es 'smart'

	# manejador, servicio que implementa la interfaz SessionHandlerInterface
	handler: @handlerService
```

La opción `autoStart` controla cuándo debe iniciarse la sesión. El valor `always` significa que la sesión siempre se iniciará cuando se inicie la aplicación. El valor `smart` significa que la sesión se iniciará al inicio de la aplicación solo si ya existe, o en el momento en que queramos leer o escribir en ella. Y finalmente, el valor `never` prohíbe el inicio automático de la sesión.

Además, se pueden configurar todas las [directivas de sesión |https://www.php.net/manual/en/session.configuration.php] de PHP (en formato camelCase) y también [readAndClose |https://www.php.net/manual/en/function.session-start.php#refsect1-function.session-start-parameters]. Ejemplo:

```neon
session:
	# 'session.name' se escribe como 'name'
	name: MYID

	# 'session.save_path' se escribe como 'savePath'
	savePath: "%tempDir%/sessions"
```


Cookie de sesión
----------------

La cookie de sesión se envía con los mismos parámetros que [otras cookies |#Cookie HTTP], pero puede cambiarlos para ella:

```neon
session:
	# dominios que aceptan la cookie
	cookieDomain: 'example.com'   # (string|domain)

	# restricción al acceder desde otro dominio
	cookieSamesite: None          # (Strict|Lax|None) el valor por defecto es Lax
```

El atributo `cookieSamesite` afecta si la cookie se enviará al [acceder desde otro dominio |nette:glossary#Cookie SameSite], lo que proporciona cierta protección contra ataques [Cross-Site Request Forgery |nette:glossary#Cross-Site Request Forgery CSRF] (CSRF).


Servicios DI
============

Estos servicios se añaden al contenedor DI:

| Nombre          | Tipo                       | Descripción
|-----------------------------------------------------
| `http.request`	  | [api:Nette\Http\Request]   | [Petición HTTP| request]
| `http.response`	  | [api:Nette\Http\Response]  | [Respuesta HTTP| response]
| `session.session`   | [api:Nette\Http\Session]   | [gestión de sesiones| sessions]

Configuración HTTP

Resumen de las opciones de configuración para Nette HTTP.

Si no utiliza todo el framework, sino solo esta librería, lea cómo cargar la configuración.

Cabeceras HTTP

http:
	# cabeceras que se envían con cada petición
	headers:
		X-Powered-By: MyCMS
		X-Content-Type-Options: nosniff
		X-XSS-Protection: '1; mode=block'

	# afecta a la cabecera X-Frame-Options
	frames: ...      # (string|bool) el valor por defecto es 'SAMEORIGIN'

El framework, por razones de seguridad, envía la cabecera X-Frame-Options: SAMEORIGIN, que indica que la página solo se puede mostrar dentro de otra página (en un elemento <iframe>) si se encuentra en el mismo dominio. Esto puede ser no deseado en algunas situaciones (por ejemplo, si está desarrollando una aplicación para Facebook), por lo que el comportamiento se puede cambiar estableciendo frames: http://allowed-host.com o frames: true.

Content Security Policy

Se pueden construir fácilmente las cabeceras Content-Security-Policy (en adelante CSP), cuya descripción encontrará en la descripción de CSP. Las directivas CSP (como script-src) pueden escribirse como cadenas según la especificación, o como un array de valores para una mejor legibilidad. Entonces no es necesario escribir comillas alrededor de palabras clave como 'self'. Nette también genera automáticamente el valor nonce, por lo que en la cabecera habrá, por ejemplo, 'nonce-y4PopTLM=='.

http:
	# Content Security Policy
	csp:
		# cadena en formato según la especificación CSP
		default-src: "'self' https://example.com"

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

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

En las plantillas, use <script n:nonce>...</script> y el valor nonce se completará automáticamente. Hacer sitios web seguros en Nette es realmente fácil.

De manera similar, se pueden construir las cabeceras Content-Security-Policy-Report-Only (que se pueden usar simultáneamente con CSP) y Feature Policy:

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

Se pueden cambiar los valores predeterminados de algunos parámetros del método Nette\Http\Response::setCookie() y de la sesión.

http:
	# alcance de la cookie por ruta
	cookiePath: ...          # (string) el valor por defecto es '/'

	# dominios que aceptan la cookie
	cookieDomain: 'example.com'  # (string|domain) el valor por defecto es no establecido

	# ¿enviar cookie solo a través de HTTPS?
	cookieSecure: ...        # (bool|auto) el valor por defecto es auto

	# desactiva el envío de la cookie que Nette usa como protección contra CSRF
	disableNetteCookie: ...  # (bool) el valor por defecto es false

El atributo cookieDomain determina qué dominios pueden aceptar la cookie. Si no se especifica, la cookie es aceptada por el mismo (sub)dominio que la estableció, pero no por sus subdominios. Si se especifica cookieDomain, también se incluyen los subdominios. Por lo tanto, especificar cookieDomain es menos restrictivo que omitirlo.

Por ejemplo, con cookieDomain: nette.org, las cookies también están disponibles en todos los subdominios como doc.nette.org. Lo mismo se puede lograr también con el valor especial domain, es decir, cookieDomain: domain.

El valor predeterminado auto para el atributo cookieSecure significa que si el sitio web se ejecuta en HTTPS, las cookies se enviarán con el indicador Secure y, por lo tanto, solo estarán disponibles a través de HTTPS.

Proxy HTTP

Si el sitio web se ejecuta detrás de un proxy HTTP, especifique su dirección IP para que la detección de la conexión a través de HTTPS y también la dirección IP del cliente funcionen correctamente. Es decir, para que las funciones Nette\Http\Request::getRemoteAddress() y isSecured() devuelvan los valores correctos y en las plantillas se generen enlaces con el protocolo https:.

http:
	# Dirección IP, rango (p. ej. 127.0.0.1/8) o array de estos valores
	proxy: 127.0.0.1       # (string|string[]) el valor por defecto es no establecido

Sesión

Configuración básica de sesiones:

session:
	# ¿mostrar el panel de sesión en Tracy Bar?
	debugger: ...        # (bool) el valor por defecto es false

	# tiempo de inactividad después del cual la sesión expira
	expiration: 14 days  # (string) el valor por defecto es '3 hours'

	# ¿cuándo debe iniciarse la sesión?
	autoStart: ...       # (smart|always|never) el valor por defecto es 'smart'

	# manejador, servicio que implementa la interfaz SessionHandlerInterface
	handler: @handlerService

La opción autoStart controla cuándo debe iniciarse la sesión. El valor always significa que la sesión siempre se iniciará cuando se inicie la aplicación. El valor smart significa que la sesión se iniciará al inicio de la aplicación solo si ya existe, o en el momento en que queramos leer o escribir en ella. Y finalmente, el valor never prohíbe el inicio automático de la sesión.

Además, se pueden configurar todas las directivas de sesión de PHP (en formato camelCase) y también readAndClose. Ejemplo:

session:
	# 'session.name' se escribe como 'name'
	name: MYID

	# 'session.save_path' se escribe como 'savePath'
	savePath: "%tempDir%/sessions"

La cookie de sesión se envía con los mismos parámetros que otras cookies, pero puede cambiarlos para ella:

session:
	# dominios que aceptan la cookie
	cookieDomain: 'example.com'   # (string|domain)

	# restricción al acceder desde otro dominio
	cookieSamesite: None          # (Strict|Lax|None) el valor por defecto es Lax

El atributo cookieSamesite afecta si la cookie se enviará al acceder desde otro dominio, lo que proporciona cierta protección contra ataques Cross-Site Request Forgery (CSRF).

Servicios DI

Estos servicios se añaden al contenedor DI:

Nombre Tipo Descripción
http.request Nette\Http\Request Petición HTTP
http.response Nette\Http\Response Respuesta HTTP
session.session Nette\Http\Session gestión de sesiones