Il s'agit d'une implémentation expérimentale du protocole SPDY de Google dans C.
Cette bibliothèque fournit une implémentation SPDY version 2, 3 et 3.1 de la couche de cadrage. Il n'effectue aucune opération d'E / S. Lorsque la bibliothèque en a besoin, il appelle les fonctions de rappel fournies par l'application. Il n'inclut pas non plus de mécanisme de sondage d'événements, de sorte que l'application peut choisir librement la façon de gérer les événements. Ce code de bibliothèque ne dépend d'une bibliothèque SSL particulière (sauf par exemple des programmes qui dépendent d'OpenSSL 1.0.1 ou ultérieure).
Ce projet développe également le client, le serveur et le proxy SPDY en plus de la bibliothèque SPDYLAY. Voir SPDY Client and Server Programs Section.
La plupart des fonctionnalités SPDY / 2, SPDY / 3 et SPDY / 3.1 ont été implémentées. Dans les deux versions, la prise en charge directe du serveur-push n'a pas encore été disponible. L'application peut cependant réaliser un serveur-push à l'aide d'API primitives.
Comme décrit ci-dessous, nous pouvons créer un client et un serveur SPDY avec l'API SPDYLAY actuelle.
Les packages suivants sont nécessaires pour construire la bibliothèque:
Pour construire et exécuter les programmes de test unitaire, les packages suivants sont nécessaires:
Pour construire et exécuter les exemples de programmes, les packages suivants sont nécessaires:
Pour activer -a l'option (obtenir des actifs liés à partir de la ressource téléchargée) dans spdycat (l'un des exemples de programmes), les packages suivants sont nécessaires:
Pour construire SPDY / HTTPS vers HTTP Reverse Proxy shrpx (l'un des exemples de programmes), les packages suivants sont nécessaires:
Si vous utilisez Ubuntu 12.04, vous avez besoin des packages suivants installés:
$ apt-get install AutoConf Automake Autotools-dev libtool pkg-config zlib1g-dev libcunit1-dev libssl-dev libxml2-dev libevent-dev
La construction de Git est facile, mais assurez-vous qu'au moins AutoConf 2.68 est utilisé:
$ AutoreConf -I $ automake $ AutoConf $ ./configure $ faire
Pour construire la documentation, exécutez:
$ faire html
Les documents seront générés sous doc/manual/html/ .
Les documents générés ne seront pas installés avec make install .
Dans cette section, nous décrivons brièvement comment construire Android Binary en utilisant Android NDK Cross-Compiler sur Debian Linux.
Nous proposons des scripts android-config et android-make pour faciliter la construction. Pour faire fonctionner ces scripts, NDK Toolchain doit être installé de la manière suivante. Tout d'abord, introduire la variable environnement ANDROID_HOME . Nous devons installer une chaîne d'outils sous $ANDROID_HOME/toolchain . Un utilisateur peut librement choisir le chemin pour ANDROID_HOME . Par exemple, pour installer une chaîne d'outils sous $ANDROID_HOME/toolchain , faites-le dans le répertoire où NDK est déballé:
$ build / outils / make-standone-toolchain.sh --platform = Android-9 --install-dir = $ Android_Home / Toolchain
Le niveau de plate-forme n'est pas important ici car nous n'utilisons pas une API C / C ++ spécifique d'Android.
Les bibliothèques dépendantes, telles que OpenSSL et LiBevent doivent être construites avec la chaîne d'outils et installées sous $ANDROID_HOME/usr/local . Nous vous recommandons de créer ces bibliothèques en tant que bibliothèque statique pour faciliter le déploiement. La prise en charge LIBXML2 est actuellement désactivée.
Nous utilisons ZLIB qui est livré avec Android NDK, nous n'avons donc pas à le construire par nous-mêmes.
Avant d'exécuter android-config et android-make , la variable d'environnement ANDOIRD_HOME doit être définie pour pointer le chemin correct.
Après android-config , exécutez android-make pour compiler des sources. android-make est simplement d'inclure le compilateur Path to Cross dans PATH et la marque Run. Donc, si vous incluez le compilateur Path to CORSS par vous-même, vous pouvez simplement exécuter la marque pour construire SPDYLAY et les outils comme d'habitude.
La référence publique de l'API est disponible en ligne. Visitez http://tatsuhiro-t.github.io/spdylay/. Toutes les API publiques sont dans SpdyLay / SpdyLay.h . Toutes les fonctions API publiques ainsi que la fonction de rappel des types de typeS sont documentées.
Le répertoire SRC contient des implémentations Client et Server SPDY à l'aide de la bibliothèque SPDYLAY. Ces programmes sont destinés à s'assurer que l'API SPDYLAY est de manière insupportable pour une implémentation réelle et également à des fins de débogage. Veuillez noter qu'OpenSSL avec le support NPN est requis pour construire et exécuter ces programmes. Au moment d'écrire ces lignes, l'OpenSSL 1.0.1 prend en charge NPN.
Le client SPDY est appelé spdycat . C'est un téléchargeur simple comme WGET / CURL. Il se connecte au serveur SPDY et obtient des ressources données dans la ligne de commande:
$ src / spdycat -h
Utilisation: spdycat [-oansv23] [-t <seconds>] [-W <Window_Bits>] [--Cert = <conte>]
[--key = <yey>] [--no-tls] [-d <Fichier>] [-m <n>] [-p <pratxy_host>]
[-P <proxy_port>] <Uri> ...
Options:
-v, - Verbose Imprimer des informations de débogage telles que la réception /
Transmission des cadres et paires de noms / valeur.
-N, - Null-Out Discard téléchargé les données.
-O, --Remote-Name Enregistrer les données de téléchargement dans le répertoire actuel.
Le nom de fichier est dégénéré de URI. Si uri
se termine par '/', 'index.html' est utilisé comme un
nom de fichier. Non encore implémenté.
-2, --SPDY2 Utilisez uniquement SPDY / 2.
-3, --spdy3 Utilisez uniquement SPDY / 3.
--PDY3-1 Utilisez uniquement SPDY / 3.1.
-t, - timeout = <n> Timeout chaque demande après <n> secondes.
-W, --Window-bits = <n>
Définit la taille initiale de la fenêtre sur 2 ** <n>.
-a, --get-assets télécharger des actifs tels que les feuilles de styles, les images
et fichiers de script liés à partir du téléchargement
ressource. Seuls les liens dont les origines sont les
Idem avec la ressource de liaison sera
téléchargé.
-s, - statistiques d'impression.
-H, --Header Ajoutez un en-tête aux demandes.
--Cert = <nit> Utilisez le fichier de certificat client spécifié.
Le fichier doit être au format PEM.
--key = <yey> Utilisez le fichier de clé privée client. Le fichier
Doit être au format PEM.
--No-TLS Désactiver SSL / TLS. Utilisez -2, -3 ou --spdy3-1
Spécifiez la version du protocole SPDY à utiliser.
-d, --data = <file> Publier un fichier sur serveur. Si - est donné, des données
sera lu de Stdin.
-M, --multiply = <n> Demandez chaque URI <n> fois. Par défaut, même
URI n'est pas demandé deux fois. Cette option
le désactive aussi.
-p, --proxy = <host> Utilisez cet hôte comme proxy SPDY
-P, --proxy-port = <port>
Utilisez-le comme port du proxy SPDY si
L'un est défini
- Color Force Colored Log Sortie.
$ src / spdycat -nv https://www.google.com/
[0.021] NPN SELECT Protocole Next: le serveur distant propose:
* SPDY / 4A4
* SPDY / 3.1
* SPDY / 3
* http / 1.1
NPN a sélectionné le protocole: SPDY / 3.1
[0,029] Préparette complète
[0,029] Crame de paramètres Recv <version = 3, Flags = 0, longueur = 20>
(niv = 2)
[4 (1): 100]
[7 (0): 1048576]
[0.029] Recv Window_update Frame <version = 3, Flags = 0, longueur = 8>
(stream_id = 0, delta_window_size = 983040)
[0.029] Envoyer un cadre syn_stream <version = 3, drapeaux = 1, longueur = 221>
(stream_id = 1, association associée = 0, pri = 3)
: Hôte: www.google.com
: Méthode: obtenir
:chemin: /
: Schéma: HTTPS
: Version: HTTP / 1.1
accepter: */*
codage d'acceptation: gzip, dégonfler
User-Agent: SpdyLay / 1.2.0-DEV
[0.080] Recv syn_reply frame <version = 3, drapeaux = 0, longueur = 619>
(stream_id = 1)
: Statut: 302 Trouvé
: Version: HTTP / 1.1
Alternate-Protocol: 443: Quic
contrôle du cache: privé
Longueur du contenu: 262
Type de contenu: texte / html; Charset = UTF-8
Date: mar, 19 novembre 2013 13:47:18 GMT
Emplacement: https://www.google.co.jp/
Serveur: GWS
X-Frame-Options: Sameorigin
X-XSS-Protection: 1; mode = bloc
[0,080] Crame de données RECV (Stream_ID = 1, Flags = 1, longueur = 262)
[0,080] Envoyez le cadre de goaway <version = 3, drapeaux = 0, longueur = 8>
(last_good_stream_id = 0)
SPDY Server est appelé spdyd et sert des fichiers statiques. Il est en file d'attente unique et multiplexes des connexions à l'aide de socket non bloquant. Les fichiers statiques sont lus en utilisant l'appel du système d'E / S de blocage, read(2) . Il parle SPDY / 2 et SPDY / 3:
$ src / spdyd --htdocs = / your / htdocs / -v 3000 server.key server.crt
IPv4: Écoutez sur le port 3000
IPv6: Écoutez sur le port 3000
Le prochain protocole négocié: SPDY / 3.1
[id = 1] [1.296] Envoyer le cadre des paramètres <version = 3, Flags = 0, longueur = 12>
(niv = 1)
[4 (0): 100]
[id = 1] [1.297] Recv syn_stream frame <version = 3, drapeaux = 1, longueur = 228>
(stream_id = 1, association associée = 0, pri = 3)
: Hôte: localhost: 3000
: Méthode: obtenir
: chemin: / readme
: Schéma: HTTPS
: Version: HTTP / 1.1
accepter: */*
codage d'acceptation: gzip, dégonfler
User-Agent: SpdyLay / 1.2.0-DEV
[id = 1] [1.297] Envoyer Syn_Reply Frame <version = 3, Flags = 0, longueur = 116>
(stream_id = 1)
: Statut: 200 OK
: Version: HTTP / 1.1
Cache-Control: Max-Age = 3600
Longueur du contenu: 66
Date: mar, 19 novembre 2013 14:35:24 GMT
Dernier mode: mar, 17 janvier 2012 15:39:01 GMT
Serveur: SPDYD SPDYLAY / 1.2.0-DEV
[id = 1] [1.297] Envoyer un cadre de données (Stream_id = 1, Flags = 0, longueur = 66)
[id = 1] [1.297] Envoyer un cadre de données (stream_id = 1, drapeaux = 1, longueur = 0)
[id = 1] [1.297] stream_id = 1 fermé
[id = 1] [1.297] Recv Goaway Frame <version = 3, drapeaux = 0, longueur = 8>
(last_good_stream_id = 0)
[id = 1] [1.297] fermé
Actuellement, spdyd a besoin epoll ou kqueue .
Pour les utilisateurs de Shrpx qui utilise Shrpx comme proxy SPDY: veuillez envisager de migrer vers NHTTPX développé au projet NHTTP2. NGHTTPX prend également en charge le proxy SPDY.
Le shrpx est un proxy inversé multithread pour SPDY / HTTPS. Il convertit le trafic SPDY / HTTPS vers HTTP ordinaire. Il est initialement développé en tant que proxy inverse, mais il a maintenant d'autres modes de fonctionnement tels qu'un proxy avant frontal. Par exemple, avec l'option --spdy-proxy ( -s en raccourci), il peut être utilisé comme proxy SPDY sécurisé avec un proxy (par exemple, calmar) dans le backend. Avec l'option --cliet-proxy ( -p ), il agit comme un proxy avant ordinaire mais attend un proxy SPDY sécurisé dans le backend. Ainsi, il devient un adaptateur pour sécuriser le proxy SPDY pour les clients qui ne prend pas en charge le proxy SPDY sécurisé. L'un autre mode de fonctionnement notable est --spdy-relay , qui relaie simplement le trafic SPDY / HTTPS vers le backend dans SPDY. Le tableau suivant résume les modes de fonctionnement.
| Option de mode | L'extrémité avant | Backend | Note |
|---|---|---|---|
| défaut | SPDY / HTTPS | Http | Proxy inversé |
--spdy | SPDY / HTTPS | Http | Proxy spdy |
--spdy-relay | SPDY / HTTPS | Spdy | |
--client | Http | Spdy | |
--client-proxy | Http | Spdy | Proxy avant |
Le shrpx prend en charge le fichier de configuration. Voir --conf Option et exemples de fichiers de configuration shrpx.conf.sample .
Nous décrivons brièvement l'architecture de shrpx ici. Il dispose d'un thread dédié qui écoute les sockets de serveur. Lorsqu'il a accepté la connexion entrante, il passe le descripteur de fichier de la connexion entrante à l'un des threads de travailleur. Chaque fil de travailleur a sa propre boucle d'événement et peut gérer de nombreuses connexions en utilisant des E / S non bloquantes. Le nombre de threads de travail peut être spécifié à l'aide de l'option de ligne de commande. Le libevent est utilisé pour gérer les E / S de réseau de bas niveau.
Voici les options de ligne de commande:
$ src / shrpx -h
Utilisation: shrpx [-dh] [-S | --Client | -p] [-b <host, port>]
[-f <host, port>] [-n <ores>] [-c <num>] [-l <veld>]
[Options ...] [<private_key> <nit>]
Un proxy inversé pour SPDY / HTTPS.
Arguments de position:
<Vride_key> Définissez le chemin d'accès à la clé privée du serveur. Requis
Sauf si -p ou - Client est spécifié.
<strut> Définissez le chemin d'accès au certificat du serveur. Requis
Sauf si -p ou - Client est spécifié.
Options:
Relations:
-b, --backend = <host, port>
Définir l'hôte et le port backend.
Par défaut: '127.0.0.1,80'
-f, --fontend = <host, port>
Définissez l'hôte Frontend et le port.
Par défaut: '0.0.0.0,3000'
- Backlog = <um> Set Écouter Taille du backlog.
Par défaut: 256
- Backend-ipv4 Resolve Backend Name à l'adresse IPv4
seulement.
- Backend-ipv6 Resolve Backend Name à l'adresse IPv6
seulement.
Performance:
-n, --workers = <ores>
Définissez le nombre de threads de travail.
Par défaut: 1
- read-rate = <stead> définir le taux de lecture moyen maximum sur le frontend
connexion. Réglage 0 sur cette option signifie
Le taux de lecture est illimité.
Par défaut: 1048576
- read-burst = <Size>
Définir la taille maximale de l'éclatement de lecture sur Frontend
connexion. Réglage 0 sur cette option signifie
Lire la taille de l'éclatement est illimité.
Par défaut: 4194304
--WRITE-RATE = <RAX>
Définir le taux d'écriture moyen maximum sur Frontend
connexion. Réglage 0 sur cette option signifie
Le taux d'écriture est illimité.
Par défaut: 0
--WRITE-BURST = <Size>
Définir la taille maximale de l'écriture d'écriture sur Frontend
connexion. Réglage 0 sur cette option signifie
Écrire la taille de l'éclatement est illimité.
Par défaut: 0
Temps mort:
--Fontend-spdy read-timeout = <sec>
Spécifiez le délai d'expiration de lecture pour SPDY FRONTEND
connexion. Par défaut: 180
--frontend-read-timeout = <sec>
Spécifiez le délai d'expiration de lecture pour le frontage non-SPDY
connexion. Par défaut: 180
--frontend-write-tempsout = <sec>
Spécifiez le délai d'expiration pour SPDY et
Frontend non spdy.
connexion. Par défaut: 60
- Backend-read-timeout = <sec>
Spécifiez le délai d'expiration de lecture pour la connexion backend.
Par défaut: 900
- Backend-Write-Timeout = <Sec>
Spécifiez le délai d'expiration pour le backend
connexion. Par défaut: 60
- Backend-keep-rove-timeout = <sec>
Spécifiez le délai d'expiration de Keep-Alive pour le backend
connexion. Par défaut: 60
- Backend-http-proxy-uri = <Uri>
Spécifiez URI proxy sous la forme
http: // [<utilisateur>: <sss> @] <prand>: <port>. Si
Un proxy nécessite une authentification, spécifier
<utilisateur> et <pass>. Notez qu'ils doivent être
correctement en pourcentage. Ce proxy est utilisé
Lorsque la connexion backend est SPDY. D'abord,
faire une demande de connexion au proxy et
il se connecte au backend au nom de
shrpx. Cela forme un tunnel. Après cela, shrpx
Effectue une poignée de main SSL / TLS avec le
En aval à travers le tunnel. Les délais d'attente
Lors de la connexion et de la demande de connexion
peut être spécifié par --Backend-read-timeout
et - les options de temps-rédaction-rédaction.
SSL / TLS:
--ciphers = <suite> SET LISTE CIPHER ALLÉMÉE. Le format du
La chaîne est décrite dans les chiffres OpenSSL (1).
Si cette option est utilisée, --Honor-Cipher-Order
est implicitement activé.
- Honor-Cipher-Order
Ordre de chiffrement du serveur d'honneur, donnant le
capacité d'atténuer les attaques de bête.
-K, - INSECURE Lorsqu'il est utilisé avec -p ou --client, ne vérifiez pas
Certificat du serveur backend.
--cacert = <ath> lorsqu'il est utilisé avec -p ou --client, définissez le chemin sur
Fichier de certificat CA de confiance.
Le fichier doit être au format PEM. Ça peut
contiennent plusieurs certificats. Si le
OpenSSL lié est configuré pour charger le système
des certificats larges, ils sont chargés
Au démarrage, quelle que soit cette option.
--private-key-passwd-file = <filepath>
Chemin vers le fichier qui contient un mot de passe pour le
clé privée du serveur. Si aucun n'est donné et
La clé privée est protégée par mot de passe
être demandé de manière interactive.
--subcert = <keypath>: <Certpath>
Spécifiez un certificat et privé supplémentaires
fichier clé. Shrpx choisira des certificats
basé sur le nom d'hôte indiqué par le client
Utilisation de l'extension TLS SNI. Cette option peut être
utilisé plusieurs fois.
--Backend-Tls-Sni-Field = <host>
Définissez explicitement le contenu du TLS SNI
extension. Cela va par défaut le backend
Nom de l'hôte.
--DH-PARAM-FILE = <AtHAD>
Chemin vers le fichier qui contient des paramètres DH dans
Format pem. Sans cette option, Dhe Cipher
Les suites ne sont pas disponibles.
--Very-Client require et vérifiez le certificat client.
--Veefy-Client-Cacert = <AtHtD>
Chemin vers le fichier qui contient des certificats CA
pour vérifier le certificat client.
Le fichier doit être au format PEM. Ça peut
contiennent plusieurs certificats.
--Client-Private-Key-File = <Athath>
Chemin vers le fichier qui contient le client privé
clé utilisée dans l'authentification du client backend.
--Client-CERT-FILE = <AtHAT>
Chemin vers le fichier qui contient le client
certificat utilisé dans le client backend
authentification.
--TLS-Proto-list = <Sist>
Liste délimitée de virgule du protocole SSL / TLS
être activé.
Les protocoles suivants sont disponibles:
TLSV1.2, TLSV1.1, TLSV1.0, SSLV3
La correspondance du nom est effectuée dans le cas insensible
manière.
Le paramètre doit être délimité par un seul
Comma seulement et tous les espaces blancs sont traités
Dans le cadre de la chaîne de protocole.
Par défaut: tlsv1.2, tlsv1.1, tlsv1.0
SPDY:
-C, --Spdy-Max-Current-Streams = <NuM>
Définir le nombre maximum du simultanément
Streams en une seule session SPDY.
Par défaut: 100
--Fontend-spdy-window-bits = <n>
Définit la taille de fenêtre initiale par flux de
Connexion frontale SPDY à 2 ** <n>.
Par défaut: 16
--Fontend-spdy-connection-window-bits = <n>
Définit la taille de la fenêtre par connexion de SPDY
Connexion frontale à 2 ** <n>.
Par défaut: 16
--Fontend-SPDY-NO-TLS
Désactiver SSL / TLS sur Frontend SPDY
relations. Le protocole SPDY doit être spécifié
Utilisation de --FRONTEND-SPDY-PROTO. Cette option
Désactive également le frontend http / 1.1.
--froto-prdy-proto
Spécifiez le protocole SPDY utilisé dans Frontend
connexion si - fronden-spdy-no-tls est
utilisé. Par défaut: SPDY / 3.1
- Backend-spdy-window-bits = <n>
Définit la taille de fenêtre initiale par flux de
Connexion backend SPDY à 2 ** <n>.
Par défaut: 16
- Backend-Spdy-Connection-Window-Bits = <n>
Définit la taille de la fenêtre par connexion de SPDY
Connexion backend à 2 ** <n>.
Par défaut: 16
- Backend-SPDY-NO-TLS
Désactivez SSL / TLS sur les connexions Backend SPDY.
Le protocole SPDY doit être spécifié en utilisant
- Backend-spdy-proto
- Backend-spdy-proto
Spécifiez le protocole SPDY utilisé dans le backend
Connexion Si - Backend-Spdy-No-TLS est utilisée.
Par défaut: SPDY / 3.1
Mode:
-S, --Spdy-Proxy Activer le mode proxy SPDY sécurisé.
- Spdy-Bridge Communiquez avec le backend dans SPDY. Ainsi
Les connexions SPDY / HTTPS entrantes sont
converti en connexion SPDY et relayé en
le backend. Voir - Backend-http-proxy-uri
Option si vous êtes derrière le proxy et que vous voulez
pour se connecter au proxy SPDY extérieur.
--Client au lieu d'accepter la connexion SPDY / HTTPS,
accepter la connexion HTTP et communiquer avec
serveur backend dans SPDY. Pour utiliser shrpx comme
Un proxy vers l'avant, utilisez à la place l'option -p.
-p, - Client-Proxy comme - Client Option, mais cela nécessite également
le chemin de demande de frontend doit être
un uri absolu, adapté à une utilisation comme un
proxy avant.
Enregistrement:
-L, --log-level = <Devel>
Définissez le niveau de gravité de la sortie du journal.
Informations, avertissement, erreur et mortel.
Par défaut: avertissement
- ACCESSLOG IMPRESSION SIMPLE ACCESSLOG à STDERR.
--Syslog Envoyer des messages de journal à syslog.
--Syslog-Facility = <Fondation>
Définissez l'installation Syslog.
Par défaut: démon
Misc:
- Add-x-Forwarded-For
Ajouter le champ d'en-tête à forwardé à la fois vers le
demande en aval.
--no-via n'ajoutez pas à via le champ d'en-tête. Si via
Le champ d'en-tête est reçu, il est laissé
inchangé.
-D, --Daemon Run en arrière-plan. Si -d est utilisé, le
Le répertoire de travail actuel est modifié en «/».
--PID-File = <AtHTAT> SET PATH pour enregistrer le PID de ce programme.
--User = <User> Exécutez ce programme en tant qu'utilisateur. Cette option est
destiné à être utilisé pour supprimer les privilèges racine.
--Conf = <AtHtD> Chargez la configuration à partir du chemin.
Par défaut: /etc/shrpx/shrpx.conf
-v, - Version d'impression et sortie d'impression.
-H, --help Imprimez cette aide et cette sortie.
Pour ceux d'entre vous qui sont curieux, shrpx est une abréviation de "SPDY / HTTPS à HTTP Inverse proxy".
Sans aucune des options de -s , --spdy-bridge , -p et --client , shrpx fonctionne comme proxy inverse au serveur backend:
Client <- (SPDY, HTTPS) -> Shrpx <- (HTTP) -> Serveur Web
[Proxy inversé]
Avec l'option -s , il fonctionne comme un proxy SPDY sécurisé:
Client <- (SPDY, HTTPS) -> Shrpx <- (HTTP) -> Proxy
[Proxy SPDY] (par exemple, calmar)
Le Client ci-dessus doit être configuré pour utiliser ShRPX comme proxy SPDY sécurisé.
Au moment d'écrire ces lignes, Chrome est le seul navigateur qui prend en charge Secy SPDY proxy. La seule façon de configurer Chrome pour utiliser Secure SPDY proxy est Create Proxy.pac Script comme ceci:
fonction findProxyForUrl (url, hôte) {
return "https serverAddr: port";
}
SERVERADDR and PORT est le nom / l'adresse hôte et le port de la machine Shrpx est en cours d'exécution. Veuillez noter que Chrome nécessite un certificat valide pour le proxy SPDY sécurisé.
Ensuite, exécutez Chrome avec les arguments suivants:
$ google-chrome ---proxy-pac-url = fichier: ///path/to/proxy.pac --use-npn
Note
Au moment d'écrire ces lignes, Chrome 24 limite les connexions maximales simultanées avec le proxy à 32. Et en raison de la limitation de la manipulation du pool de douilles dans Chrome, il est rapidement rempli si le proxy SPDY est utilisé et de nombreuses sessions SPDY sont établies. S'il atteint la limite, les nouvelles connexions sont simplement bloquées jusqu'à ce que les connexions existantes soient expirées. (Voir Chrome Numéro 92244). La solution de contournement est de rendre le nombre de connexions maximales élevées, par exemple, 99, ce qui est le plus élevé. Pour ce faire, vous devez modifier la configuration de la politique. Voir les modèles de stratégie pour plus de détails comment modifier la configuration de la stratégie sur la plate-forme que vous utilisez. Le nom de la politique que nous recherchons est MaxConnectionSperProxy Par exemple, si vous utilisez Linux, suivez les instructions décrites dans Linux Quick Start et créez /etc/opt/chrome/policies/managed/test_policy.json avec le contenu suivant et redémarrez Chrome:
{
"MaxConnectionsPerproxy": 99
}
Avec --spdy-bridge , il accepte les connexions SPDY / HTTPS et communique avec Backend dans SPDY:
Client <- (SPDY, HTTPS) -> Shrpx <- (SPDY) -> Proxy Web ou SPDY, etc.
[Bridge SPDY] (par exemple, Shrpx -S)
Avec l'option -p , il fonctionne comme proxy vers l'avant et s'attend à ce que le backend soit sécurisé SPDY:
Client <- (http) -> shrpx <- (SPDY) -> Secy SPDY Proxy
[proxy avant] (par exemple, shrpx -s ou nœud-spdyproxy)
Le Client doit être configuré pour utiliser ShRPX comme proxy avant.
Dans cette configuration, les clients qui ne prennent pas en charge le proxy SPDY sécurisé peuvent utiliser un proxy SPDY sécurisé via shrpx . En mettant shrpx dans la même boîte ou le même réseau avec les clients, cette configuration peut apporter les avantages du proxy SPDY sécurisé à ces clients. Étant donné que le nombre maximum de connexions par serveur s'applique toujours dans la connexion proxy, le gain de performances n'est pas évident. Par exemple, si le nombre maximum de connexions par serveur est de 6, après avoir envoyé 6 demandes au proxy, le client bloque d'autres demandes, ce qui tue les performances qui pourraient être gagnées dans la connexion SPDY. Pour les clients qui peuvent modifier ces valeurs (par exemple, network.http.max-connections-per-server dans Firefox), leur augmentation peut améliorer les performances.
Avec l'option --client , il fonctionne comme proxy inverse et attend que le backend soit le serveur Web compatible SPDY:
Client <- (HTTP) -> Shrpx <- (SPDY) -> Serveur Web
[Proxy inversé]
Pour les modes d'opération qui parlent au backend dans SPDY, les connexions backend peuvent être tunnelles à travers le proxy HTTP. Le proxy est spécifié à l'aide --backend-http-proxy-uri . La figure suivante illustre l'exemple de --spdy-bridge et --backend-http-proxy-uri Option pour parler au proxy SPDY extérieur via le proxy HTTP:
Client <- (SPDY, HTTPS) -> Shrpx <- (SPDY) -
[Bridge SPDY]
- =================== ---> Proxy SPDY
(Tunnel proxy http) (par exemple, shrpx -s)
Le répertoire des exemples contient une simple implémentation du client SPDY dans C.
La bibliothèque est livrée avec Python Wrapper python-spdylay . Voir répertoire python .