Commit cb5cb2e5 authored by Luis Gil's avatar Luis Gil
Browse files

Updated to match English revision 1834263 added the hints secction to spanish

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1837169 13f79535-47bb-0310-9956-ffa450edef68
parent b5ab8ace
Loading
Loading
Loading
Loading
+158 −28
Changes for docs/manual/howto/http2.html.es: 158 added lines, 28 removed lines.
Original line number Diff line number Diff line
@@ -27,14 +27,11 @@
<a href="../es/howto/http2.html" title="Español">&nbsp;es&nbsp;</a> |
<a href="../fr/howto/http2.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a></p>
</div>
<div class="outofdate">Esta traducción podría estar
            obsoleta. Consulte la versión en inglés de la
            documentación para comprobar si se han producido cambios
            recientemente.</div>

    <p>Esta es la guía para configurar HTTP/2 en Apache httpd. Ésta 
    característica está <em>lista en produción</em> así que es de esperar que las 
    interfaces y las directivas se mantengan consistentes en cada verión.

    <p>
        Esta es la guía para configurar HTTP/2 en Apache httpd. Ésta característica
        está <em>lista en produción</em> así que es de esperar que las interfaces
        y las directivas se mantengan consistentes en cada verión.
    </p>
  </div>
<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#protocol">El protocolo HTTP/2</a></li>
@@ -45,6 +42,7 @@
<li><img alt="" src="../images/down.gif" /> <a href="#clients">Clientes</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#tools">Herramientas útiles para depurar HTTP/2</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#push">Server Push</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#earlyhints">"Early Hints"</a></li>
</ul><h3>Consulte también</h3><ul class="seealso"><li><code class="module"><a href="../mod/mod_http2.html">mod_http2</a></code></li><li><a href="#comments_section">Comentarios</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
@@ -52,13 +50,17 @@
    

    <p>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.</p>
    é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.</p>
    
    <p>Se ha escrito mucho sobre HTTP/2 y de cómo funciona. La norma más
    estándar es, por supuesto, su 
    <a href="https://tools.ietf.org/html/rfc7540">RFC 7540</a> 
    (<a href="http://httpwg.org/specs/rfc7540.html"> también disponible en un
    formato más legible, YMMV</a>). Así que, ahí encontrará toda la especificación del protocolo.</p>
    formato más legible, YMMV</a>). Así que, ahí encontrará toda la especificación 
    del protocolo.</p>

    <p>Pero, como con todos los RFC, no es ideal como primera lectura. Es mejor
    entender primero <em>qué</em> se quiere hacer y después leer el RFC sobre 
