これは、CでのGoogleのSPDYプロトコルの実験的な実装です。
このライブラリは、SPDYバージョン2、3、3.1フレーミング層の実装を提供します。 I/O操作は実行されません。ライブラリがそれらを必要とする場合、アプリケーションによって提供されるコールバック関数を呼び出します。また、イベントポーリングメカニズムも含まれていないため、アプリケーションはイベントの処理方法を自由に選択できます。このライブラリコードは、特定のSSLライブラリに依存しません(たとえば、OpenSSL 1.0.1以降に依存するプログラムを除く)。
このプロジェクトは、Spdylayライブラリの上にSPDYクライアント、サーバー、プロキシも開発します。 SPDYクライアントおよびサーバープログラムのセクションを参照してください。
SPDY/2、SPDY/3、およびSPDY/3.1機能のほとんどが実装されています。どちらのバージョンでも、サーバープッシュの直接サポートはまだ利用できていません。ただし、アプリケーションはプリミティブAPIを使用してサーバープッシュを実現できます。
以下で説明するように、現在のSPDylay APIを使用してSPDYクライアントとサーバーを作成できます。
ライブラリを構築するには、次のパッケージが必要です。
ユニットテストプログラムを構築および実行するには、次のパッケージが必要です。
プログラムのサンプルを構築して実行するには、次のパッケージが必要です。
spdycat (サンプルプログラムの1つ)の-a (ダウンロードされたリソースからリンクされた資産を取得)を有効にするには、次のパッケージが必要です。
spdy/httpsをHTTP逆プロキシshrpxに構築するには(プログラムの例の1つ)、次のパッケージが必要です。
Ubuntu 12.04を使用している場合は、次のパッケージをインストールする必要があります。
$ apt-get install autoconf autotools-dev libtool pkg-config zlib1g-dev libcunit1-dev libssl-dev libxml2-dev libevent-dev
Gitからの構築は簡単ですが、少なくともAutoconf 2.68が使用されていることを確認してください。
$ autoreconf -i $ automake $ autoconf $ ./CONFIGURE $ make
ドキュメントを作成するには、実行してください。
$ make html
ドキュメントはdoc/manual/html/で生成されます。
生成されたドキュメントはmake installとともにインストールされません。
このセクションでは、Debian LinuxでAndroid NDKクロスコンパイラを使用してAndroidバイナリを構築する方法について簡単に説明します。
android-configおよびandroid-makeスクリプトを提供して、ビルドを簡単にします。これらのスクリプトを機能させるには、NDKツールチェーンを次の方法でインストールする必要があります。まず、 ANDROID_HOME環境変数を紹介します。 $ANDROID_HOME/toolchainの下にツールチェーンをインストールする必要があります。ユーザーは、 ANDROID_HOMEのパスを自由に選択できます。たとえば、 $ANDROID_HOME/toolchainの下にツールチェーンをインストールするには、NDKが開梱されているディレクトリでこれを行います。
$ build/tools/make-standalone-toolchain.sh -platform = android-9 - install-dir = $ android_home/toolchain
Android固有のC/C ++ APIを使用しないため、ここではプラットフォームレベルは重要ではありません。
OpenSSLやLibeventなどの従属ライブラリは、ツールチェーンで構築し、 $ANDROID_HOME/usr/localの下にインストールする必要があります。展開を容易にするために、これらのライブラリを静的ライブラリとして構築することをお勧めします。 LIBXML2サポートは現在無効になっています。
Android NDKが付属しているZlibを使用しているため、自分で構築する必要はありません。
android-configとandroid-makeを実行する前に、 ANDOIRD_HOME環境変数を正しいパスを指すように設定する必要があります。
android-configの後、 android-makeを実行してソースをコンパイルします。 android-makeは、 PATHと実行されたクロスコンパイラへのパスを含めるだけです。したがって、Corss Compilerへのパスを自分で含める場合は、通常どおりSpdylayとツールを構築するために実行するだけです。
パブリックAPIリファレンスはオンラインで入手できます。 http://tatsuhiro-t.github.io/spdylay/にアクセスしてください。すべてのパブリックAPIはSpdylay/spdylay.hにあります。すべてのパブリックAPI関数とコールバック関数typedefsが文書化されています。
SRCディレクトリには、SPDylayライブラリを使用したSPDYクライアントとサーバーの実装が含まれています。これらのプログラムは、SPDylay APIが実際の実装およびデバッグの目的で活力に使用できることを確認することを目的としています。これらのプログラムを構築および実行するには、NPNサポートを備えたOpenSSLが必要であることに注意してください。この執筆時点で、OpenSSL 1.0.1はNPNをサポートしています。
SPDYクライアントはspdycatと呼ばれます。 Wget/Curlのような死んだシンプルなダウンローダーです。 SPDYサーバーに接続し、コマンドラインで与えられたリソースを取得します。
$ src/spdycat -h
使用法:spdycat [-oansv23] [-t <seconds>] [-w <window_bits>] [ - cert = <cert>]
[ - key = <key>] [-no-tls] [-d <file>] [-m <n>] [-p <proxy_host>]
[-P <Proxy_port>] <Uri> ...
オプション:
-v、-verboseの印刷デバッグレセプション/
フレームと名前/値のペアの送信。
-n、 - null-outダウンロードされたデータを破棄します。
-o、 - remote-name現在のディレクトリにデータをダウンロードします。
ファイル名はURIから解体されます。 uriの場合
「/」、 'index.html'で終了します
ファイル名。まだ実装されていません。
-2、-spdy2はSPDY/2のみを使用します。
-3、-spdy3はSPDY/3のみを使用します。
-SPDY3-1はSPDY/3.1のみを使用します。
-t、-timeout = <n>秒後に各リクエストをタイムアウトします。
-w、-window-bits = <n>
初期ウィンドウサイズを2 ** <n>に設定します。
-a、-get-assets styleSheets、imagesなどの資産をダウンロードします
ダウンロードされたファイルからリンクされたスクリプトファイル
リソース。起源がその起源であるリンクのみ
リンクリソースと同じです
ダウンロード。
-s、-statの印刷統計。
-h、 - ヘッダーはリクエストにヘッダーを追加します。
-CERT = <CERT>指定されたクライアント証明書ファイルを使用します。
ファイルはPEM形式でなければなりません。
-key = <key>クライアントの秘密鍵ファイルを使用します。ファイル
PEM形式でなければなりません。
-No-TLSはSSL/TLSを無効にします。 -2、-3、または - spdy3-1を使用します
使用するSPDYプロトコルバージョンを指定します。
-d、-data = <file>サーバーへの投稿ファイル。 -dateが与えられている場合、データが与えられています
Stdinから読まれます。
-m、 - multiply = <n>各uri <n>をリクエストします。デフォルトでは、同じ
URIは2回要求されません。このオプション
それも無効にします。
-p、--Proxy = <Host>このホストをSPDYプロキシとして使用します
-p、-proxy-port = <port>
これをspdyプロキシのポートとして使用する場合
1つはセットです
- 色力色のログ出力。
$ src/spdycat -nv https://www.google.com/
[0.021] NPN選択次のプロトコルを選択:リモートサーバーが提供します。
* SPDY/4A4
* Spdy/3.1
* Spdy/3
* HTTP/1.1
NPNはプロトコルを選択しました:SPDY/3.1
[0.029]握手が完了しました
[0.029] RECV設定フレーム<バージョン= 3、フラグ= 0、長さ= 20>
(NIV = 2)
[4(1):100]
[7(0):1048576]
[0.029] recv window_updateフレーム<バージョン= 3、flags = 0、length = 8>
(stream_id = 0、delta_window_size = 983040)
[0.029] Syn_Stream Frame <バージョン= 3、Flags = 1、Length = 221>を送信します
(stream_id = 1、assoc_stream_id = 0、pri = 3)
:ホスト:www.google.com
:方法:get
:パス: /
:スキーム:https
:バージョン:HTTP/1.1
受け入れる: */*
Accept-Encoding:gzip、deflate
ユーザーエージェント:Spdylay/1.2.0-dev
[0.080] recv syn_reply frame <version = 3、flags = 0、length = 619>
(stream_id = 1)
:ステータス:302が見つかりました
:バージョン:HTTP/1.1
代替プロトコル:443:QUIC
キャッシュコントロール:プライベート
コンテンツレングス:262
コンテンツタイプ:text/html; charset = utf-8
日付:火、2013年11月19日13:47:18 GMT
場所:https://www.google.co.jp/
サーバー:GWS
X-frame-options:sameorigin
X-XSS-PORTECTION:1;モード=ブロック
[0.080] RECVデータフレーム(Stream_Id = 1、Flags = 1、Length = 262)
[0.080] goawayフレーム<バージョン= 3、flags = 0、length = 8>を送信します
(last_good_stream_id = 0)
SPDYサーバーはspdydと呼ばれ、静的ファイルを提供します。非ブロッキングソケットを使用して、単一のスレッドとマルチプレックス接続です。静的ファイルは、I/O System Callのブロックを使用してread(2)れます。 Spdy/2とSpdy/3を話します:
$ src/spdyd -htdocs =/your/htdocs/-v 3000 server.key server.crt
IPv4:ポート3000で聞いてください
IPv6:ポート3000で聞いてください
ネゴシエートされた次のプロトコル:SPDY/3.1
[id = 1] [1.296]設定を送信フレーム<バージョン= 3、flags = 0、length = 12>
(NIV = 1)
[4(0):100]
[id = 1] [1.297] recv syn_streamフレーム<バージョン= 3、flags = 1、length = 228>
(stream_id = 1、assoc_stream_id = 0、pri = 3)
:host:localhost:3000
:方法:get
:path: /readme
:スキーム:https
:バージョン:HTTP/1.1
受け入れる: */*
Accept-Encoding:gzip、deflate
ユーザーエージェント:Spdylay/1.2.0-dev
[id = 1] [1.297] Syn_replyフレーム<バージョン= 3、flags = 0、length = 116>を送信します
(stream_id = 1)
:ステータス:200 OK
:バージョン:HTTP/1.1
キャッシュコントロール:MAX-AGE = 3600
コンテンツレングス:66
日付:火、2013年11月19日14:35:24 GMT
ラスト修飾:火、2012年1月17日15:39:01 GMT
サーバー:Spdyd spdylay/1.2.0-dev
[id = 1] [1.297]データフレームを送信します(stream_id = 1、flags = 0、length = 66)
[id = 1] [1.297]データフレームを送信します(stream_id = 1、flags = 1、length = 0)
[id = 1] [1.297] stream_id = 1閉じた
[id = 1] [1.297] recv goaway frame <version = 3、flags = 0、length = 8>
(last_good_stream_id = 0)
[id = 1] [1.297]閉じた
現在、 spdydはepollまたはkqueueが必要です。
SHRPXをSPDYプロキシとして使用するSHRPXユーザーの場合:NGHTTP2プロジェクトで開発されたNGHTTPXに移行することを検討してください。 NGHTTPXもSPDYプロキシをサポートしています。
shrpxは、SPDY/HTTPSのマルチスレッドリバースプロキシです。 SPDY/HTTPSトラフィックをPlain HTTPに変換します。当初は逆プロキシとして開発されていましたが、現在はFrontend Forward Proxyなどの他の操作モードがあります。たとえば、 --spdy-proxy ( -s in Shorthand)オプションを使用すると、バックエンドにプロキシ(たとえば、squid)を使用した安全なSPDYプロキシとして使用できます。 --cliet-proxy ( -p )オプションを使用すると、順序のフォワードプロキシのように機能しますが、バックエンドでは安全なSPDYプロキシが期待されます。したがって、安全なSPDYプロキシをサポートしていないクライアントにSPDYプロキシを保護するためのアダプターになります。別の顕著な操作モードは--spdy-relayであり、SPDY/HTTPSトラフィックをSPDYのバックエンドにリレーします。次の表は、操作モードをまとめたものです。
| モードオプション | フロントエンド | バックエンド | 注記 |
|---|---|---|---|
| デフォルト | spdy/https | http | 逆プロキシ |
--spdy | spdy/https | http | Spdy Proxy |
--spdy-relay | spdy/https | spdy | |
--client | http | spdy | |
--client-proxy | http | spdy | フォワードプロキシ |
shrpxは構成ファイルをサポートします。 --confオプションとサンプル構成ファイルshrpx.conf.sample参照してください。
ここでshrpxのアーキテクチャについて簡単に説明します。サーバーソケットに耳を傾ける専用のスレッドがあります。着信接続を受け入れると、ワーカースレッドの1つへの着信接続のファイル記述子を渡します。各ワーカースレッドには独自のイベントループがあり、非ブロッキングI/Oを使用して多くの接続を処理できます。ワーカースレッドの数は、コマンドラインオプションを使用して指定できます。 Libeventは、低レベルのネットワークI/Oを処理するために使用されます。
コマンドラインオプションは次のとおりです。
$ src/shrpx -h
使用法:shrpx [-dh] [-s | - client | -p] [-b <host、port>]
[-f <host、port>] [-n <cores>] [-c <num>] [-l <level>]
[オプション...] [<private_key> <cert>]
SPDY/HTTPSの逆プロキシ。
位置的議論:
<private_key>サーバーのプライベートキーへのパスを設定します。必須
-pまたは-clientのいずれかが指定されていない限り。
<cert>サーバーの証明書へのパスを設定します。必須
-pまたは-clientのいずれかが指定されていない限り。
オプション:
接続:
-b、-backend = <host、port>
バックエンドホストとポートを設定します。
デフォルト: '127.0.0.1,80'
-f、 - frontend = <host、port>
フロントエンドホストとポートを設定します。
デフォルト: '0.0.0.0,3000'
-backlog = <num>バックログのサイズを聞きます。
デフォルト:256
-backend-ipv4は、IPv4アドレスにバックエンドのホスト名を解決します
のみ。
-backend-ipv6は、IPv6アドレスにバックエンドのホスト名を解決します
のみ。
パフォーマンス:
-n、-Workers = <Cores>
ワーカースレッドの数を設定します。
デフォルト:1
-read-rate = <rate>フロントエンドで最大平均読み取りレートを設定します
繋がり。このオプションに0を設定します
読み取りレートは無制限です。
デフォルト:1048576
-read-burst = <size>
フロントエンドで最大読み取りバーストサイズを設定します
繋がり。このオプションに0を設定します
バーストサイズの読み取りは無制限です。
デフォルト:4194304
-write-rate = <rate>
フロントエンドで最大平均書き込み率を設定します
繋がり。このオプションに0を設定します
書き込み率は無制限です。
デフォルト:0
-write-burst = <size>
フロントエンドで最大書き込みバーストサイズを設定します
繋がり。このオプションに0を設定します
書き込みバーストサイズは無制限です。
デフォルト:0
タイムアウト:
- frontend-spdy-read-timeout = <ec>
Spdy Frontendの読み取りタイムアウトを指定します
繋がり。デフォルト:180
- frontend-read-timeout = <ec>
非散布フロントエンドの読み取りタイムアウトを指定します
繋がり。デフォルト:180
- -frontend-write-timeout = <ec>
SPDYと両方の書き込みタイムアウトを指定します
スパディフロントエンド。
繋がり。デフォルト:60
-backend-read-timeout = <ec>
バックエンド接続の読み取りタイムアウトを指定します。
デフォルト:900
-backend-write-timeout = <ec>
バックエンドの書き込みタイムアウトを指定します
繋がり。デフォルト:60
-backend-keep-alive-timeout = <ec>
バックエンドのキープアライブタイムアウトを指定します
繋がり。デフォルト:60
-backend-http-proxy-uri = <uri>
形式でプロキシURIを指定します
http:// [<user>:<ass>@] <Proxy>:<port>。もし
プロキシには認証が必要です。指定します
<ユーザー>および<パス>。彼らはそうでなければならないことに注意してください
適切にパーセントエンコードされています。このプロキシが使用されます
バックエンド接続がspdyの場合。初め、
プロキシへの接続要求を作成します
に代わってバックエンドに接続します
shrpx。これはトンネルを形成します。その後、shrpx
でSSL/TLSの握手を実行します
トンネルを通る下流。タイムアウト
接続して接続リクエストを作成するとき
-backend-read-timeoutで指定できます
-backend-write-timeoutオプション。
SSL/TLS:
-CIFHERS = <Suite>セット許容暗号リスト。の形式
文字列は、OpenSSL暗号(1)で説明されています。
このオプションを使用する場合、-Honor-Cipher-Order
暗黙的に有効になります。
- Honor-Cipher-order
敬意を表するサーバー暗号の注文
獣攻撃を緩和する能力。
-k、-pまたは - クライアントで使用する場合は、確認しないでください
バックエンドサーバーの証明書。
-cacert = <path> -pまたは - clientで使用する場合、パスを設定する
信頼できるCA証明書ファイル。
ファイルはPEM形式でなければなりません。できる
複数の証明書が含まれています。の場合
Linked OpenSSLは、システムをロードするように構成されています
幅広い証明書、それらはロードされています
このオプションに関係なく、起動時。
-private-key-passwd-file = <filepath>
のパスワードを含むファイルへのパス
サーバーの秘密鍵。何も与えられていない場合
秘密鍵は、パスワードで保護されています
インタラクティブにリクエストされます。
-subcert = <keypath>:<certpath>
追加の証明書とプライベートを指定します
キーファイル。 Shrpxは証明書を選択します
クライアントが示すホスト名に基づいています
TLS SNI拡張機能を使用します。このオプションは可能です
複数回使用しました。
-backend-tls-sni-field = <host>
TLS SNIのコンテンツを明示的に設定します
拡大。これはデフォルトでバックエンドになります
ホスト名。
-DH-PARAM-FILE = <Path>
DHパラメーターを含むファイルへのパス
PEM形式。このオプションがなければ、dhe cipher
スイートは利用できません。
-verify-clientは、クライアント証明書を必要とし、検証します。
-verify-client-cacert = <path>
CA証明書を含むファイルへのパス
クライアント証明書を確認します。
ファイルはPEM形式でなければなりません。できる
複数の証明書が含まれています。
-client-private-key-file = <path>
クライアントプライベートを含むファイルへのパス
バックエンドクライアント認証で使用されるキー。
-client-cert-file = <path>
クライアントを含むファイルへのパス
バックエンドクライアントで使用される証明書
認証。
-tls-proto-list = <list>
SSL/TLSプロトコルのコンマ区分リスト
有効になります。
次のプロトコルが利用可能です。
TLSV1.2、TLSV1.1、TLSV1.0、SSLV3
名前のマッチングは、ケースでは無関心で行われます
マナー。
パラメーターは、単一で区切る必要があります
コンマのみと白いスペースが扱われます
プロトコル文字列の一部として。
デフォルト:TLSV1.2、TLSV1.1、TLSV1.0
Spdy:
-c、-spdy-max-concurrent-streams = <num>
同時の最大数を設定します
1つのSPDYセッションでストリーミングします。
デフォルト:100
- frontend-spdy-window-bits = <n>
ストリームあたりの初期ウィンドウサイズを設定します
2 ** <n>へのSpdy Frontend接続。
デフォルト:16
- frontend-spdy-connection-window-bits = <n>
SPDYの接続ごとのウィンドウサイズを設定します
2 ** <n>へのフロントエンド接続。
デフォルト:16
- frontend-spdy-no-tls
FrontEnd SpdyでSSL/TLSを無効にします
接続。 SPDYプロトコルを指定する必要があります
-frontend-spdy-protoを使用します。このオプション
また、FrontEnd HTTP/1.1を無効にします。
- フロンテンドスパイプロト
Frontendで使用されるSPDYプロトコルを指定します
接続 - frontend-spdy-no-tlsの場合
使用済み。デフォルト:SPDY/3.1
-Backend-Spdy-Window-bits = <n>
ストリームあたりの初期ウィンドウサイズを設定します
2 ** <n>へのspdyバックエンド接続。
デフォルト:16
-Backend-Spdy-Connection-Window-bits = <n>
SPDYの接続ごとのウィンドウサイズを設定します
2 ** <n>へのバックエンド接続。
デフォルト:16
-Backend-spdy-no-tls
バックエンドSPDY接続でSSL/TLSを無効にします。
SPDYプロトコルを使用して指定する必要があります
- バッケンドスパディプロト
- バッケンドスパディプロト
バックエンドで使用されるSPDYプロトコルを指定します
接続 - バックエンドスパディノー-tlsが使用されている場合。
デフォルト:SPDY/3.1
モード:
-s、-spdy-proxyセキュアSpdyプロキシモードを有効にします。
-Spdy-Bridgeは、Spdyのバックエンドと通信します。したがって
着信SPDY/HTTPS接続はです
Spdy接続に変換され、に中継されます
バックエンド。 -backend-http-proxy-uriを参照してください
あなたがプロキシの背後にいて欲しい場合はオプション
外側のSpdyプロキシに接続します。
-SPDY/HTTPS接続を受け入れる代わりにクライアント、
HTTP接続を受け入れ、通信します
Spdyのバックエンドサーバー。 shrpxを使用するには
フォワードプロキシ、代わりに-pオプションを使用します。
-p、-client-proxyのような - クライアントオプションですが、それも必要です
FrontEndからの要求パスは必要です
ASとして使用するのに適した絶対URI
フォワードプロキシ。
ロギング:
-l、-log-level = <level>
ログ出力の重大度レベルを設定します。
情報、警告、エラー、致命的。
デフォルト:警告
-AccessLog印刷StderrへのSimple AccessLog。
-syslog syslogにログメッセージを送信します。
-syslog-facility = <fication>
Syslog施設を設定します。
デフォルト:デーモン
その他:
-add-x-forwarded-for
X-Forwarded-For Headerフィールドをに追加します
ダウンストリームリクエスト。
-No-viaはヘッダーフィールドを介して追加されません。経由の場合
ヘッダーフィールドが受信され、残されています
変更されていない。
-d、-daemonは背景で実行されます。 -dが使用されている場合、
現在の作業ディレクトリは「/」に変更されます。
-PID-FILE = <PATH>このプログラムのPIDを保存するパスを設定します。
-user = <user>このプログラムをユーザーとして実行します。このオプションはです
ルート特権を落とすために使用することを目的としています。
-CONF = <<path>パスからのロード構成。
デフォルト:/etc/shrpx/shrpx.conf
-v、-version printバージョンと出口。
-h、 - このヘルプと出口を印刷します。
好奇心が強い人にとって、 shrpx 「spdy/httpsへのhttp逆プロキシ」の略語です。
-s 、 --spdy-bridge 、 -p 、および--clientオプションのいずれもなければ、 shrpxバックエンドサーバーのリバースプロキシとして機能します。
クライアント< - (spdy、https) - > shrpx < - (http) - > webサーバー
[リバースプロキシ]
-sオプションを使用すると、安全なSPDYプロキシとして機能します。
クライアント< - (spdy、https) - > shrpx < - (http) - > proxy
[spdy proxy](例、squid)
上記のClientは、SHRPXを安全なSPDYプロキシとして使用するように構成する必要があります。
この執筆時点では、ChromeはSecure Spdy Proxyをサポートする唯一のブラウザです。セキュアなSPDYプロキシを使用するようにChromeを構成する1つの方法は、次のようなProxy.pacスクリプトを作成することです。
関数findProxyforurl(url、host){
「https serveraddr:port」を返します。
}
SERVERADDRとPORT 、Machine Shrpxが実行されているホスト名/アドレスとポートです。 Chromeには、Secure Spdy Proxyの有効な証明書が必要であることに注意してください。
次に、次の引数でChromeを実行します。
$ Google-Chrome -Proxy-pac-url = file:///path/to/proxy.pac-use-npn
注記
この書き込みの時点で、Chrome 24はプロキシへの最大並行接続を32に制限します。また、Chromeのソケットプール処理の制限により、Spdy Proxyが使用され、多くのSPDYセッションが確立されるとすぐに埋められます。制限に達すると、既存の接続がタイミングが出るまで新しい接続がブロックされます。 (Chrome Issue 92244を参照)。回避策は、最大接続の数を高くすることです。たとえば、99は最高です。これを行うには、いわゆるポリシーセットアップを変更する必要があります。詳細については、使用するプラットフォームでポリシーセットアップを変更する方法については、ポリシーテンプレートを参照してください。私たちが探しているポリシー名はmaxconnectionsperproxyです。たとえば、Linuxを使用している場合は、Linux Quick Start /etc/opt/chrome/policies/managed/test_policy.json Policies/manage/test_policy.jsonファイルを次のコンテンツで作成し、Chrome/policies/manage/test_policy.jsonファイルで説明した命令に従ってください。
{
「maxconnectionsperproxy」:99
}
--spdy-bridgeを使用すると、SPDY/HTTPS接続を受け入れ、SPDYのバックエンドと通信します。
クライアント< - (spdy、https) - > shrpx < - (spdy) - > webまたはspdyプロキシなど
[Spdy Bridge](例えば、shrpx -S)
-pオプションを使用すると、フォワードプロキシとして機能し、バックエンドが安全なSPDYプロキシであると予想しています。
クライアント< - (http) - > shrpx < - (spdy) - > Secure Spdy Proxy
[フォワードプロキシ](例えば、shrpx -sまたはノード-Spdyproxy)
Clientは、Shrpxをフォワードプロキシとして使用するように構成する必要があります。
この構成では、Secure Spdy Proxyをサポートしていないクライアントは、 shrpxを介してSecure Spdy Proxyを使用できます。 shrpx同じボックスまたは同じネットワークにクライアントと一緒に配置すると、この構成はこれらのクライアントに安全なSPDYプロキシの利点をもたらす可能性があります。サーバーごとの接続の最大数は引き続きプロキシ接続に適用されるため、パフォーマンスゲインは明らかではありません。たとえば、サーバーあたりの接続の最大数が6の場合、プロキシに6つのリクエストを送信した後、クライアントはさらにリクエストをブロックし、SPDY接続で得られるパフォーマンスを殺します。これらの値(Firefoxのnetwork.http.max-connections-per-server )を微調整できるクライアントの場合、それらを増やすとパフォーマンスが向上する可能性があります。
--clientオプションでは、リバースプロキシとして機能し、バックエンドがspdy対応のWebサーバーであることを期待しています。
クライアント< - (http) - > shrpx < - (spdy) - > webサーバー
[リバースプロキシ]
SPDYのバックエンドに通信する操作モードの場合、HTTPプロキシを使用してバックエンド接続をトンネルにすることができます。プロキシは、 --backend-http-proxy-uriオプションを使用して指定されています。次の図は、HTTPプロキシを介して外部SPDYプロキシと話すための--spdy-bridgeおよび--backend-http-proxy-uriオプションの例を示しています。
クライアント< - (spdy、https) - > shrpx < - (spdy) -
[Spdy Bridge]
- ==================
(HTTPプロキシトンネル)(例えば、shrpx -S)
例ディレクトリには、CにシンプルなSPDYクライアントの実装が含まれています。
ライブラリには、Pythonラッパーpython-spdylayが付属しています。 pythonディレクトリを参照してください。