From: Luis Gil
Esta es la guÃa para configurar HTTP/2 en Apache httpd. Ãsta - caracterÃstica está lista en produción asà que es de esperar que las - interfaces y las directivas se mantengan consistentes en cada verión. + +
+ Esta es la guÃa para configurar HTTP/2 en Apache httpd. Ãsta caracterÃstica + está lista en produción asà que es de esperar que las interfaces + y las directivas se mantengan consistentes en cada verión.
HTTP/2 es la evolución del protocolo de la capa de aplicación con más - éxito, HTTP. Se centra en hacer un uso más eficiente de los recursos de red. No cambia la caracterÃstica fundamental de HTTP, la semántica. TodavÃa hay solicitudes, respuestas, cabeceras y todo los elementos tÃpicos de HTTP/1. Asà que, si ya conoce HTTP/1, también conoce el 95% de HTTP/2.
+ éxito, HTTP. Se centra en hacer un uso más eficiente de los recursos de red. + No cambia la caracterÃstica fundamental de HTTP, la semántica. TodavÃa hay + olicitudes, respuestas, cabeceras y todo los elementos tÃpicos de HTTP/1. Asà + que, si ya conoce HTTP/1, también conoce el 95% de HTTP/2.Se ha escrito mucho sobre HTTP/2 y de cómo funciona. La norma más estándar es, por supuesto, su RFC 7540 ( también disponible en un - formato más legible, YMMV). Asà que, ahà encontrará toda la especificación del protocolo.
+ formato más legible, YMMV). Asà que, ahà encontrará toda la especificación + del protocolo.Pero, como con todos los RFC, no es ideal como primera lectura. Es mejor entender primero qué se quiere hacer y después leer el RFC sobre @@ -70,34 +72,80 @@
Si le parece demasiado largo, o no lo ha leido, hay algunos términos y elementos a tener en cuenta cuando lea este documento:
El protocolo HTTP/2 se implementa con su propio módulo httpd, llamado acertadamente mod_http2
. Incluye el set completo de caracterÃsticas descritas por el RFC 7540 y soporta HTTP/2 sobre texto plano (http:), asà como conexiones seguras (https:). La variante de texto plano se llama 'h2c
', la segura 'h2
'. Para h2c
permite el modo direct
- y el Upgrade:
a través de una solicitud inicial HTTP/1.
+ El protocolo HTTP/2 se implementa con su propio módulo httpd, llamado
+ acertadamente mod_http2
. Incluye el set completo de
+ caracterÃsticas descritas por el RFC 7540 y soporta HTTP/2 sobre texto
+ plano (http:), asà como conexiones seguras (https:). La variante de texto
+ plano se llama 'h2c
', la segura 'h2
'. Para
+ h2c
permite el modo direct
+ y el Upgrade:
a través de una solicitud inicial HTTP/1.
+
Una caracterÃstica de HTTP/2 que ofrece capacidades nuevas para desarrolladores de web es Server Push. Vea esa sección para saber como su aplicación web puede hacer uso de ella.
++ Una caracterÃstica de HTTP/2 que ofrece capacidades nuevas para + desarrolladores de web es Server Push. Vea esa sección + para saber como su aplicación web puede hacer uso de ella. +
mod_http2
usa la librerÃa nghttp2
- como su implementación base. Para compilar mod_http2
necesita al menos la versión 1.2.1 de libnghttp2
instalada en su sistema.
Cuando usted ejecuta ./configure
en el código fuente de Apache HTTPD, necesita indicarle '--enable-http2
' como una opción adicional para activar la compilación de este módulo. Si su libnghttp2
está ubicado en una ruta no habitual (cualquiera que sea en su sistema operativo), puede indicar su ubicación con '--with-nghttp2=<path>
' para ./configure
.
+ mod_http2
usa la librerÃa
+ nghttp2como su implementación base. Para compilar
+ mod_http2
necesita al menos la versión 1.2.1 de
+ libnghttp2
instalada en su sistema.
+
+ Cuando usted ejecuta ./configure
en el código fuente de
+ Apache HTTPD, necesita indicarle '--enable-http2
' como una
+ opción adicional para activar la compilación de este módulo. Si su
+ libnghttp2
está ubicado en una ruta no habitual (cualquiera que
+ sea en su sistema operativo), puede indicar su ubicación con
+ '--with-nghttp2=<path>
' para ./configure
.
+
Aunque puede que eso sirva para la mayorÃa, habrá quien prefiera un nghttp2
compilado estáticamente para este módulo. Para ellos existe la opción --enable-nghttp2-staticlib-deps
. Funciona de manera muy similar a como uno debe enlazar openssl estáticamente para mod_ssl
.
Link </xxx.css>;rel=preload, </xxx.js>; rel=preload-
Si la conexión soporta PUSH, estos dos recursos se enviarán al cliente. Como desarrollador web, puede configurar estas cabeceras o bien directamente en la respuesta de su aplicación o configurar su servidor con:
++ Si la conexión soporta PUSH, estos dos recursos se enviarán al cliente. + Como desarrollador web, puede configurar estas cabeceras o bien + directamente en la respuesta de su aplicación o configurar su servidor con: +
<Location /xxx.html> Header add Link "</xxx.css>;rel=preload" @@ -236,7 +288,8 @@ </Location>-
Si quiere usar enlaces con preload
sin activar un PUSH, puede usar el parámetro nopush
, como en:
Si quiere usar enlaces con preload
sin activar un PUSH, puede
+ usar el parámetro nopush
, como en:
Link </xxx.css>;rel=preload;nopush@@ -248,13 +301,90 @@
Y hay más:
-El módulo mantiene un registro de lo que se ha enviado con PUSH para cada conexión (hashes de URLs, básicamente) y no hará PUSH del mismo recurso dos veces. Cuando la conexión se cierra, la información es descartada.
++ El módulo mantiene un registro de lo que se ha enviado con PUSH para cada + conexión (hashes de URLs, básicamente) y no hará PUSH del mismo recurso dos + veces. Cuando la conexión se cierra, la información es descartada. +
-Hay gente pensando cómo un cliente puede decirle al servidor lo que ya tiene, para evitar los PUSH de esos elementos, pero eso algo muy experimental ahora mismo.
++ Hay gente pensando cómo un cliente puede decirle al servidor lo que ya + tiene, para evitar los PUSH de esos elementos, pero eso algo muy + experimental ahora mismo. +
Otro borrador experimental que ha sido implementado en
mod_http2
es el Campo de Cabecera
- Accept-Push-Policy en la que un cliente puede, para cada solicitud, definir qué tipo de PUSH acepta.
+ Puede que PUSH no siempre lance la peticion/respuesta/funcionamiento que + uno espera. Hay varios estudios sobre este tema en internet, que explican + el beneficio y las debilidades de como diferentes funcionalidades del + cliente y de la red influyen en el resultado. + Por Ejemplo, que un servidor haga "PUSH" de recursos, no significa que el + navegador vaya a usar dichos datos. +
+
+ Lo más importante que influye en la respuesta que se envÃa, es la solicitud
+ que se simuló. La url de solicitud de un PUSH es dada por la aplicación,
+ pero ¿de donde vienen las cabeceras de la petición? por ejemplo si el PUSH
+ pide una cabecera accept-language
y si es asÃ, ¿con qué valor?
+
Httpd mirará la petición original (la que originó el PUSH) y copiará las
+ siguientes cabeceras a las peticiones PUSH:
+ user-agent
, accept
, accept-encoding
,
+ accept-language
, cache-control
.
+
+ Todas las otras cabeceras son ignorados. Las cookies tampoco serán copiadas. + Impulsar los recursos que requieren una cookie para estar presente no + funcionará. Esto puede ser una cuestión de debate. Pero a menos que esto se + discuta más claramente con el navegador, evitemos el exceso de precaución y + no expongamos las cookies donde podrÃan o no ser visibles. +
+ +Una alternativa de "Pushear" recursos es mandar una cabecera
+ Link
al cliente antes que la respuesta esté lista. Esto usa
+ una caracteristica de HTTP que se llama "Early Hints" y está descrita en
+ la RFC 8297.
Para poder usar esto, necesita habilitarlo explicitamente en el servidor + via
+ +H2EarlyHints on+ + +
(No está habilitado por defecto ya q ue algunos navegadores más antiguos + se caen con dichas respuestas.) +
+ +si esta funcionalidad esta activada, puede usar la directiva
+ H2PushResource
para que lance
+ "Early hints" y recursos mediante push:
+
<Location /xxx.html> + H2PushResource /xxx.css + H2PushResource /xxx.js +</Location>+ +
+ Esto lanzará una respuesta "103 Early Hints"
a un cliente
+ tan pronto como el servidor comience a procesar la solicitud.
+ Esto puede ser mucho antes que en el momento en que se determinaron los
+ primeros encabezados de respuesta, dependiendo de su aplicación web.
+
+ Si la directiva H2Push
está
+ habilitada, esto comenzará el PUSH justo después de la respuesta 103.
+ Sin embargo, si la directiva H2Push
está dehabilitada, la respuesta 103 se le enviará al cliente.
+
Idiomas disponibles: en |
diff --git a/docs/manual/howto/http2.xml.es b/docs/manual/howto/http2.xml.es
index 4939033269..9473e5c920 100644
--- a/docs/manual/howto/http2.xml.es
+++ b/docs/manual/howto/http2.xml.es
@@ -1,10 +1,9 @@
-
+
-
-
Esta es la guÃa para configurar HTTP/2 en Apache httpd. Ãsta
- caracterÃstica está lista en produción asà que es de esperar que las
- interfaces y las directivas se mantengan consistentes en cada verión.
+
+ Esta es la guÃa para configurar HTTP/2 en Apache httpd. Ãsta caracterÃstica
+ está lista en produción asà que es de esperar que las interfaces
+ y las directivas se mantengan consistentes en cada verión.
HTTP/2 es la evolución del protocolo de la capa de aplicación con más
- éxito, HTTP. Se centra en hacer un uso más eficiente de los recursos de red. No cambia la caracterÃstica fundamental de HTTP, la semántica. TodavÃa hay solicitudes, respuestas, cabeceras y todo los elementos tÃpicos de HTTP/1. Asà que, si ya conoce HTTP/1, también conoce el 95% de HTTP/2.
Se ha escrito mucho sobre HTTP/2 y de cómo funciona. La norma más estándar es, por supuesto, su RFC 7540 ( también disponible en un - formato más legible, YMMV). Asà que, ahà encontrará toda la especificación del protocolo.
+ formato más legible, YMMV). Asà que, ahà encontrará toda la especificación + del protocolo.Pero, como con todos los RFC, no es ideal como primera lectura. Es mejor entender primero qué se quiere hacer y después leer el RFC sobre @@ -57,34 +60,80 @@
Si le parece demasiado largo, o no lo ha leido, hay algunos términos y elementos a tener en cuenta cuando lea este documento:
El protocolo HTTP/2 se implementa con su propio módulo httpd, llamado acertadamente h2c
', la segura 'h2
'. Para h2c
permite el modo direct
- y el Upgrade:
a través de una solicitud inicial HTTP/1.
+ El protocolo HTTP/2 se implementa con su propio módulo httpd, llamado
+ acertadamente h2c
', la segura 'h2
'. Para
+ h2c
permite el modo direct
+ y el Upgrade:
a través de una solicitud inicial HTTP/1.
+
Una caracterÃstica de HTTP/2 que ofrece capacidades nuevas para desarrolladores de web es Server Push. Vea esa sección para saber como su aplicación web puede hacer uso de ella.
++ Una caracterÃstica de HTTP/2 que ofrece capacidades nuevas para + desarrolladores de web es Server Push. Vea esa sección + para saber como su aplicación web puede hacer uso de ella. +
libnghttp2
instalada en su sistema.
Cuando usted ejecuta ./configure
en el código fuente de Apache HTTPD, necesita indicarle '--enable-http2
' como una opción adicional para activar la compilación de este módulo. Si su libnghttp2
está ubicado en una ruta no habitual (cualquiera que sea en su sistema operativo), puede indicar su ubicación con '--with-nghttp2=<path>
' para ./configure
.
+ libnghttp2
instalada en su sistema.
+
+ Cuando usted ejecuta ./configure
en el código fuente de
+ Apache HTTPD, necesita indicarle '--enable-http2
' como una
+ opción adicional para activar la compilación de este módulo. Si su
+ libnghttp2
está ubicado en una ruta no habitual (cualquiera que
+ sea en su sistema operativo), puede indicar su ubicación con
+ '--with-nghttp2=<path>
' para ./configure
.
+
Aunque puede que eso sirva para la mayorÃa, habrá quien prefiera un nghttp2
compilado estáticamente para este módulo. Para ellos existe la opción --enable-nghttp2-staticlib-deps
. Funciona de manera muy similar a como uno debe enlazar openssl estáticamente para
Si la conexión soporta PUSH, estos dos recursos se enviarán al cliente. Como desarrollador web, puede configurar estas cabeceras o bien directamente en la respuesta de su aplicación o configurar su servidor con:
++ Si la conexión soporta PUSH, estos dos recursos se enviarán al cliente. + Como desarrollador web, puede configurar estas cabeceras o bien + directamente en la respuesta de su aplicación o configurar su servidor con: +
Si quiere usar enlaces con preload
sin activar un PUSH, puede usar el parámetro nopush
, como en:
Si quiere usar enlaces con preload
sin activar un PUSH, puede
+ usar el parámetro nopush
, como en:
o puede desactivar PUSH para su servidor por completo con la directiva
@@ -246,13 +300,91 @@ H2Push OffY hay más:
-El módulo mantiene un registro de lo que se ha enviado con PUSH para cada conexión (hashes de URLs, básicamente) y no hará PUSH del mismo recurso dos veces. Cuando la conexión se cierra, la información es descartada.
++ El módulo mantiene un registro de lo que se ha enviado con PUSH para cada + conexión (hashes de URLs, básicamente) y no hará PUSH del mismo recurso dos + veces. Cuando la conexión se cierra, la información es descartada. +
-Hay gente pensando cómo un cliente puede decirle al servidor lo que ya tiene, para evitar los PUSH de esos elementos, pero eso algo muy experimental ahora mismo.
++ Hay gente pensando cómo un cliente puede decirle al servidor lo que ya + tiene, para evitar los PUSH de esos elementos, pero eso algo muy + experimental ahora mismo. +
Otro borrador experimental que ha sido implementado en
+ Puede que PUSH no siempre lance la peticion/respuesta/funcionamiento que + uno espera. Hay varios estudios sobre este tema en internet, que explican + el beneficio y las debilidades de como diferentes funcionalidades del + cliente y de la red influyen en el resultado. + Por Ejemplo, que un servidor haga "PUSH" de recursos, no significa que el + navegador vaya a usar dichos datos. +
+
+ Lo más importante que influye en la respuesta que se envÃa, es la solicitud
+ que se simuló. La url de solicitud de un PUSH es dada por la aplicación,
+ pero ¿de donde vienen las cabeceras de la petición? por ejemplo si el PUSH
+ pide una cabecera accept-language
y si es asÃ, ¿con qué valor?
+
Httpd mirará la petición original (la que originó el PUSH) y copiará las
+ siguientes cabeceras a las peticiones PUSH:
+ user-agent
, accept
, accept-encoding
,
+ accept-language
, cache-control
.
+
+ Todas las otras cabeceras son ignorados. Las cookies tampoco serán copiadas. + Impulsar los recursos que requieren una cookie para estar presente no + funcionará. Esto puede ser una cuestión de debate. Pero a menos que esto se + discuta más claramente con el navegador, evitemos el exceso de precaución y + no expongamos las cookies donde podrÃan o no ser visibles. +
+ +Una alternativa de "Pushear" recursos es mandar una cabecera
+ Link
al cliente antes que la respuesta esté lista. Esto usa
+ una caracteristica de HTTP que se llama "Early Hints" y está descrita en
+ la RFC 8297.
Para poder usar esto, necesita habilitarlo explicitamente en el servidor + via
+ +(No está habilitado por defecto ya q ue algunos navegadores más antiguos + se caen con dichas respuestas.) +
+ +si esta funcionalidad esta activada, puede usar la directiva
+
+ Esto lanzará una respuesta "103 Early Hints"
a un cliente
+ tan pronto como el servidor comience a procesar la solicitud.
+ Esto puede ser mucho antes que en el momento en que se determinaron los
+ primeros encabezados de respuesta, dependiendo de su aplicación web.
+
+ Si la directiva