Esta é uma implementação experimental do protocolo SPDY do Google em C.
Esta biblioteca fornece implementação da camada de enquadramento SPDY versão 2, 3 e 3.1. Ele não realiza nenhuma operação de E/S. Quando a biblioteca precisa deles, ele chama as funções de retorno de chamada fornecidas pelo aplicativo. Ele também não inclui nenhum mecanismo de pesquisa de eventos, portanto o aplicativo pode escolher livremente a maneira de lidar com eventos. Esse código da biblioteca não depende de nenhuma biblioteca SSL específica (exceto por exemplo, programas que dependem do OpenSSL 1.0.1 ou posterior).
Este projeto também desenvolve cliente, servidor e proxy SPDY no topo da biblioteca Spdylay. Consulte a seção SPDY Client e Server Programs.
A maior parte da funcionalidade SPDY/2, SPDY/3 e SPDY/3.1 foi implementada. Nas duas versões, o suporte direto do servidor-Push ainda não estava disponível. O aplicativo pode atingir o servidor-push usando APIs primitivas.
Conforme descrito abaixo, podemos criar cliente e servidor SPDY com a API Spdylay atual.
Os pacotes a seguir são necessários para construir a biblioteca:
Para construir e executar os programas de teste de unidade, são necessários os seguintes pacotes:
Para construir e executar os programas de exemplo, são necessários os seguintes pacotes:
Para ativar -a opção (obtendo ativos vinculados do recurso baixado) no spdycat (um dos programas de exemplo), os pacotes a seguir são necessários:
Para construir SPDY/HTTPS para http reverso proxy shrpx (um dos programas de exemplo), são necessários os seguintes pacotes:
Se você estiver usando o Ubuntu 12.04, precisará dos seguintes pacotes instalados:
$ apt-get install AutoConf Automake AutoTools-dev lbtool pkg-config zlib1g-dev libcunit1-dev libssl-dev libxml2-dev libevent-dev-dev
Construir do Git é fácil, mas certifique -se de que pelo menos o AutoConf 2.68 seja usado:
$ autoreConf -i $ Autorake $ autoconf $ ./configure $ make
Para criar documentação, execute:
$ Make Html
Os documentos serão gerados em doc/manual/html/ .
Os documentos gerados não serão instalados com make install .
Nesta seção, descrevemos brevemente como construir o Android Binary usando o Android NDK Cross-Compiler no Debian Linux.
Oferecemos scripts android-config e android-make para facilitar a construção. Para fazer com que esse script funcione, o NDK Toolchain deve ser instalado da seguinte maneira. Primeiro, vamos apresentar variável de ambiente ANDROID_HOME . Precisamos instalar o Toolchain sob $ANDROID_HOME/toolchain . Um usuário pode escolher livremente o caminho para ANDROID_HOME . Por exemplo, para instalar o Toolchain sob $ANDROID_HOME/toolchain , faça isso no diretório em que o NDK é descompactado:
$ build/tools/make-standalone-toolchain.sh --platform = Android-9 --install-dir = $ Android_home/Toolchain
O nível da plataforma não é importante aqui, porque não usamos API C/C ++ específica do Android.
As bibliotecas dependentes, como OpenSSL e Libevent, devem ser construídas com a cadeia de ferramentas e instaladas sob $ANDROID_HOME/usr/local . Recomendamos construir essas bibliotecas como biblioteca estática para facilitar a implantação. O suporte a libxml2 está atualmente desativado.
Usamos o Zlib, que vem com o Android NDK, para que não tenhamos que construí -lo sozinhos.
Antes de executar a variável android-config e android-make , ANDOIRD_HOME deve ser definido para apontar para o caminho correto.
Após android-config , execute android-make para compilar fontes. android-make é apenas o caminho para o Cruzer Compiler no PATH e na execução da marca. Portanto, se você incluir o Path to CORSS Compiler sozinho, você poderá apenas executar para criar o Spdylay e as ferramentas como de costume.
A referência pública da API está disponível online. Visite http://tatsuhiro-t.github.io/spdylay/. Todas as APIs públicas estão em spdylay/spdylay.h . Todas as funções públicas da API, bem como a função de retorno de chamada typedefs, estão documentadas.
O diretório SRC contém implementações de clientes e servidores SPDY usando a biblioteca SPDYLAY. Esses programas têm como objetivo garantir que a API da SPDYLAY seja utilizável acutalmente para implementação real e também para fins de depuração. Observe que o OpenSSL com suporte a NPN é necessário para construir e executar esses programas. No momento da redação deste artigo, o OpenSSL 1.0.1 suporta npn.
O cliente SPDY é chamado spdycat . É um downloader simples morto, como WGET/CURL. Ele se conecta ao SPDY Server e obtém recursos fornecidos na linha de comando:
$ src/spdycat -h
Uso: spdycat [-oansv23] [-t <conds>] [-w <window_bits>] [--cert = <fret>]
[--Key = <Key>] [--no-tls] [-d <File>] [-m <n>] [-p <stroxy_host>]
[-P <proxy_port>] <uri> ...
Opções:
-v, --verbose Imprimir informações de depuração, como recepção/
transmissão de quadros e pares de nome/valor.
-n,-NULL-Out descarte dados baixados.
-O,--Remote-name Salvar dados de download no diretório atual.
O nome do arquivo é desreivado de Uri. Se Uri
termina com '/', 'index.html' é usado como um
nome do arquivo. Ainda não implementado.
-2, - -spdy2 Use apenas SPDY/2.
-3, - -spdy3 Use apenas SPDY/3.
-Spdy3-1 Use apenas SPDY/3.1.
-t, - -timeout = <n> Tempo limite cada solicitação após <n> segundos.
-w,--window-bits = <n>
Define o tamanho da janela inicial para 2 ** <n>.
-a,--get-ativos download de ativos como folhas de estilo, imagens
e arquivos de script vinculados do download
recurso. Apenas links cujas origens são o
O mesmo com o recurso de vinculação será
baixado.
-s, -Estatísticas de impressão -stat.
-H, -Chefe adicionar um cabeçalho às solicitações.
--cert = <tert> Use o arquivo de certificado de cliente especificado.
O arquivo deve estar no formato PEM.
--Key = <Key> Use o arquivo de chave privada do cliente. O arquivo
Deve estar no formato PEM.
-Não-tls Desativar SSL/TLS. Use -2, -3 ou - -spdy3-1 para
Especifique a versão do protocolo SPDY para usar.
-d, ---data = <File> Publique o arquivo no servidor. Se - é fornecido, dados
será lido de Stdin.
-m, - -multiply = <n> Solicite cada URI <n> tempos. Por padrão, o mesmo
O URI não é solicitado duas vezes. Esta opção
Desative isso também.
-p, --proxy = <dost> Use este host como um proxy SPDY
-P, --proxy-port = <tem>
Use isso como o porto do proxy spdy se
um está definido
-Emolor Force Colored Log Output.
$ src/spdycat -nv https://www.google.com/
[0,021] NPN Selecione o próximo protocolo: o servidor remoto oferece:
* SPDY/4A4
* SPDY/3.1
* SPDY/3
* http/1.1
NPN selecionou o protocolo: SPDY/3.1
[0,029] Handshake completo
[0,029] Recv Setting Frame <versão = 3, sinalizadores = 0, comprimento = 20>
(NIV = 2)
[4 (1): 100]
[7 (0): 1048576]
[0.029] RECV WANDA_UPDATE FRAME <versão = 3, sinalizadores = 0, comprimento = 8>
(stream_id = 0, delta_window_size = 983040)
[0,029] Envie syn_stream quadro <versão = 3, sinalizadores = 1, comprimento = 221>
(stream_id = 1, assoc_stream_id = 0, PRI = 3)
: Host: www.google.com
: Método: Get
:caminho: /
: Esquema: https
: versão: http/1.1
aceitar: */*
Aceitar-se-codificador: gzip, deflate
agente de usuário: spdylay/1.2.0-DEV
[0,080] RECV SYN_REPLICA Frame <versão = 3, sinalizadores = 0, comprimento = 619>
(stream_id = 1)
: Status: 302 Encontrado
: versão: http/1.1
Protocolo alternativo: 443: quic
Controle de cache: privado
comprimento de conteúdo: 262
Tipo de conteúdo: texto/html; charset = utf-8
Data: Ter, 19 de novembro de 2013 13:47:18 GMT
Localização: https://www.google.co.jp/
Servidor: GWS
Opções x-frame: Sameorigin
X-XSS-Proteção: 1; modo = bloco
[0,080] RECV Data Frame (stream_id = 1, sinalizadores = 1, comprimento = 262)
[0,080] Enviar quadro de interna
(last_good_stream_id = 0)
O servidor SPDY é chamado spdyd e serve arquivos estáticos. São conexões de rosca única e multiplexos usando soquete não bloqueador. Os arquivos estáticos são lidos usando a chamada de sistema de E/S de bloqueio, read(2) . Fala Spdy/2 e Spdy/3:
$ src/spdyd - -htdocs =/your/htdocs/-v 3000 server.key server.crt
IPv4: ouça na porta 3000
IPv6: ouça na porta 3000
O próximo protocolo negociado: SPDY/3.1
[ID = 1] [1.296] Enviar configurações quadro <versão = 3, sinalizadores = 0, comprimento = 12>
(NIV = 1)
[4 (0): 100]
[ID = 1] [1.297] RECV SYN_STREAM Frame <versão = 3, sinalizadores = 1, comprimento = 228>
(stream_id = 1, assoc_stream_id = 0, PRI = 3)
: Host: localhost: 3000
: Método: Get
: caminho: /readme
: Esquema: https
: versão: http/1.1
aceitar: */*
Aceitar-se-codificador: gzip, deflate
agente de usuário: spdylay/1.2.0-DEV
[id = 1] [1.297] Enviar syn_reply Frame <versão = 3, sinalizadores = 0, comprimento = 116>
(stream_id = 1)
: Status: 200 ok
: versão: http/1.1
Controle de cache: máximo = 3600
comprimento de conteúdo: 66
Data: Ter, 19 de novembro de 2013 14:35:24 GMT
Último modificado: ter, 17 de janeiro de 2012 15:39:01 GMT
Servidor: SPDYD SPDYLAY/1.2.0-DEV
[id = 1] [1.297] Enviar quadro de dados (stream_id = 1, sinalizadores = 0, comprimento = 66)
[id = 1] [1.297] Enviar quadro de dados (stream_id = 1, sinalizadores = 1, comprimento = 0)
[id = 1] [1.297] stream_id = 1 fechado
[ID = 1] [1.297] Recv Goaway Frame <versão = 3, sinalizadores = 0, comprimento = 8>
(last_good_stream_id = 0)
[id = 1] [1.297] fechado
Atualmente, spdyd precisa epoll ou kqueue .
Para usuários SHRPX que usam o SHRPX como proxy SPDY: considere migrar para o NGHTTPX desenvolvido no projeto NGHTTP2. O NGHTTPX também suporta proxy SPDY.
O shrpx é um proxy reverso multithread para SPDY/HTTPS. Ele converte o tráfego SPDY/HTTPS para HTTP simples. É inicialmente desenvolvido como proxy reverso, mas agora possui outros modos de operação, como um proxy de frente para frente. Por exemplo, com --spdy-proxy ( -s em abreviação), ele pode ser usado como proxy SPDY seguro com um proxy (por exemplo, lula) no back -end. Com a opção --cliet-proxy ( -p ), ele age como um proxy de encaminhamento ordinal, mas espera um proxy SPDY seguro no back -end. Assim, torna -se um adaptador proteger o proxy SPDY para clientes que não suportam proxy SPDY seguro. O outro modo de operação notável é --spdy-relay , que apenas retransmite o tráfego SPDY/HTTPS para o back-end em SPDY. A tabela a seguir resume os modos de operação.
| Opção de modo | Front-end | Back -end | Observação |
|---|---|---|---|
| padrão | Spdy/https | Http | Proxy reverso |
--spdy | Spdy/https | Http | Proxy SPDY |
--spdy-relay | Spdy/https | Spdy | |
--client | Http | Spdy | |
--client-proxy | Http | Spdy | Proxy para a frente |
O shrpx suporta o arquivo de configuração. Consulte --conf Opção e arquivo de configuração de amostra shrpx.conf.sample .
Descrevemos brevemente a arquitetura do shrpx aqui. Possui um tópico dedicado que ouve os soquetes do servidor. Quando aceitou a conexão recebida, passa o descritor de arquivo da conexão recebida a um dos threads do trabalhador. Cada encadeamento do trabalhador possui seu próprio loop de eventos e pode lidar com muitas conexões usando a E/S não bloqueadora. O número de encadeamento do trabalhador pode ser especificado usando a opção Linha de comando. O Libevent é usado para lidar com a E/S de rede de baixo nível.
Aqui estão as opções da linha de comando:
$ SRC/SHRPX -H
Uso: shrpx [-dh] [-s |-client | -p] [-b <host, port>]
]
[Opções ...] [<Derate_Key> <Pret>]
Um proxy reverso para SPDY/HTTPS.
Argumentos posicionais:
<Privado_key> Defina o caminho para a chave privada do servidor. Obrigatório
a menos que -p ou -client seja especificado.
<Cert> Defina caminho para o certificado do servidor. Obrigatório
a menos que -p ou -client seja especificado.
Opções:
Conexões:
-b, - -backend = <host, porta>
Defina o host de back -end e a porta.
Padrão: '127.0.0.1,80'
-f, - -Frontend = <host, porta>
Defina o host e a porta do front -end.
Padrão: '0.0.0.0.3000'
--backlog = <Mum> Defina o tamanho do backlog.
Padrão: 256
--BACKEND-IPV4 Resolva o nome do host de back-end para o endereço IPv4
apenas.
--BACKEND-IPV6 Resolva o nome do host de back-end para o endereço IPv6
apenas.
Desempenho:
-n, -workers = <Cores>
Defina o número de threads de trabalhadores.
Padrão: 1
--Read-Rate = <cate> Defina a taxa de leitura média máxima no front-end
conexão. Definir 0 para esta opção significa
A taxa de leitura é ilimitada.
Padrão: 1048576
--Read-Burst = <tamanho>
Defina o tamanho máximo de leitura no front -end
conexão. Definir 0 para esta opção significa
Leia o tamanho da explosão é ilimitado.
Padrão: 4194304
--write-rate = <cate>
Defina a taxa de gravação média máxima no front -end
conexão. Definir 0 para esta opção significa
A taxa de gravação é ilimitada.
Padrão: 0
--write-Burst = <Siz>
Defina o tamanho máximo de gravação no front -end
conexão. Definir 0 para esta opção significa
Escrever tamanho de burst é ilimitado.
Padrão: 0
Tempo esgotado:
--Frontend-spdy-let-timeout = <sec>
Especifique o tempo lim de leitura para o Frontend SPDY
conexão. Padrão: 180
--Frontend-Read-timeout = <C>
Especifique o tempo lim de leitura para o front-end não-escasso
conexão. Padrão: 180
--Frontend-write-timeout = <sec>
Especifique o tempo limite de gravação para SPDY e
Frontends não espalhados.
conexão. Padrão: 60
--backend-let-timeout = <C>
Especifique o tempo lim de leitura para conexão de back -end.
Padrão: 900
--backend-write-timeout = <sec>
Especifique o tempo limite de gravação para back -end
conexão. Padrão: 60
--Backend-Keep-Alive-timeout = <sC>
Especifique o tempo limite de manutenção para o back-end
conexão. Padrão: 60
--BACKEND-HTTP-PROXY-URI = <URI>
Especifique Uri proxy na forma
http: // [<suser>: <vent>@] <roxy>: <sot>. Se
Um proxy requer autenticação, especifique
<suários> e <vent>. Observe que eles devem ser
adequadamente codificado por codificação. Este proxy é usado
Quando a conexão de back -end é Spdy. Primeiro,
faça uma solicitação de conexão ao proxy e
Ele se conecta ao back -end em nome de
Shrpx. Isso forma o túnel. Depois disso, Shrpx
executa o aperto de mão SSL/TLS com o
a jusante através do túnel. Os tempos limite
Ao conectar e fazer a solicitação de conexão
pode ser especificado por--Backend-Read-timeout
e-opções de tempo de gravação de gravação.
SSL/TLS:
--ciphers = <freite> Conjunto Lista de cifra permitida. O formato do
A string é descrita em cifras OpenSSL (1).
Se esta opção for usada,--Honor-cifra-order
está implicitamente ativado.
-Honor-cifra-ordem
Honor Server Cipher Order, dando o
Capacidade de mitigar ataques de besta.
-k, -inseguro quando usado com -p ou -client, não verifique
Certificado do servidor de back -end.
- -cacert = <tath> quando usado com -p ou -client, defina um caminho para
arquivo de certificado CA confiável.
O arquivo deve estar no formato PEM. Pode
conter vários certificados. Se o
O Linked OpenSSL está configurado para o sistema de carregamento
Certificados amplos, eles são carregados
na startup, independentemente desta opção.
--private-key-passwd-file = <filepath>
Caminho para arquivo que contém senha para o
chave privada do servidor. Se nenhum é dado e
A chave privada é protegida por senha, ela vai
ser solicitado interativamente.
--Subcert = <Ceypath>: <CertPath>
Especifique certificado adicional e privado
Arquivo -chave. O SHRPX escolherá certificados
com base no nome do host indicado pelo cliente
usando a extensão SNI TLS. Esta opção pode ser
usado várias vezes.
--backend-tls-sni-field = <dost>
Defina explicitamente o conteúdo do TLS SNI
extensão. Isso vai padrão para o back -end
Nome do host.
--dh-param-fil-File = <tath>
Caminho para arquivo que contém parâmetros de DH em
Formato PEM. Sem esta opção, dhe cifra
As suítes não estão disponíveis.
--Verify-Client requer e verifique o certificado de cliente.
--Verify-client-cacert = <tath>
Caminho para arquivo que contém certificados de CA
Para verificar o certificado do cliente.
O arquivo deve estar no formato PEM. Pode
conter vários certificados.
--client-private-key-fil-File = <tath>
Caminho para arquivo que contém cliente privado
chave usada na autenticação do cliente de back -end.
-Client-CERT-FILE = <TACH>
Caminho para arquivo que contém cliente
Certificado usado no cliente de back -end
autenticação.
--tls-proto-list = <lista>
Lista delimitada de vírgula do protocolo SSL/TLS para
estar ativado.
Os seguintes protocolos estão disponíveis:
Tlsv1.2, tlsv1.1, tlsv1.0, sslv3
A correspondência de nome é feita em minúsculas
maneiras.
O parâmetro deve ser delimitado por um único
Somente vírgula e espaços brancos são tratados
Como parte da sequência de protocolo.
Padrão: tlsv1.2, tlsv1.1, tlsv1.0
Spdy:
-C,--Spdy-max-concorrente-streams = <Mum>
Defina o número máximo do concorrente
fluxos em uma sessão SPDY.
Padrão: 100
--Frontend-spdy-window-bits = <n>
Define o tamanho da janela inicial por fluxo de
Conexão do front -end SPDY com 2 ** <n>.
Padrão: 16
--Frogrend-Spdy-Connection-Window-bits = <n>
Define o tamanho da janela por conexão do SPDY
Conexão front -end com 2 ** <n>.
Padrão: 16
--Frogrend-spdy-não-tls
Desative SSL/TLS no Frontend Spdy
conexões. O protocolo SPDY deve ser especificado
Usando--Frontend-spdy-proto. Esta opção
Também desativa o Frontend HTTP/1.1.
--Frogrend-spdy-proto
Especifique o protocolo SPDY usado no front -end
conexão se--Frontend-spdy-não-tls é
usado. Padrão: SPDY/3.1
-Backend-spdy-window-bits = <n>
Define o tamanho da janela inicial por fluxo de
SPDY Backend Connection to 2 ** <n>.
Padrão: 16
--BACKEND-SPDY Connection-window-bits = <n>
Define o tamanho da janela por conexão do SPDY
Conexão de back -end com 2 ** <n>.
Padrão: 16
-Backend-spdy-não-tls
Desative o SSL/TLS nas conexões SPDY de back -end.
O protocolo SPDY deve ser especificado usando
-Backend-spdy-proto
-Backend-spdy-proto
Especifique o protocolo SPDY usado no back -end
A conexão se--backend-spdy-no-tls for usada.
Padrão: SPDY/3.1
Modo:
-s,--Spdy-proxy Ative o modo de proxy SPDY seguro.
-Spdy Bridge se comunica com o back-end em Spdy. Por isso
As conexões SPDY/HTTPS recebidas são
convertido em conexão spdy e transmitido para
o back -end. Veja-Backend-http-proxy-uri
opção se você estiver por trás do proxy e desejar
para conectar -se ao proxy SPDY externo.
-Cliente em vez de aceitar a conexão SPDY/HTTPS,
Aceite a conexão HTTP e comunique -se com
Servidor de back -end em SPDY. Para usar srpx como
uma opção de proxy a termo, use -p em vez disso.
-P,--opção como opção de client, mas também requer
O caminho de solicitação do front -end deve ser
um URI absoluto, adequado para uso como um
Proxy para a frente.
Registro:
-L,--Log-level = <nível>
Defina o nível de gravidade da saída de log.
Informações, aviso, erro e fatal.
Padrão: Aviso
--AccessLog Imprima o simples ACCESSLOG para Stderr.
-SysLog Envie mensagens de log para syslog.
--SysLog-Facility = <fastity>
Defina a instalação do syslog.
Padrão: Daemon
Misc:
--Add-x-forwarded for
Anexar o campo de cabeçalho X-forwarded para o
solicitação a jusante.
-Não-VIA não anexa via campo de cabeçalho. Se via
O campo de cabeçalho é recebido, deixa -se
inalterado.
-D, - -daemon Run em segundo plano. Se -d é usado, o
O diretório de trabalho atual é alterado para '/'.
-Pid-File = <ty Path> Defina o caminho para salvar o PID deste programa.
--User = <suário> Execute este programa como usuário. Esta opção é
destinado a ser usado para soltar privilégios de raiz.
--CONF = <PATH> Carregar configuração do caminho.
Padrão: /etc/shrpx/shrpx.conf
-v, -Versão de impressão e saída.
-H, -Help Imprima essa ajuda e saída.
Para aqueles que estão curiosos, shrpx é uma abreviação de "SPDY/HTTPS para http reverso proxy".
Sem nenhuma das opções -s , --spdy-bridge , -p e --client , shrpx funciona como proxy reverso para o servidor de back -end:
Cliente <-(spdy, https)-> shrpx <-(http)-> servidor da web
[proxy reverso]
Com a opção -s , ele funciona como proxy SPDY seguro:
Cliente <-(spdy, https)-> shrpx <-(http)-> proxy
[SPDY proxy] (por exemplo, lula)
O Client acima é necessário configurado para usar o SHRPX como proxy SPDY seguro.
No momento da redação deste artigo, o Chrome é o único navegador que suporta proxy SPDY seguro. A única maneira de configurar o Chrome para usar o Proxy SPDY seguro é criar script proxy.pac como este:
função findProxyforurl (url, host) {
retornar "HTTPS ServerAddr: Port";
}
SERVERADDR e PORT são o nome do host/endereço e a porta da máquina SHRPX está em execução. Observe que o Chrome requer certificado válido para proxy SPDY seguro.
Em seguida, execute o Chrome com os seguintes argumentos:
$ google-chrome --proxy-pac-url = arquivo: ///path/to/proxy.pac --use-npn
Observação
No momento da redação deste artigo, o Chrome 24 limita as conexões simultâneas máximas com o proxy a 32. E, devido à limitação do manuseio do pool de soquete no cromo, ele será rapidamente preenchido se o proxy spdy for usado e muitas sessões de SPDY forem estabelecidas. Se atingir o limite, as novas conexões serão simplesmente bloqueadas até que as conexões existentes sejam cronometradas. (Ver Chrome Edição 92244). A solução alternativa é o número de conexões máximas altas, digamos, 99, que é o mais alto. Para fazer isso, você precisa alterar a chamada configuração da política. Consulte Modelos de Política para obter detalhes Como alterar a configuração da política na plataforma que você usa. O nome da política que estamos procurando é o MaxConnectionSperProxy, por exemplo, se você estiver usando o Linux, siga a instrução descrita no Linux Quick Start e crie /etc/opt/chrome/policies/managed/test_policy.json com o seguinte conteúdo e reinicie o cromo:
{
"MaxConnectionSperProxy": 99
}
Com --spdy-bridge , ele aceita conexões SPDY/HTTPS e se comunica com o back-end em Spdy:
Cliente <-(spdy, https)-> shrpx <-(spdy)-> web ou spdy proxy etc
[Spdy Bridge] (por exemplo, shrpx -s)
Com a opção -p , ele funciona como proxy avançado e espera que o back -end seja um proxy SPDY seguro:
Cliente <-(http)-> shrpx <-(spdy)-> Proxy SPDY seguro
[Proxy Forward] (por exemplo, shrpx -s ou node -spdyproxy)
O Client precisa ser configurado para usar o SHRPX como proxy direto.
Nesta configuração, os clientes que não suportam o Proxy SPDY seguro podem usar o Proxy SPDY seguro através shrpx . Colocando shrpx na mesma caixa ou na mesma rede com os clientes, essa configuração pode trazer os benefícios do proxy SPDY seguro para esses clientes. Como o número máximo de conexões por servidor ainda se aplica na conexão proxy, o ganho de desempenho não é óbvio. Por exemplo, se o número máximo de conexões por servidor for 6, depois de enviar 6 solicitações para o proxy, o cliente bloqueia outras solicitações, que matam o desempenho que podem ser obtidas na conexão SPDY. Para clientes que podem ajustar esses valores (por exemplo, network.http.max-connections-per-server no Firefox), aumentando-os pode melhorar o desempenho.
Com a opção --client , ele funciona como proxy reverso e espera que o back-end seja o servidor da web com SPDY:
Cliente <-(http)-> shrpx <-(spdy)-> servidor da web
[proxy reverso]
Para os modos de operação que conversam com o back -end em SPDY, as conexões de back -end podem ser túneis por proxy HTTP. O proxy é especificado usando a opção --backend-http-proxy-uri . A figura a seguir ilustra o exemplo da opção --spdy-bridge e --backend-http-proxy-uri para conversar com o proxy SPDY externo através do http proxy:
Cliente <-(spdy, https)-> shrpx <-(spdy)-
[Spdy Bridge]
-=================== ---> Proxy SPDY
(HTTP Proxy Tunnel) (por exemplo, shrpx -s)
O diretório de exemplos contém uma implementação simples do cliente SPDY em C.
A biblioteca vem com Python Wrapper python-spdylay . Veja o diretório python .