Nette Documentation Preview

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

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

Si no está utilizando todo el framework, sino sólo esta librería, lea [cómo cargar la configuración |bootstrap:].


Cabeceras HTTP .[#toc-http-headers]
===================================

```neon
http:
	# cabeceras que se envían con cada solicitud
	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) defaults to 'SAMEORIGIN'
```

Por razones de seguridad, el framework envía una cabecera `X-Frame-Options: SAMEORIGIN`, que dice que una página puede mostrarse dentro de otra (en el elemento `<iframe>`) sólo si está en el mismo dominio. Esto puede resultar indeseado en determinadas situaciones (por ejemplo, si se está desarrollando una aplicación para Facebook), por lo que el comportamiento puede modificarse configurando los marcos `frames: http://allowed-host.com`.


Política de seguridad de contenidos .[#toc-content-security-policy]
-------------------------------------------------------------------

Las cabeceras `Content-Security-Policy` (en lo sucesivo CSP) pueden ensamblarse fácilmente, su descripción puede encontrarse en la [descripción CSP |https://content-security-policy.com]. Las directivas CSP (como `script-src`) pueden escribirse como cadenas de acuerdo con la especificación o como matrices de valores para una mejor legibilidad. Entonces no es necesario escribir comillas alrededor de palabras clave como `'self'`. Nette también generará automáticamente un valor de `nonce`, por lo que `'nonce-y4PopTLM=='` se enviará en la cabecera.

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

		# array of values
		script-src:
			- nonce
			- strict-dynamic
			- self
			- https://example.com

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

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

Del mismo modo, se pueden añadir las cabeceras `Content-Security-Policy-Report-Only` (que se puede utilizar en paralelo 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 .[#toc-http-cookie]
-------------------------------

Puede cambiar los valores por defecto de algunos parámetros de los métodos [Nette\Http\Response::setCookie() |response#setCookie] y session.

```neon
http:
	# cookie scope by path
	cookiePath: ...          # (string) por defecto '/'

	# qué hosts pueden recibir la cookie
	cookieDomain: 'example.com' # (string|dominio) por defecto unset

	# ¿enviar cookies sólo a través de HTTPS?
	cookieSecure: ...        # (bool|auto) por defecto auto

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

La opción `cookieDomain` determina qué dominios (orígenes) pueden aceptar cookies. Si no se especifica, la cookie es aceptada por el mismo (sub)dominio que la establece, *excluyendo* sus subdominios. Si se especifica `cookieDomain`, también se incluyen los subdominios. Por lo tanto, especificar `cookieDomain` es menos restrictivo que omitirlo.

Por ejemplo, si se establece `cookieDomain: nette.org`, la cookie también está disponible en todos los subdominios como `doc.nette.org`. Esto también se puede conseguir con el valor especial `domain`, es decir, `cookieDomain: domain`.

El valor por defecto de `cookieSecure` es `auto`, lo que significa que si el sitio web funciona con HTTPS, las cookies se enviarán con la bandera `Secure` y, por lo tanto, sólo estarán disponibles a través de HTTPS.


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

Si el sitio se ejecuta detrás de un proxy HTTP, introduzca la dirección IP del proxy para que la detección de conexiones HTTPS funcione correctamente, así como la dirección IP del cliente. Es decir, para que [Nette\Http\Request::getRemoteAddress() |request#getRemoteAddress] y [isSecured() |request#isSecured] devuelvan los valores correctos y se generen enlaces con el protocolo `https:` en las plantillas.

```neon
http:
	# dirección IP, rango (ej. 127.0.0.1/8) o array de estos valores
	proxy: 127.0.0.1   # (string|string[]) por defecto ninguno
```


Sesión .[#toc-session]
======================

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

```neon
session:
	# ¿muestra el panel de sesión en Tracy Bar?
	depurador: ...        # (bool) por defecto false

	# tiempo de inactividad tras el cual expira la sesión
	expiración: 14 días   # (string) por defecto '3 horas'

	# ¿cuándo iniciar la sesión?
	autoStart: ...        # (smart|always|never) por defecto 'smart

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

La opción `autoStart` controla cuándo iniciar la sesión. El valor `always` significa que la sesión se inicia siempre al arrancar la aplicación. El valor `smart` significa que la sesión se iniciará al arrancar la aplicación sólo si ya existe, o en el momento en que queramos leer de ella o escribir en ella. Por último, el valor `never` desactiva el inicio automático de la sesión.

También se pueden establecer 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' written as 'name'
	name: MYID

	# 'session.save_path' written as 'savePath'
	savePath: "%tempDir%/sessions"
```


Cookie de sesión .[#toc-session-cookie]
---------------------------------------

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

```neon
session:
	# qué hosts pueden recibir la cookie
	cookieDomain: 'example.com' # (string|dominio)

	# restricciones al acceder a la solicitud de origen cruzado
	cookieSamesite: None        # (Strict|Lax|None) por defecto Lax
```

La opción `cookieSamesite` afecta a si la cookie se envía con [solicitudes de origen cruzado |nette:glossary#SameSite cookie], lo que proporciona cierta protección contra ataques de [falsificación de solicitud de sitios cruz |nette:glossary#cross-site-request-forgery-csrf] ados.


Servicios DI .[#toc-di-services]
================================

Estos servicios se añaden al contenedor DI:

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

Configuración de HTTP

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

Si no está utilizando todo el framework, sino sólo esta librería, lea cómo cargar la configuración.

Cabeceras HTTP

http:
	# cabeceras que se envían con cada solicitud
	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) defaults to 'SAMEORIGIN'

Por razones de seguridad, el framework envía una cabecera X-Frame-Options: SAMEORIGIN, que dice que una página puede mostrarse dentro de otra (en el elemento <iframe>) sólo si está en el mismo dominio. Esto puede resultar indeseado en determinadas situaciones (por ejemplo, si se está desarrollando una aplicación para Facebook), por lo que el comportamiento puede modificarse configurando los marcos frames: http://allowed-host.com.

Política de seguridad de contenidos

Las cabeceras Content-Security-Policy (en lo sucesivo CSP) pueden ensamblarse fácilmente, su descripción puede encontrarse en la descripción CSP. Las directivas CSP (como script-src) pueden escribirse como cadenas de acuerdo con la especificación o como matrices de valores para una mejor legibilidad. Entonces no es necesario escribir comillas alrededor de palabras clave como 'self'. Nette también generará automáticamente un valor de nonce, por lo que 'nonce-y4PopTLM==' se enviará en la cabecera.

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

		# array of values
		script-src:
			- nonce
			- strict-dynamic
			- self
			- https://example.com

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

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

Del mismo modo, se pueden añadir las cabeceras Content-Security-Policy-Report-Only (que se puede utilizar en paralelo 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

Puede cambiar los valores por defecto de algunos parámetros de los métodos Nette\Http\Response::setCookie() y session.

http:
	# cookie scope by path
	cookiePath: ...          # (string) por defecto '/'

	# qué hosts pueden recibir la cookie
	cookieDomain: 'example.com' # (string|dominio) por defecto unset

	# ¿enviar cookies sólo a través de HTTPS?
	cookieSecure: ...        # (bool|auto) por defecto auto

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

La opción cookieDomain determina qué dominios (orígenes) pueden aceptar cookies. Si no se especifica, la cookie es aceptada por el mismo (sub)dominio que la establece, excluyendo sus subdominios. Si se especifica cookieDomain, también se incluyen los subdominios. Por lo tanto, especificar cookieDomain es menos restrictivo que omitirlo.

Por ejemplo, si se establece cookieDomain: nette.org, la cookie también está disponible en todos los subdominios como doc.nette.org. Esto también se puede conseguir con el valor especial domain, es decir, cookieDomain: domain.

El valor por defecto de cookieSecure es auto, lo que significa que si el sitio web funciona con HTTPS, las cookies se enviarán con la bandera Secure y, por lo tanto, sólo estarán disponibles a través de HTTPS.

Proxy HTTP

Si el sitio se ejecuta detrás de un proxy HTTP, introduzca la dirección IP del proxy para que la detección de conexiones HTTPS funcione correctamente, así como la dirección IP del cliente. Es decir, para que Nette\Http\Request::getRemoteAddress() y isSecured() devuelvan los valores correctos y se generen enlaces con el protocolo https: en las plantillas.

http:
	# dirección IP, rango (ej. 127.0.0.1/8) o array de estos valores
	proxy: 127.0.0.1   # (string|string[]) por defecto ninguno

Sesión

Configuración básica de las sesiones:

session:
	# ¿muestra el panel de sesión en Tracy Bar?
	depurador: ...        # (bool) por defecto false

	# tiempo de inactividad tras el cual expira la sesión
	expiración: 14 días   # (string) por defecto '3 horas'

	# ¿cuándo iniciar la sesión?
	autoStart: ...        # (smart|always|never) por defecto 'smart

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

La opción autoStart controla cuándo iniciar la sesión. El valor always significa que la sesión se inicia siempre al arrancar la aplicación. El valor smart significa que la sesión se iniciará al arrancar la aplicación sólo si ya existe, o en el momento en que queramos leer de ella o escribir en ella. Por último, el valor never desactiva el inicio automático de la sesión.

También se pueden establecer todas las directivas de sesión de PHP (en formato camelCase) y también readAndClose. Ejemplo:

session:
	# 'session.name' written as 'name'
	name: MYID

	# 'session.save_path' written as 'savePath'
	savePath: "%tempDir%/sessions"

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

session:
	# qué hosts pueden recibir la cookie
	cookieDomain: 'example.com' # (string|dominio)

	# restricciones al acceder a la solicitud de origen cruzado
	cookieSamesite: None        # (Strict|Lax|None) por defecto Lax

La opción cookieSamesite afecta a si la cookie se envía con solicitudes de origen cruzado, lo que proporciona cierta protección contra ataques de falsificación de solicitud de sitios cruz ados.

Servicios DI

Estos servicios se añaden al contenedor DI:

Nombre Tipo Descripción
http.request Nette\Http\Request solicitud HTTP
http.response Nette\Http\Response respuesta HTTP
session.session Nette\Http\Session gestión de sesión