@@ -70,34 +72,80 @@
    <p>Si le parece demasiado largo, o no lo ha leido, hay algunos términos
    y elementos a tener en cuenta cuando lea este documento:</p>
    <ul>
        <li>HTTP/2 es un <strong>protocolo binario</strong>, al contrario que HTTP 1.1 que es texto plano. La intención para HTTP 1.1 es que sea legible (por ejemplo capturando el tráfico de red) mientras que para HTTP/2 no. Más información en el FAQ oficial <a href="https://http2.github.io/faq/#why-is-http2-binary">¿Por qué es binario HTTP/2?</a></li>
        <li>HTTP/2 es un <strong>protocolo binario</strong>, al contrario que 
        HTTP 1.1 que es texto plano. La intención para HTTP 1.1 es que sea 
        legible (por ejemplo capturando el tráfico de red) mientras que para 
        HTTP/2 no. Más información en el FAQ oficial 
        <a href="https://http2.github.io/faq/#why-is-http2-binary">¿Por qué es 
            binario HTTP/2?</a></li>

        <li><strong>h2</strong> es HTTP/2 sobre TLS (negociación de protocolo a través de ALPN).</li>
        <li><strong>h2</strong> es HTTP/2 sobre TLS (negociación de protocolo a 
        través de ALPN).</li>

        <li><strong>h2c</strong> es HTTP/2 sobre TCP.</li>

        <li>Un <strong>frame</strong> es la unidad más pequeña de comunicación dentro de una conexión HTTP/2, que consiste en una cabecera y una secuencia de octetos de longitud variable estructurada de acuerdo con el tipo de frame. Más información en la documentación oficial <a href="http://httpwg.org/specs/rfc7540.html#FramingLayer">Sección de Capa de Frame</a>.</li>

        <li>Un <strong>stream</strong> es un flujo bidireccional de frames dentro de una conexión HTTP/2. El concepto correspondiente en HTTP 1.1 es un intercambio de mensajes de solicitud/respuesta. Más información en la documentación oficial <a href="http://httpwg.org/specs/rfc7540.html#StreamsLayer">Sección Capa de Stream</a>.</li>

        <li>HTTP/2 es capaz de llevar <strong>múltiples streams</strong> de datos sobre la misma conexión TCP, evitando la clásica solicitud lenta "head-of-line blocking" de HTTP 1.1 y evitando generar múltiples conexiones TCP para cada solicitud/respuesta (KeepAlive parcheó el problema en HTTP 1.1 pero no lo resolvió completamente).</li>
        <li>Un <strong>frame</strong> es la unidad más pequeña de comunicación 
        dentro de una conexión HTTP/2, que consiste en una cabecera y una secuencia 
        de octetos de longitud variable estructurada de acuerdo con el tipo de 
        frame. Más información en la documentación oficial 
        <a href="http://httpwg.org/specs/rfc7540.html#FramingLayer">Sección de 
            Capa de Frame</a>.</li>

        <li>Un <strong>stream</strong> es un flujo bidireccional de frames dentro 
        de una conexión HTTP/2. El concepto correspondiente en HTTP 1.1 es un 
        intercambio de mensajes de solicitud/respuesta. Más información en la 
        documentación oficial 
        <a href="http://httpwg.org/specs/rfc7540.html#StreamsLayer">Sección Capa 
            de Stream</a>.</li>

        <li>
            HTTP/2 es capaz de llevar <strong>múltiples streams</strong> de datos
            sobre la misma conexión TCP, evitando la clásica solicitud lenta 
            "head-of-line blocking" de HTTP 1.1 y evitando generar múltiples conexiones
            TCP para cada solicitud/respuesta (KeepAlive parcheó el problema en 
            HTTP 1.1 pero no lo resolvió completamente).
      </li>
    </ul>
  </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="implementation" id="implementation">HTTP/2 en Apache httpd</a><a title="Enlace permanente" href="#implementation" class="permalink">&para;</a></h2>
    
    <p>El protocolo HTTP/2 se implementa con su propio módulo httpd, llamado acertadamente <code class="module"><a href="../mod/mod_http2.html">mod_http2</a></code>. 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 '<code>h2c</code>', la segura '<code>h2</code>'. Para <code>h2c</code> permite el modo <em>direct</em>
    y el <code>Upgrade:</code> a través de una solicitud inicial HTTP/1.</p>

    <p>Una característica de HTTP/2 que ofrece capacidades nuevas para desarrolladores de web es <a href="#push">Server Push</a>. Vea esa sección para saber como su aplicación web puede hacer uso de ella.</p>
    <p>
        El protocolo HTTP/2 se implementa con su propio módulo httpd, llamado 
        acertadamente <code class="module"><a href="../mod/mod_http2.html">mod_http2</a></code>. 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 '<code>h2c</code>', la segura '<code>h2</code>'. Para 
        <code>h2c</code> permite el modo <em>direct</em>
        y el <code>Upgrade:</code> a través de una solicitud inicial HTTP/1.
    </p>
    
    <p>
        Una característica de HTTP/2 que ofrece capacidades nuevas para 
        desarrolladores de web es <a href="#push">Server Push</a>. Vea esa sección
         para saber como su aplicación web puede hacer uso de ella.
     </p>
  </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="building" id="building">Compilar httpd con soporte HTTP/2</a><a title="Enlace permanente" href="#building" class="permalink">&para;</a></h2>
    
    <p><code class="module"><a href="../mod/mod_http2.html">mod_http2</a></code> usa la librería <a href="https://nghttp2.org">nghttp2</a>
    como su implementación base. Para compilar <code class="module"><a href="../mod/mod_http2.html">mod_http2</a></code> necesita al menos la versión 1.2.1 de <code>libnghttp2</code> instalada en su sistema.</p>

    <p>Cuando usted ejecuta <code>./configure</code> en el código fuente de Apache HTTPD, necesita indicarle '<code>--enable-http2</code>' como una opción adicional para activar la compilación de este módulo. Si su <code>libnghttp2</code> está ubicado en una ruta no habitual (cualquiera que sea en su sistema operativo), puede indicar su ubicación con '<code>--with-nghttp2=&lt;path&gt;</code>' para <code>./configure</code>.</p>
    <p>
        <code class="module"><a href="../mod/mod_http2.html">mod_http2</a></code> usa la librería <a href="https://nghttp2.org">
        nghttp2</a>como su implementación base. Para compilar 
        <code class="module"><a href="../mod/mod_http2.html">mod_http2</a></code> necesita al menos la versión 1.2.1 de 
        <code>libnghttp2</code> instalada en su sistema.
    </p>

    <p>
        Cuando usted ejecuta <code>./configure</code> en el código fuente de 
        Apache HTTPD, necesita indicarle '<code>--enable-http2</code>' como una 
        opción adicional para activar la compilación de este módulo. Si su 
        <code>libnghttp2</code> está ubicado en una ruta no habitual (cualquiera que 
        sea en su sistema operativo), puede indicar su ubicación con 
        '<code>--with-nghttp2=&lt;path&gt;</code>' para <code>./configure</code>.
    </p>

    <p>Aunque puede que eso sirva para la mayoría, habrá quien prefiera un <code>nghttp2</code> compilado estáticamente para este módulo. Para ellos existe la opción <code>--enable-nghttp2-staticlib-deps</code>. Funciona de manera muy similar a como uno debe enlazar openssl estáticamente para <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code>.</p>

