Nette Documentation Preview

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

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

Si no usa el framework entero, sino solo esta biblioteca, lea [cómo cargar la configuración|bootstrap:].


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

```neon
http:
	# cabeceras que se envían con cada respuesta
	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|null) el valor predeterminado es 'SAMEORIGIN'
```

Por motivos de seguridad, el framework envía la cabecera `X-Frame-Options: SAMEORIGIN`, que indica que una página solo se puede mostrar dentro de otra página (en un elemento `<iframe>`) si está en el mismo dominio. Eso puede no ser deseable en ciertas situaciones (p. ej. si desarrolla una aplicación de Facebook), así que el comportamiento se puede cambiar poniendo `frames: http://allowed-host.com` para permitir un host concreto, `frames: true` para permitir el framing desde cualquier sitio (la cabecera se omite) o `frames: false` para prohibirlo por completo (`X-Frame-Options: DENY`).

De forma predeterminada, Nette envía también las cabeceras `X-Powered-By: Nette Framework 3` y `Content-Type: text/html; charset=utf-8`. Puede eliminar cualquier cabecera, incluidas estas predeterminadas, poniendo su valor a una cadena vacía.


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

Las cabeceras `Content-Security-Policy` (CSP) se configuran con facilidad; su descripción la encontrará en la [especificación de CSP |https://content-security-policy.com]. Las directivas CSP (como `script-src`) se pueden escribir como cadenas según la especificación o como arrays de valores, para que se lean mejor. Entonces no hace falta usar comillas alrededor de palabras clave como `'self'`. Nette generará además automáticamente un valor `nonce`, así que en la cabecera se enviará algo como `'nonce-y4PopTLM=='`.

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

		# array de valores
		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
```

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

De forma parecida se pueden configurar las cabeceras `Content-Security-Policy-Report-Only` (que se pueden usar a la vez que 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
```


Cookies HTTP
------------

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

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

	# dominios que pueden recibir la cookie
	cookieDomain: 'example.com'  # (string|domain) de forma predeterminada sin establecer

	# ¿enviar las cookies solo por HTTPS?
	cookieSecure: ...        # (bool|auto) el valor predeterminado es auto

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

El atributo `cookieDomain` determina qué dominios (orígenes) pueden aceptar las cookies. Si no se indica, la cookie la acepta el mismo (sub)dominio que la estableció, *excluyendo* sus subdominios. Si se indica `cookieDomain`, se incluyen también los subdominios. Por eso, indicar `cookieDomain` es menos restrictivo que omitirlo.

Por ejemplo, si se pone `cookieDomain: nette.org`, las cookies están disponibles también en todos los subdominios, como `doc.nette.org`. Eso también se consigue con el valor especial `domain`, es decir, `cookieDomain: domain`.

El valor predeterminado `auto` del atributo `cookieSecure` significa que, si el sitio web funciona con HTTPS, las cookies se enviarán con la bandera `Secure` y por tanto solo estarán disponibles por HTTPS.


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

Si el sitio funciona tras un proxy HTTP, indique la dirección IP del proxy para que la detección de la conexión HTTPS y la dirección IP del cliente funcionen correctamente. Es decir, para que [Nette\Http\Request::getRemoteAddress() |request#getRemoteAddress()] e [isSecured() |request#isSecured()] devuelvan los valores correctos y los enlaces se generen con el protocolo `https:` en las plantillas.

```neon
http:
	# dirección IP, rango (p. ej. 127.0.0.1/8) o un array de esos valores
	proxy: 127.0.0.1       # (string|string[]) de forma predeterminada sin establecer
```


Forzar HTTPS .{data-version:3.3.4}
----------------------------------

Fuerza incondicionalmente el esquema HTTPS de la petición. Es útil para sitios solo HTTPS que funcionan tras un balanceador de carga o un proxy inverso que termina el TLS pero no pasa la cabecera `X-Forwarded-Proto`, con lo que la detección estándar de HTTPS (incluso con el [#Proxy HTTP] configurado) no lo captaría.

```neon
http:
	# fuerza el esquema HTTPS en todas las peticiones
	forceHttps: true       # (bool) el valor predeterminado es false
```


Sesión
======

Ajustes básicos de las [sesiones |sessions]:

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

	# tiempo de inactividad tras el cual expira la sesión
	expiration: 14 days  # (string) el valor predeterminado es '3 hours'

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

	# handler, un servicio que implementa SessionHandlerInterface
	handler: @handlerService
```

La opción `autoStart` controla cuándo debe iniciarse la sesión. El valor `always` significa que la sesión se inicia siempre que arranca la aplicación. El valor `smart` significa que la sesión se inicia junto con la aplicación solo si ya existe, o en el momento en que queremos leer de ella o escribir en ella. Por último, el valor `never` desactiva el inicio automático de la sesión.

Además puede 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' 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 las [demás cookies |#Cookies HTTP], pero puede cambiarlos específicamente para ella:

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

	# restricción para el acceso cross-origin
	cookieSamesite: None          # (Strict|Lax|None) el valor predeterminado es Lax
```

El atributo `cookieSamesite` afecta a si la cookie se envía en las [peticiones cross-origin |nette:glossary#Cookie SameSite], lo que aporta cierta protección frente a los 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 la sesión| sessions]
| `http.requestFactory`| [api:Nette\Http\RequestFactory] | factory que crea la petición HTTP

Configuración HTTP

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

Si no usa el framework entero, sino solo esta biblioteca, lea cómo cargar la configuración.

Cabeceras HTTP

http:
	# cabeceras que se envían con cada respuesta
	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|null) el valor predeterminado es 'SAMEORIGIN'

Por motivos de seguridad, el framework envía la cabecera X-Frame-Options: SAMEORIGIN, que indica que una página solo se puede mostrar dentro de otra página (en un elemento <iframe>) si está en el mismo dominio. Eso puede no ser deseable en ciertas situaciones (p. ej. si desarrolla una aplicación de Facebook), así que el comportamiento se puede cambiar poniendo frames: http://allowed-host.com para permitir un host concreto, frames: true para permitir el framing desde cualquier sitio (la cabecera se omite) o frames: false para prohibirlo por completo (X-Frame-Options: DENY).

De forma predeterminada, Nette envía también las cabeceras X-Powered-By: Nette Framework 3 y Content-Type: text/html; charset=utf-8. Puede eliminar cualquier cabecera, incluidas estas predeterminadas, poniendo su valor a una cadena vacía.

Content Security Policy

Las cabeceras Content-Security-Policy (CSP) se configuran con facilidad; su descripción la encontrará en la especificación de CSP. Las directivas CSP (como script-src) se pueden escribir como cadenas según la especificación o como arrays de valores, para que se lean mejor. Entonces no hace falta usar comillas alrededor de palabras clave como 'self'. Nette generará además automáticamente un valor nonce, así que en la cabecera se enviará algo como 'nonce-y4PopTLM=='.

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

		# array de valores
		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

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

De forma parecida se pueden configurar las cabeceras Content-Security-Policy-Report-Only (que se pueden usar a la vez que 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

Cookies HTTP

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

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

	# dominios que pueden recibir la cookie
	cookieDomain: 'example.com'  # (string|domain) de forma predeterminada sin establecer

	# ¿enviar las cookies solo por HTTPS?
	cookieSecure: ...        # (bool|auto) el valor predeterminado es auto

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

El atributo cookieDomain determina qué dominios (orígenes) pueden aceptar las cookies. Si no se indica, la cookie la acepta el mismo (sub)dominio que la estableció, excluyendo sus subdominios. Si se indica cookieDomain, se incluyen también los subdominios. Por eso, indicar cookieDomain es menos restrictivo que omitirlo.

Por ejemplo, si se pone cookieDomain: nette.org, las cookies están disponibles también en todos los subdominios, como doc.nette.org. Eso también se consigue con el valor especial domain, es decir, cookieDomain: domain.

El valor predeterminado auto del atributo cookieSecure significa que, si el sitio web funciona con HTTPS, las cookies se enviarán con la bandera Secure y por tanto solo estarán disponibles por HTTPS.

Proxy HTTP

Si el sitio funciona tras un proxy HTTP, indique la dirección IP del proxy para que la detección de la conexión HTTPS y la dirección IP del cliente funcionen correctamente. Es decir, para que Nette\Http\Request::getRemoteAddress() e isSecured() devuelvan los valores correctos y los enlaces se generen con el protocolo https: en las plantillas.

http:
	# dirección IP, rango (p. ej. 127.0.0.1/8) o un array de esos valores
	proxy: 127.0.0.1       # (string|string[]) de forma predeterminada sin establecer

Forzar HTTPS

Fuerza incondicionalmente el esquema HTTPS de la petición. Es útil para sitios solo HTTPS que funcionan tras un balanceador de carga o un proxy inverso que termina el TLS pero no pasa la cabecera X-Forwarded-Proto, con lo que la detección estándar de HTTPS (incluso con el Proxy HTTP configurado) no lo captaría.

http:
	# fuerza el esquema HTTPS en todas las peticiones
	forceHttps: true       # (bool) el valor predeterminado es false

Sesión

Ajustes básicos de las sesiones:

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

	# tiempo de inactividad tras el cual expira la sesión
	expiration: 14 days  # (string) el valor predeterminado es '3 hours'

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

	# handler, un servicio que implementa SessionHandlerInterface
	handler: @handlerService

La opción autoStart controla cuándo debe iniciarse la sesión. El valor always significa que la sesión se inicia siempre que arranca la aplicación. El valor smart significa que la sesión se inicia junto con la aplicación solo si ya existe, o en el momento en que queremos leer de ella o escribir en ella. Por último, el valor never desactiva el inicio automático de la sesión.

Además puede establecer 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 las demás cookies, pero puede cambiarlos específicamente para ella:

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

	# restricción para el acceso cross-origin
	cookieSamesite: None          # (Strict|Lax|None) el valor predeterminado es Lax

El atributo cookieSamesite afecta a si la cookie se envía en las peticiones cross-origin, lo que aporta cierta protección frente a los 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 la sesión
http.requestFactory Nette\Http\RequestFactory factory que crea la petición HTTP