Esta es una implementación experimental del protocolo SPDY de Google en C.
Esta biblioteca proporciona la implementación de la capa de encuadre SPDY versión 2, 3 y 3.1. No realiza ninguna operación de E/S. Cuando la biblioteca los necesita, llama a las funciones de devolución de llamada proporcionadas por la aplicación. Tampoco incluye ningún mecanismo de votación de eventos, por lo que la aplicación puede elegir libremente la forma de manejar eventos. Este código de biblioteca no depende de ninguna biblioteca SSL en particular (excepto por ejemplo, programas que dependen de OpenSSL 1.0.1 o posterior).
Este proyecto también desarrolla SPDY Client, Server y Proxy además de la biblioteca SPDYLAY. Consulte la sección de programas de cliente y servidor SPDY.
Se ha implementado la mayor parte de la funcionalidad SPDY/2, SPDY/3 y SPDY/3.1. En ambas versiones, el soporte directo de servidor-empush aún no ha estado disponible. Sin embargo, la aplicación puede lograr el servidor de servidor utilizando API primitivas.
Como se describe a continuación, podemos crear un cliente y servidor SPDY con la API SPDYLAY actual.
Se necesitan los siguientes paquetes para construir la biblioteca:
Para construir y ejecutar los programas de prueba unitaria, se necesitan los siguientes paquetes:
Para construir y ejecutar los programas de ejemplo, se necesitan los siguientes paquetes:
Para habilitar -a opción (obtener activos vinculados desde el recurso descargado) en spdycat (uno de los programas de ejemplo), se necesitan los siguientes paquetes:
Para construir SPDY/HTTPS a HTTP reverse proxy shrpx (uno de los programas de ejemplo), se necesitan los siguientes paquetes:
Si está utilizando Ubuntu 12.04, necesita instalados los siguientes paquetes:
$ apt-get install automago automake autotools-dev LBTOOL PKG-Config ZLIB1G-DEV LIBCUNIT1-DEV LIBSSL-DEV LIBXML2-DEVIVENT-DEVEV
Construir desde Git es fácil, pero asegúrese de que se use al menos Autoconf 2.68:
$ Autoreconf -i $ AUTOMAKE $ Autoconf $ ./configure $ make
Para construir documentación, ejecute:
$ make html
Los documentos se generarán en doc/manual/html/ .
Los documentos generados no se instalarán con make install .
En esta sección, describimos brevemente cómo construir Android Binary utilizando el compilador transversal de Android NDK en Debian Linux.
Ofrecemos scripts android-config y android-make para facilitar la compilación. Para que estos script funcionen, la cadena de herramientas NDK debe instalarse de la siguiente manera. Primero, deje introducir la variable de entorno ANDROID_HOME . Necesitamos instalar Toolchain en $ANDROID_HOME/toolchain . Un usuario puede elegir libremente la ruta para ANDROID_HOME . Por ejemplo, para instalar ToolChain en $ANDROID_HOME/toolchain , haga esto en el directorio donde se desempaqueta NDK:
$ Build/Tools/Make-Standalone-Toolchain.sh --platform = Android-9 --install-Dir = $ Android_home/Toolchain
El nivel de plataforma no es importante aquí porque no usamos API C/C ++ específica de Android.
Las bibliotecas dependientes, como OpenSSL y Libevent, deben construirse con la cadena de herramientas e instalarse en $ANDROID_HOME/usr/local . Recomendamos construir estas bibliotecas como biblioteca estática para facilitar la implementación. El soporte de libxml2 está actualmente deshabilitado.
Usamos Zlib, que viene con Android NDK, por lo que no tenemos que construirlo por nosotros mismos.
Antes de ejecutar android-config y android-make , se debe establecer una variable de entorno ANDOIRD_HOME para apuntar a la ruta correcta.
Después de android-config , ejecute android-make para compilar fuentes. android-make solo incluye el compilador de ruta al compilador cruzado en PATH y ejecutar la marca. Entonces, si incluye el compilador Path to Corss por usted mismo, puede ejecutar Make para construir spdylay y herramientas como de costumbre.
La referencia de API pública está disponible en línea. Visite http://tatsuhiro-t.github.io/spdylay/. Todas las API públicas están en spdylay/spdylay.h . Todas las funciones de API públicas, así como la función de devolución de llamada, se documentan typedefs.
El directorio SRC contiene implementaciones de clientes y servidores SPDY utilizando la biblioteca SPDYLAY. Estos programas están destinados a asegurarse de que la API SPDYLAY sea acutalmente utilizable para la implementación real y también para fines de depuración. Tenga en cuenta que se requiere OpenSSL con soporte NPN para construir y ejecutar estos programas. En el momento de este escrito, el OpenSSL 1.0.1 admite NPN.
El cliente SPDY se llama spdycat . Es un descargador simple muerto como wget/curl. Se conecta al servidor SPDY y obtiene recursos dados en la línea de comandos:
$ src/spdycat -h
Uso: SPDYCAT [-OANSV23] [-t <seconds>] [-w <vaent_bits>] [--cert = <cert>]
[--key = <key>] [-no-tls] [-d <sil>] [-m <n>] [-p <proxy_host>]
[-P <Proxy_port>] <Uri> ...
Opciones:
-V, -VERBOSE INFORMACIÓN DE DEBUG IMPRESA COMO RECEPCIÓN/
Transmisión de marcos y pares de nombre/valor.
-n,-NULL-Out descarte datos descargados.
-O,--Remote-Name Guardar datos de descarga en el directorio actual.
El nombre de archivo es Derido de URI. Si uri
termina con '/', 'index.html' se usa como un
Nombre del archivo. Aún no implementado.
-2, - -SPDY2 solo usa SPDY/2.
-3, - -SPDY3 solo usa SPDY/3.
--pdy3-1 solo usa SPDY/3.1.
-t, -timeOut = <n> TimeOut cada solicitud después de <n> segundos.
-W,--Window-bits = <n>
Establece el tamaño de la ventana inicial en 2 ** <n>.
-a,-get-acts descargue activos como hojas de estilo, imágenes
y archivos de script vinculados desde la descarga
recurso. Solo enlaces cuyos orígenes son el
Lo mismo con el recurso de enlace será
descargado.
-S, -Estadísticas de impresión -STAT.
-H, -Header Agregue un encabezado a las solicitudes.
--cert = <cert> Use el archivo de certificado de cliente especificado.
El archivo debe estar en formato PEM.
--Key = <Key> Use el archivo de clave privada del cliente. El archivo
Debe estar en formato PEM.
--NO-TLS Disable SSL/TLS. Use -2, -3 o - -spdy3-1 a
Especifique la versión del protocolo SPDY para usar.
-d, --data = <chile> Publicar archivo al servidor. Si - se da, datos
se leerá desde Stdin.
-M, --multiply = <n> Solicite cada Uri <n> veces. Por defecto, lo mismo
Uri no se solicita dos veces. Esta opción
lo deshabilita también.
-p, --proxy = <gest> Use este host como un proxy SPDY
-P, --proxy-port = <port>
Use esto como el puerto del proxy SPDY si
uno está configurado
-Salida de registro de color de la fuerza color.
$ src/spdycat -nv https://www.google.com/
[0.021] NPN Seleccione el siguiente protocolo: el servidor remoto ofrece:
* SPDY/4A4
* SPDY/3.1
* SPDY/3
* http/1.1
NPN seleccionó el protocolo: SPDY/3.1
[0.029] Playshake completo
[0.029] Frame de configuración de Recv <versión = 3, flags = 0, longitud = 20>
(NIV = 2)
[4 (1): 100]
[7 (0): 1048576]
[0.029] RECV Window_update Frame <versión = 3, flags = 0, longitud = 8>
(stream_id = 0, delta_window_size = 983040)
[0.029] Enviar syn_stream frame <versión = 3, flags = 1, longitud = 221>
(stream_id = 1, asociar_stream_id = 0, pri = 3)
: Host: www.google.com
: método: obtener
:camino: /
: esquema: https
: versión: http/1.1
aceptar: */*
Aceptación de aceptación: GZIP, desinflar
agente de usuario: spdylay/1.2.0-devel
[0.080] Recv syn_reply frame <versión = 3, flags = 0, longitud = 619>
(stream_id = 1)
: Estado: 302 encontrado
: versión: http/1.1
Protocolo alternativo: 443: Quic
Control de caché: privado
Contenido-longitud: 262
Tipo de contenido: texto/html; Charset = UTF-8
Fecha: martes, 19 de noviembre de 2013 13:47:18 GMT
Ubicación: https://www.google.co.jp/
Servidor: GWS
X-Frame-Opciones: Sameorigin
X-XSS-Protección: 1; modo = bloque
[0.080] Frame de datos Recv (stream_id = 1, flags = 1, longitud = 262)
[0.080] Enviar marco de Goway <versión = 3, flags = 0, longitud = 8>
(last_good_stream_id = 0)
SPDY Server se llama spdyd y sirve archivos estáticos. Es una sola conexión de roscado y multiplexes utilizando un enchufe sin bloqueo. Los archivos estáticos se leen utilizando la llamada al sistema de E/S de bloqueo, read(2) . Habla SPDY/2 y SPDY/3:
$ src/spdyd --htdocs =/your/htdocs/-v 3000 server.key server.crt
IPv4: escuche en el puerto 3000
IPv6: escuche en el puerto 3000
El protocolo negociado Next: SPDY/3.1
[ID = 1] [1.296] Enviar configuración marco <versión = 3, flags = 0, longitud = 12>
(NIV = 1)
[4 (0): 100]
[id = 1] [1.297] Recv syn_stream marco <versión = 3, flags = 1, longitud = 228>
(stream_id = 1, asociar_stream_id = 0, pri = 3)
: anfitrión: localhost: 3000
: método: obtener
: ruta: /Readme
: esquema: https
: versión: http/1.1
aceptar: */*
Aceptación de aceptación: GZIP, desinflar
agente de usuario: spdylay/1.2.0-devel
[id = 1] [1.297] Enviar syn_reply frame <versión = 3, flags = 0, longitud = 116>
(stream_id = 1)
: Estado: 200 OK
: versión: http/1.1
Cache-Control: Max-Age = 3600
Contenido-longitud: 66
Fecha: martes, 19 de noviembre de 2013 14:35:24 GMT
Último modificado: martes, 17 de enero de 2012 15:39:01 GMT
Servidor: SPDYD SPDYLAY/1.2.0-DEVEV
[id = 1] [1.297] Enviar marco de datos (stream_id = 1, flags = 0, longitud = 66)
[id = 1] [1.297] Enviar marco de datos (stream_id = 1, flags = 1, longitud = 0)
[id = 1] [1.297] stream_id = 1 cerrado
[id = 1] [1.297] RECV Marco de Goway <versión = 3, flags = 0, longitud = 8>
(last_good_stream_id = 0)
[id = 1] [1.297] cerrado
Actualmente, spdyd necesita epoll o kqueue .
Para los usuarios de Shrpx que usan SHRPX como proxy SPDY: considere migrar a NGHTTPX desarrollado en el proyecto NGHTTP2. NGHTTPX también admite el proxy SPDY.
El shrpx es un proxy inverso de múltiples subprocesos para SPDY/HTTPS. Convierte el tráfico SPDY/HTTPS en HTTP simple. Inicialmente se desarrolla como un proxy inverso, pero ahora tiene otros modos de operación, como un proxy delantero frontend. Por ejemplo, con la opción --spdy-proxy ( -s en taquigrafía), se puede usar como proxy SPDY seguro con un proxy (por ejemplo, calamar) en el backend. Con la opción --cliet-proxy ( -p ), actúa como un proxy ordinal del avance pero espera un proxy SPDY seguro en el backend. Por lo tanto, se convierte en un adaptador para asegurar el proxy SPDY para los clientes que no admite SPDY Proxy. El otro modo de operación notable es --spdy-relay , que solo transmite el tráfico SPDY/HTTPS al backend en SPDY. La siguiente tabla resume los modos de operación.
| Opción de modo | Interfaz | Backend | Nota |
|---|---|---|---|
| por defecto | Spdy/https | Http | Proxy inverso |
--spdy | Spdy/https | Http | Proxy SPDY |
--spdy-relay | Spdy/https | Spdy | |
--client | Http | Spdy | |
--client-proxy | Http | Spdy | Proxy |
El shrpx admite el archivo de configuración. Consulte -Opción --conf y archivo de configuración de muestra shrpx.conf.sample .
Describimos brevemente la arquitectura de shrpx aquí. Tiene un hilo dedicado que escucha en los enchufes del servidor. Cuando aceptó la conexión entrante, pasa el descriptor de archivo de la conexión entrante a uno de los hilos de trabajadores. Cada hilo de trabajadores tiene su propio bucle de eventos y puede manejar muchas conexiones utilizando E/S sin bloqueo. Se puede especificar el número de subproceso de trabajadores utilizando la opción de línea de comandos. El libevento se usa para manejar las E/S de red de bajo nivel.
Aquí están las opciones de línea de comandos:
$ src/shrpx -h
Uso: shrpx [-dh] [-s | -client | -p] [-b <host, puerto>]
[-f <host, puerto>] [-n <ores>] [-c <num>] [-l <livel>]
[Opciones ...] [<<swerkey> <cert>]
Un proxy inverso para SPDY/HTTPS.
Argumentos posicionales:
<Sarty_Key> Establezca ruta a la clave privada del servidor. Requerido
a menos que se especifique -p o -Client.
<cert> Establezca ruta al certificado del servidor. Requerido
a menos que se especifique -p o -Client.
Opciones:
Conexiones:
-B, - -Backend = <host, puerto>
Establezca el host y el puerto de back -end.
Valor predeterminado: '127.0.0.1,80'
-f, --frontend = <host, puerto>
Establezca el host y el puerto frontend.
Valor predeterminado: '0.0.0.0,3000'
--Backlog = <num> Establecer el tamaño de la cartera de escucha.
Valor predeterminado: 256
--Backend-IPV4 Resolver Backend HostName a la dirección IPv4
solo.
--Backend-IPV6 Resolver Backend HostName a la dirección IPv6
solo.
Actuación:
-n, --workers = <ores>
Establezca el número de hilos de trabajadores.
Valor predeterminado: 1
--Read-rate = <Scifi> Establezca la tasa de lectura promedio máxima en frontend
conexión. Configurar 0 en esta opción significa
La tasa de lectura es ilimitada.
Valor predeterminado: 1048576
--Read-Burst = <size>
Establecer el tamaño máximo de ráfaga de lectura en frontend
conexión. Configurar 0 en esta opción significa
El tamaño de la ráfaga de lectura es ilimitado.
Valor predeterminado: 4194304
--write-tasa = <cedife>
Establecer la tasa de escritura promedio máxima en frontend
conexión. Configurar 0 en esta opción significa
La tasa de escritura es ilimitada.
Valor predeterminado: 0
--WRITE-Burst = <size>
Establezca el tamaño máximo de ráfaga de escritura en frontend
conexión. Configurar 0 en esta opción significa
El tamaño de la ráfaga de escritura es ilimitado.
Valor predeterminado: 0
Se acabó el tiempo:
--frontend-spdy-read timeout = <ec>
Especifique el tiempo de espera de lectura para SPDY Frontend
conexión. Valor predeterminado: 180
-frontend-read timeout = <ec>
Especifique el tiempo de espera de lectura para la frontend no spdy
conexión. Valor predeterminado: 180
-frontend-write timeout = <ec>
Especificar el tiempo de espera de escritura tanto para SPDY como para
Frontends sin spd.
conexión. Valor predeterminado: 60
--backend-read timeout = <ec>
Especifique el tiempo de espera de lectura para la conexión de backend.
Valor predeterminado: 900
--backend-write timeout = <ec>
Especificar el tiempo de espera de escritura para el backend
conexión. Valor predeterminado: 60
--backend-skeep-alive timeout = <ec>
Especifique el tiempo de espera de Keep-Alive para el backend
conexión. Valor predeterminado: 60
--backend-http-prooxy-uri = <Uri>
Especificar uri proxy en el formulario
http: // [<ser User>: <ass>@] <Proxy>: <port>. Si
un proxy requiere autenticación, especificar
<Serement> y <S Pass>. Tenga en cuenta que deben ser
porcentual correctamente codificado. Este proxy se usa
Cuando la conexión de backend es SPDY. Primero,
Realice una solicitud de conexión al proxy y
se conecta al backend en nombre de
shrpx. Esto forma túnel. Después de eso, shrpx
realiza SSL/TLS HandShake con el
aguas abajo a través del túnel. Los tiempos de espera
Al conectar y hacer la solicitud de conexión
se puede especificar por--backend-lectura-tiempout
y-Opciones de tiempo de tiempo de backend-writeut.
SSL/TLS:
--ciphers = <site> Establecer la lista de cifrado permitido. El formato de la
La cadena se describe en los cifrados OpenSSL (1).
Si se usa esta opción,-Honor-Cipher-Order
está implícitamente habilitado.
-Orden de honor-cifre
Honor Servidor CiPher Order, dando el
Capacidad para mitigar los ataques de bestias.
-k, -secure cuando se usa con -p o -client, no verifique
Certificado del servidor de backend.
--cacert = <path> cuando se usa con -p o --client, configure la ruta a
Archivo de certificado de CA de confianza.
El archivo debe estar en formato PEM. Puede
contener múltiples certificados. Si el
OpenSSL vinculado está configurado para cargar el sistema
Certificados anchos, están cargados
al inicio independientemente de esta opción.
--Private-Key-Passwd-File = <FilePath>
Ruta al archivo que contiene contraseña para el
Clave privada del servidor. Si no se da ninguno y
la clave privada está protegida con contraseña
ser solicitado interactivamente.
--subcert = <keypath>: <certpath>
Especificar certificado adicional y privado
archivo clave. Shrpx elegirá certificados
Basado en el nombre de host indicado por el cliente
Usando la extensión TLS SNI. Esta opción puede ser
usado varias veces.
--Backend-TLS-SNI-Field = <gest>
Establezca explícitamente el contenido del TLS SNI
extensión. Esto será por defecto al backend
Nombre de anfitrión.
--dh-param-file = <rath>
Ruta al archivo que contiene parámetros DH en
Formato PEM. Sin esta opción, cifra
Las suites no están disponibles.
--verify-client requerir y verificar el certificado del cliente.
--verify-client-cacert = <rath>
Ruta al archivo que contiene certificados CA
Para verificar el certificado del cliente.
El archivo debe estar en formato PEM. Puede
contener múltiples certificados.
--Client-Private-Key-File = <Phath>
Ruta al archivo que contiene cliente privado
Clave utilizada en la autenticación del cliente de backend.
--Client-Cert-File = <Path>
Ruta al archivo que contiene cliente
Certificado utilizado en el cliente de backend
autenticación.
-tls-propo-list = <Indist>
Lista delimitada de comas de protocolo SSL/TLS para
estar habilitado.
Los siguientes protocolos están disponibles:
TLSV1.2, TLSV1.1, TLSV1.0, SSLV3
La coincidencia del nombre se realiza en caso de insensible
manera.
El parámetro debe ser delimitado por un solo
Coma solamente y se tratan cualquier espacio blanco
Como parte de la cadena de protocolo.
Valor predeterminado: TLSV1.2, TLSV1.1, TLSV1.0
SPDY:
-c,--spdy-max-concurrent-streams = <um>
Establezca el número máximo de la concurrente
transmite en una sesión de SPDY.
Valor predeterminado: 100
-frontend-spdy-window-bits = <n>
Establece el tamaño de ventana inicial por transmisión de
SPDY Frontend Connection a 2 ** <n>.
Valor predeterminado: 16
--frontend-spdy-condnection-window-bits = <n>
Establece el tamaño de la ventana por conexión de SPDY
Conexión frontend a 2 ** <n>.
Valor predeterminado: 16
--frontend-spdy-no-tls
Deshabilitar SSL/TLS en frontend spdy
conexiones. Se debe especificar el protocolo SPDY
Usando-frontend-spdy-propo. Esta opción
También deshabilita frontend http/1.1.
--frontend-spdy-propo
Especificar el protocolo SPDY utilizado en frontend
conexión si--frontend-spdy-no-tls es
usado. Valor predeterminado: SPDY/3.1
--backend-spdy-window-bits = <n>
Establece el tamaño de ventana inicial por transmisión de
SPDY Backend Connection a 2 ** <n>.
Valor predeterminado: 16
--Bits-SPDY-Connection-Window-bits = <n>
Establece el tamaño de la ventana por conexión de SPDY
Conexión de back -end a 2 ** <n>.
Valor predeterminado: 16
--backend-spdy-no-tls
Desactive SSL/TLS en las conexiones SPDY de backend.
El protocolo SPDY debe especificarse utilizando
--backend-spdy-propo
--backend-spdy-propo
Especificar el protocolo SPDY utilizado en backend
Conexión si se usa--backend-spdy-no-TLS.
Valor predeterminado: SPDY/3.1
Modo:
-S,--SPDY-Proxy Enable Modo de proxy SPDY seguro.
--Bridge-Bridge se comunica con el backend en SPDY. De este modo
Las conexiones SPDY/HTTPS entrantes son
convertido en conexión SPDY y transmitida a
el backend. Ver--Backend-Http-Proxy-uri
Opción Si está detrás del proxy y desea
para conectarse al proxy SPDY exterior.
--Client en lugar de aceptar la conexión SPDY/HTTPS,
aceptar la conexión HTTP y comunicarse con
servidor de back -end en SPDY. Para usar shrpx como
Un proxy de reenvío, use la opción -p en su lugar.
-p,-client-proxy como-client
La ruta de solicitud desde frontend debe ser
un URI absoluto, adecuado para su uso como
Proxy delantero.
Explotación florestal:
-L, --log-nivel = <livel>
Establezca el nivel de gravedad de la salida de registro.
Información, advertencia, error y fatal.
Valor predeterminado: Advertencia
--CcessLog Imprima AccessLog simple a Stderr.
--syslog Enviar mensajes de registro a syslog.
--syslog-facility = <Anstaity>
Establezca la instalación de Syslog.
Valor predeterminado: Daemon
Misc:
-Add-x-forward-for
Agregar X-Forwarded para el campo de encabezado al
Solicitud aguas abajo.
--No-VIA no agregue a través del campo de encabezado. Si a través de
Se recibe el campo de encabezado, se queda
inalterado.
-D, --Daemon se ejecuta en un fondo. Si se usa -d, el
El directorio de trabajo actual se cambia a '/'.
--Pid-File = <Path> Establezca ruta para guardar el PID de este programa.
--User = <ser User> Ejecute este programa como usuario. Esta opción es
destinado a ser utilizado para soltar privilegios de raíz.
--conf = <PATH> COMPUTACIÓN DE COMPUTA desde la ruta.
Predeterminado: /etc/shrpx/shrpx.conf
-v, -Versión Versión de impresión y salida.
-h, --help imprime esta ayuda y salida.
Para aquellos de ustedes que tienen curiosidad, shrpx es una abreviatura de "SPDY/HTTPS a HTTP Reverse Proxy".
Sin -s de las opciones de --spdy-bridge , -p y --client , shrpx funciona como proxy inversa al servidor de backend:
Cliente <-(SPDY, HTTPS)-> SHRPX <-(http)-> servidor web
[proxy inverso]
Con -s opción, funciona como proxy SPDY seguro:
Cliente <-(SPDY, HTTPS)-> SHRPX <-(http)-> proxy
[SPDY Proxy] (por ejemplo, calamar)
El Client de arriba debe configurarse para usar shrpx como proxy SPDY seguro.
En el momento de este escrito, Chrome es el único navegador que admite el proxy SPDY seguro. La única forma de configurar Chrome para usar SPDY Proxy seguro es crear script proxy.pac como este:
función findproxyforurl (url, host) {
return "https serverAddr: puerto";
}
SERVERADDR y PORT es el nombre de host/dirección y el puerto de la máquina que SHRPX se está ejecutando. Tenga en cuenta que Chrome requiere un certificado válido para el proxy SPDY seguro.
Luego ejecute Chrome con los siguientes argumentos:
$ google-chrome --proxy-pac-url = file: ///path/to/proxy.pac --use-npn
Nota
En el momento de este escrito, Chrome 24 limita las conexiones concurrentes máximas con el poder a 32. Y debido a la limitación del manejo de la piscina de socket en Chrome, se llena rápidamente si se usa el proxy SPDY y se establecen muchas sesiones SPDY. Si alcanza el límite, las nuevas conexiones simplemente se bloquean hasta que las conexiones existentes se agoten. (Ver Número de Chrome 92244). La solución es que el número de conexiones máximas es alta, por ejemplo, 99, que es la más alta. Para hacer esto, debe cambiar la llamada configuración de política. Consulte las plantillas de políticas para obtener más detalles sobre cómo cambiar la configuración de la política en la plataforma que utiliza. El nombre de la política que estamos buscando es maxconnectionsperproxy, por ejemplo, si está utilizando Linux, siga las instrucciones descritas en Linux Quick Start and Create /etc/opt/chrome/policies/managed/test_policy.json Archivo con el siguiente contenido y reiniciar Chrome:
{
"MaxConnectionsperProxy": 99
}
Con --spdy-bridge , acepta conexiones SPDY/HTTPS y se comunica con Backend en SPDY:
Cliente <-(spdy, https)-> shrpx <-(spdy)-> web o proxy spdy, etc.
[Puente Spdy] (por ejemplo, shrpx -s)
Con la opción -p , funciona como proxy delantero y espera que el backend sea un proxy SPDY seguro:
Cliente <-(http)-> shrpx <-(spdy)-> proxy SPDY seguro
[Proxy delantero] (por ejemplo, shrpx -s o nodo -spdyproxy)
El Client debe configurarse para usar shrpx como proxy delantero.
En esta configuración, los clientes que no admiten SPDY proxy seguro pueden usar SPDY proxy seguro a través de shrpx . Poniendo shrpx en la misma caja o la misma red con los clientes, esta configuración puede traer los beneficios del proxy SPDY seguro a esos clientes. Dado que el número máximo de conexiones por servidor todavía se aplica en la conexión proxy, la ganancia de rendimiento no es obvia. Por ejemplo, si el número máximo de conexiones por servidor es 6, después de enviar 6 solicitudes al proxy, el cliente bloquea más solicitudes, lo que mata el rendimiento que podría obtener en la conexión SPDY. Para los clientes que pueden ajustar estos valores (p. Ej., network.http.max-connections-per-server en Firefox), aumentarlos puede mejorar el rendimiento.
Con la opción --client , funciona como proxy inverso y espera que el backend sea un servidor web habilitado para SPDY:
Cliente <-(http)-> shrpx <-(spdy)-> servidor web
[proxy inverso]
Para los modos de operación que hablan con el backend en SPDY, las conexiones de backend se pueden túnel a través del proxy HTTP. El proxy se especifica utilizando la opción --backend-http-proxy-uri . La siguiente figura ilustra el ejemplo de la opción --spdy-bridge y --backend-http-proxy-uri para hablar con el proxy SPDY externo a través de HTTP proxy:
Cliente <-(spdy, https)-> shrpx <-(spdy)--
[Puente Spdy]
-=================== ---> Proxy SPDY
(Túnel proxy http) (por ejemplo, shrpx -s)
El directorio de ejemplos contiene una simple implementación del cliente SPDY en C.
La biblioteca viene con Python Wrapper python-spdylay . Ver directorio python .