@@ -228,7 +276,11 @@
    <pre class="prettyprint lang-config">Link &lt;/xxx.css&gt;;rel=preload, &lt;/xxx.js&gt;; rel=preload</pre>


    <p>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:</p>
    <p>
        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:
    </p>

    <pre class="prettyprint lang-config">&lt;Location /xxx.html&gt;
    Header add Link "&lt;/xxx.css&gt;;rel=preload"
@@ -236,7 +288,8 @@
&lt;/Location&gt;</pre>


    <p>Si quiere usar enlaces con <code>preload</code> sin activar un PUSH, puede usar el parámetro <code>nopush</code>, como en:</p>
    <p>Si quiere usar enlaces con <code>preload</code> sin activar un PUSH, puede
    usar el parámetro <code>nopush</code>, como en:</p>

    <pre class="prettyprint lang-config">Link &lt;/xxx.css&gt;;rel=preload;nopush</pre>

@@ -248,13 +301,90 @@

    <p>Y hay más:</p>

    <p>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.</p>
    <p>
        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.
    </p>

    <p>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.</p>
    <p>
        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.
    </p>

    <p>Otro borrador experimental que ha sido implementado en 
    <code class="module"><a href="../mod/mod_http2.html">mod_http2</a></code> es el <a href="https://tools.ietf.org/html/draft-ruellan-http-accept-push-policy-00"> Campo de Cabecera
    Accept-Push-Policy</a> en la que un cliente puede, para cada solicitud, definir qué tipo de PUSH acepta.</p>
    Accept-Push-Policy</a> en la que un cliente puede, para cada solicitud, definir 
    qué tipo de PUSH acepta.</p>

    <p>
        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.
    </p>
    <p>
        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 <code>accept-language</code> y si es así, ¿con qué valor?
    </p>
    <p>Httpd mirará la petición original (la que originó el PUSH) y copiará las
        siguientes cabeceras a las peticiones PUSH:
        <code>user-agent</code>, <code>accept</code>, <code>accept-encoding</code>,
        <code>accept-language</code>, <code>cache-control</code>.
    </p>
    <p>
        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.
    </p>

</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="earlyhints" id="earlyhints">"Early Hints"</a><a title="Enlace permanente" href="#earlyhints" class="permalink">&para;</a></h2>
    

    <p>Una alternativa de "Pushear" recursos es mandar una cabecera 
        <code>Link</code> al cliente antes que la respuesta esté lista. Esto usa
        una caracteristica de HTTP que se llama  "Early Hints" y está descrita en
        la <a href="https://tools.ietf.org/html/rfc8297">RFC 8297</a>.</p>
    <p>Para poder usar esto, necesita habilitarlo explicitamente en el servidor 
    via</p>
    
    <pre class="prettyprint lang-config">H2EarlyHints on</pre>

    
    <p>(No está habilitado por defecto ya q ue algunos navegadores más antiguos 
        se caen con dichas  respuestas.)
    </p>

    <p>si esta funcionalidad esta activada, puede usar la directiva 
        <code class="directive"><a href="../mod/mod_http2.html#h2pushresource">H2PushResource</a></code> para que lance 
        "Early hints" y recursos mediante push:
    </p>
    <pre class="prettyprint lang-config">&lt;Location /xxx.html&gt;
    H2PushResource /xxx.css
    H2PushResource /xxx.js
&lt;/Location&gt;</pre>

    <p>
        Esto lanzará una respuesta <code>"103 Early Hints"</code> a un cliente 
        tan pronto como el servidor <em>comience</em> 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.
    </p>

    <p>
        Si la directiva <code class="directive"><a href="../mod/mod_http2.html#h2push">H2Push</a></code> está 
        habilitada, esto comenzará el PUSH justo después de la respuesta 103.
        Sin embargo, si la directiva <code class="directive"><a href="../mod/mod_http2.html#h2push">H2Push</a></code> está dehabilitada, la respuesta 103 se le enviará al cliente.
    </p>
  </div></div>
<div class="bottomlang">
<p><span>Idiomas disponibles: </span><a href="../en/howto/http2.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+158 −26

File changed.

Preview size limit exceeded, changes collapsed.