You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by lg...@apache.org on 2016/12/30 16:05:40 UTC
svn commit: r1776597 - /httpd/httpd/trunk/docs/manual/howto/http2.xml.es
Author: lgilbernabe
Date: Fri Dec 30 16:05:40 2016
New Revision: 1776597
URL: http://svn.apache.org/viewvc?rev=1776597&view=rev
Log:
Reviewed, and built the HTML.
Added:
httpd/httpd/trunk/docs/manual/howto/http2.xml.es
Added: httpd/httpd/trunk/docs/manual/howto/http2.xml.es
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/docs/manual/howto/http2.xml.es?rev=1776597&view=auto
==============================================================================
--- httpd/httpd/trunk/docs/manual/howto/http2.xml.es (added)
+++ httpd/httpd/trunk/docs/manual/howto/http2.xml.es [utf-8] Fri Dec 30 16:05:40 2016
@@ -0,0 +1,258 @@
+<?xml version='1.0' encoding='UTF-8' ?>
+<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
+<?xml-stylesheet type="text/xsl" href="../style/manual.es.xsl"?>
+<!-- English Revision: 1765974 -->
+<!-- Spanish translation : Daniel Ferradal -->
+<!-- Reviewed by Luis Gil de Bernab� Pfeiffer lgilbernabe[AT]apache.org -->
+
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<manualpage metafile="public_html.xml.meta">
+<parentdocument href="./">How-To / Tutoriales</parentdocument>
+
+ <title>Gu�a HTTP/2</title>
+
+ <summary>
+ <p>Esta es la gu�a para configurar HTTP/2 en Apache httpd. �sta
+ caracter�stica es <em>experimental</em> as� que es de esperar que algunas
+ directivas e interfaces cambien con nuevas versiones.
+ </p>
+ </summary>
+ <seealso><a href="../mod/mod_http2.html">mod_http2</a></seealso>
+
+ <section id="protocol">
+ <title>El protocolo HTTP/2</title>
+
+ <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>
+
+ <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>
+
+ <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
+ <em>c�mo</em> hacerlo. Un documento mucho mejor con el que empezar es
+ <a href="https://daniel.haxx.se/http2/">http2 explicado</a>
+ por Daniel Stenberg, el autor de <a href="https://curl.haxx.se">curl</a>.
+ �Tambi�n est� disponible cada vez en un mayor n�mero lenguajes!</p>
+
+ <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><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>
+ </ul>
+ </section>
+
+ <section id="implementation">
+ <title>HTTP/2 en Apache httpd</title>
+ <p>El protocolo HTTP/2 se implementa con su propio m�dulo httpd, llamado acertadamente <a href="../mod/mod_http2.html">mod_http2</a>. 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>
+ </section>
+
+ <section id="building">
+ <title>Compilar httpd con soporte HTTP/2</title>
+ <p><a href="../mod/mod_http2.html">mod_http2</a> usa la librer�a <a href="https://nghttp2.org">nghttp2</a>
+ como su implementaci�n base. Para compilar <code>mod_http2</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=<path></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 mod_ssl.</p>
+
+ <p>Hablando de SSL, necesita estar al tanto de que la mayor�a de los navegadores hablan HTTP/2 solo con URLs <code>https:</code>. As� que necesita un servidor con soporte SSL. Pero no solo eso, necesitar� una librer�a SSL que de soporte a la extensi�n <code>ALPN</code>. Si usa OpenSSL, necesita al menos la versi�n 1.0.2.</p>
+ </section>
+
+ <section id="basic-config">
+ <title>Configuraci�n b�sica</title>
+
+ <p>Cuando tiene un <code>httpd</code> compilado con <code>mod_http2</code> necesita una configuraci�n b�sica para activarlo. Lo primero, como con cualquier otro m�dulo de Apache, es que necesita cargarlo:</p>
+
+ <highlight language="config">
+LoadModule http2_module modules/mod_http2.so
+ </highlight>
+
+ <p>La segunda directiva que necesita a�adir a la configuraci�n de su servidor es:</p>
+
+ <highlight language="config">
+Protocols h2 http/1.1
+ </highlight>
+
+ <p>Esto permite h2, la variante segura, para ser el protocolo preferido de las conexiones en su servidor. Cuando quiera habilitar todas las variantes de HTTP/2, entonces simplemente configure:</p>
+
+ <highlight language="config">
+Protocols h2 h2c http/1.1
+ </highlight>
+
+ <p>Dependiendo de d�nde pone esta directiva, afecta a todas las conexiones o solo a las de ciertos host virtuales. La puede anidar, como en:</p>
+
+ <highlight language="config">
+Protocols http/1.1
+<VirtualHost ...>
+ ServerName test.example.org
+ Protocols h2 http/1.1
+</VirtualHost>
+ </highlight>
+
+ <p>Esto solo permite HTTP/1, excepto conexiones SSL hacia <code>test.example.org</code> que ofrecen HTTP/2.</p>
+
+ <note><title>Escoger un SSLCipherSuite seguro</title>
+ <p>Es necesario configurar <directive module="mod_ssl">SSLCipherSuite</directive> con una suite segura de cifrado TLS. La versi�n actual de mod_http2 no fuerza ning�n cifrado pero la mayor�a de los clientes si lo hacen. Encaminar un navegador hacia un servidor con <code>h2</code> activado con una suite inapropiada de cifrados forzar� al navegador a rehusar e intentar conectar por HTTP 1.1. Esto es un error com�n cuando se configura httpd con HTTP/2 por primera vez, �as� que por favor tenga en cuenta que debe evitar largas sesiones de depuraci�n! Si quiere estar seguro de la suite de cifrados que escoja, por favor evite los listados en la <a href="http://httpwg.org/specs/rfc7540.html#BadCipherSuites">Lista Negra de TLS para HTTP/2</a>.</p>
+ </note>
+
+ <p>El orden de los protocolos mencionados tambi�n es relevante. Por defecto, el primero es el protocolo preferido. Cuando un cliente ofrece m�ltiples opciones, la que est� m�s a la izquierda ser� la escogida. En</p>
+ <highlight language="config">
+Protocols http/1.1 h2
+ </highlight>
+
+ <p>el protocolo preferido es HTTP/1 y siempre ser� seleccionado a menos que el cliente <em>s�lo</em> soporte h2. Puesto que queremos hablar HTTP/2 con clientes que lo soporten, el orden correcto es:</p>
+
+ <highlight language="config">
+Protocols h2 h2c http/1.1
+ </highlight>
+
+ <p>Hay algo m�s respecto al orden: el cliente tambi�n tiene sus propias preferencias. Si quiere, puede configurar su servidor para seleccionar el protocolo preferido por el cliente:</p>
+
+ <highlight language="config">
+ProtocolsHonorOrder Off
+ </highlight>
+
+ <p>Hace que el orden en que <em>usted</em> escribi� los Protocols sea irrelevante y s�lo el orden de preferencia del cliente ser� decisorio.</p>
+
+ <p>Una �ltima cosa: cuando usted configura los protocolos no se comprueba si son correctos o est�n bien escritos. Puede mencionar protocolos que no existen, as� que no hay necesidad de proteger <code>Protocols</code> con ning�n <code>IfModule</code> de comprobaci�n.</p>
+
+ <p>Para m�s consejos avanzados de configuraci�n, vea la <a href="../mod/mod_http2.html#dimensioning">
+ secci�n de m�dulos sobre dimensionamiento</a> y <a href="../mod/mod_http2.html#misdirected">
+ como gestionar multiples hosts con el mismo certificado</a>.</p>
+ </section>
+
+ <section id="mpm-config">
+ <title>Configuraci�n MPM</title>
+
+ <p>HTTP/2 est� soportado en todos los m�dulos de multi-proceso que se ofrecen con httpd. Aun as�, si usa el mpm <code>prefork</code>, habr� restricciones severas.</p>
+
+ <p>En <code>prefork</code>, <code>mod_http2</code> solo procesar� una solicitud cada vez por conexi�n. Pero los clientes, como los navegadores, enviar�n muchas solicitudes al mismo tiempo. Si una de ellas tarda mucho en procesarse (o hace un sondeo que dura m�s de la cuenta), las otras solicitudes se quedar�n atascadas.</p>
+
+ <p><code>mod_http2</code> no evitar� este l�mite por defecto. El motivo es que <code>prefork</code> hoy en d�a solo se escoge si ejecuta motores de proceso que no est�n preparados para multi-hilo, p.ej. fallar� con m�s de una solicitud.</p>
+
+ <p>Si su configuraci�n lo soporta, hoy en d�a <code>event</code> es el mejor mpm que puede usar.</p>
+
+ <p>Si realmente est� obligado a usar <code>prefork</code> y quiere multiples solicitudes, puede configurar la directiva <directive module="mod_http2">H2MinWorkers</directive> para hacerlo posible. Sin embargo, si esto falla, es bajo su cuenta y riesgo.</p>
+ </section>
+
+ <section id="clients">
+ <title>Clientes</title>
+
+ <p>Casi todos los navegadores modernos dan soporte a HTTP/2, pero solo en conexiones SSL: Firefox (v43), Chrome (v45), Safari (since v9), iOS Safari (v9), Opera (v35), Chrome para Android (v49) e Internet Explorer (v11 en Windows10) (<a href="http://caniuse.com/#search=http2">Fuente</a>).</p>
+
+ <p>Otros clientes, as� c�mo otros servidores, est�n listados en la
+ <a href="https://github.com/http2/http2-spec/wiki/Implementations">wiki de Implementaciones</a>, entre ellos, implementaciones para c, c++, common lisp, dart, erlang, haskell, java, nodejs, php, python, perl, ruby, rust, scala y swift.</p>
+
+ <p>Muchos de las implementaciones de clientes que no son navegadores soportan HTTP/2 sobre texto plano, h2c. La m�s vers�til es <a href="https://curl.haxx.se">curl</a>.</p>
+ </section>
+
+ <section id="tools">
+ <title>Herramientas �tiles para depurar HTTP/2</title>
+
+ <p>La primera herramienta a mencionar es por supuesto <a href="https://curl.haxx.se">curl</a>. Por favor aseg�rese de que su versi�n soporta HTTP/2 comprobando sus <code>Caracter�sticas</code>:</p>
+ <highlight language="config">
+ $ curl -V
+ curl 7.45.0 (x86_64-apple-darwin15.0.0) libcurl/7.45.0 OpenSSL/1.0.2d zlib/1.2.8 nghttp2/1.3.4
+ Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 [...]
+ Features: IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP <strong>HTTP2</strong>
+ </highlight>
+ <note><title>Notas sobre Mac OS homebrew</title>
+ brew install curl --with-openssl --with-nghttp2
+ </note>
+ <p>Y para una inspecci�n en gran profundidad <a href="https://wiki.wireshark.org/HTTP2">wireshark</a>.</p>
+ <p>El paquete <a href="https://nghttp2.org">nghttp2</a> tambi�n incluye clientes, tales como:</p>
+ <ul>
+ <li><a href="https://nghttp2.org/documentation/nghttp.1.html">nghttp
+ </a> - util para visualizar la frames de HTTP/2 y tener una mejor idea de como funciona el protocolo.</li>
+ <li><a href="https://nghttp2.org/documentation/h2load-howto.html">h2load</a> - �til para hacer un stress-test de su servidor.</li>
+ </ul>
+
+ <p>Chrome ofrece logs detallados de HTTP/2 en sus conexiones a trav�s de la <a href="chrome://net-internals/#http2">p�gina especial de net-internals</a>. Tambi�n hay una extensi�n interesante para <a href="https://chrome.google.com/webstore/detail/http2-and-spdy-indicator/mpbpobfflnpcgagjijhmgnchggcjblin?hl=en">Chrome</a> y <a href="https://addons.mozilla.org/en-us/firefox/addon/spdy-indicator/">Firefox</a> con la que visualizar cuando su navegador usa HTTP/2.</p>
+ </section>
+
+ <section id="push">
+ <title>Server Push</title>
+
+ <p>El protocolo HTTP/2 permite al servidor hacer PUSH de respuestas a un cliente que nunca las solicit�. El tono de la conversaci�n es: "Aqu� tiene una solicitud que nunca envi� y la respuesta llegar� pronto..."</p>
+
+ <p>Pero hay restricciones: el cliente puede deshabilitar esta caracter�stica y el servidor entonces solo podr� hacer PUSH en una solicitud que hizo previamente del cliente.</p>
+
+ <p>La intenci�n es permitir al servidor enviar recursos que el cliente seguramente vaya a necesitar, p. ej. un recurso css o javascript que pertenece a una p�gina html que el cliente solicit�, un grupo de im�genes a las que se hace referencia en un css, etc.</p>
+
+ <p>La ventaja para el cliente es que ahorra tiempo para solicitudes que pueden tardar desde unos pocos milisegundos a medio segundo, dependiendo de la distancia entre el cliente y el servidor. La desventaja es que el cliente puede recibir cosas que ya tiene en su cache. Por supuesto que HTTP/2 soporta cancelaci�n previa de tales solicitudes, pero aun as� se malgastan recursos.</p>
+
+ <p>Resumiendo: no hay una estrategia mejor sobre c�mo usar esta caracter�stica de HTTP/2 y todo el mundo est� experimentando con ella. As� que, �c�mo experimenta usted con ella en Apache httpd?</p>
+
+ <p><code>mod_http2</code> busca e inspecciona las cabeceras de respuesta
+ <code>Link</code> con cierto formato:</p>
+
+ <highlight language="config">
+Link </xxx.css>;rel=preload, </xxx.js>; rel=preload
+ </highlight>
+
+ <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>
+
+ <highlight language="config">
+<Location /xxx.html>
+ Header add Link "</xxx.css>;rel=preload"
+ Header add Link "</xxx.js>;rel=preload"
+</Location>
+ </highlight>
+
+ <p>Si quiere usar enlaces con <code>preload</code> sin activar un PUSH, puede usar el par�metro <code>nopush</code>, como en:</p>
+
+ <highlight language="config">
+Link </xxx.css>;rel=preload;nopush
+ </highlight>
+
+ <p>o puede desactivar PUSH para su servidor por completo con la directiva </p>
+
+ <highlight language="config">
+H2Push Off
+ </highlight>
+
+ <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>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>mod_http2</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>
+ </section>
+
+</manualpage>