Ini adalah implementasi eksperimental dari protokol SPDY Google di C.
Perpustakaan ini menyediakan Implementasi Lapisan Pembingkaian SPDY Versi 2, 3 dan 3.1. Itu tidak melakukan operasi I/O apa pun. Ketika perpustakaan membutuhkannya, ia memanggil fungsi panggilan balik yang disediakan oleh aplikasi. Ini juga tidak termasuk mekanisme pemungutan suara acara apa pun, sehingga aplikasi dapat dengan bebas memilih cara penanganan acara. Kode perpustakaan ini tidak bergantung pada pustaka SSL tertentu (kecuali untuk contoh program yang bergantung pada OpenSSL 1.0.1 atau lebih baru).
Proyek ini juga mengembangkan SPDY Client, Server, dan Proxy di atas perpustakaan Spdylay. Lihat bagian Program Klien dan Server SPDY.
Sebagian besar fungsionalitas SPDY/2, SPDY/3 dan SPDY/3.1 telah diimplementasikan. Di kedua versi, dukungan langsung dari server-push belum tersedia. Aplikasi ini dapat mencapai server-domba menggunakan API primitif.
Seperti dijelaskan di bawah ini, kami dapat membuat klien dan server SPDY dengan API spdylay saat ini.
Paket berikut diperlukan untuk membangun perpustakaan:
Untuk membangun dan menjalankan program unit uji, paket berikut diperlukan:
Untuk membangun dan menjalankan contoh program, paket berikut diperlukan:
Untuk mengaktifkan -a opsi (mendapatkan aset tertaut dari sumber daya yang diunduh) di spdycat (salah satu program contoh), paket berikut diperlukan:
Untuk membangun SPDY/HTTPS ke HTTP Reverse Proxy shrpx (salah satu program contoh), paket berikut diperlukan:
Jika Anda menggunakan Ubuntu 12.04, Anda memerlukan paket berikut yang diinstal:
$ apt-get instal autoconf autotools-dev libtool pkg-config zlib1g-dev libcunit1-dev libssl-dev libxml2-dev libevent-dev
Building dari Git itu mudah, tapi pastikan setidaknya AutoConf 2.68 digunakan:
$ autoreconf -i $ Automake $ autoconf $ ./configure $ make
Untuk membangun dokumentasi, jalankan:
$ membuat html
Dokumen akan dihasilkan di bawah doc/manual/html/ .
Dokumen yang dihasilkan tidak akan diinstal dengan make install .
Di bagian ini, kami menjelaskan secara singkat cara membangun biner Android menggunakan kompiler silang Android NDK di Debian Linux.
Kami menawarkan skrip android-config dan android-make untuk membuat build lebih mudah. Untuk membuat skrip ini berfungsi, NDK Toolchain harus diinstal dengan cara berikut. Pertama, biarkan memperkenalkan variabel lingkungan ANDROID_HOME . Kita perlu menginstal Toolchain di bawah $ANDROID_HOME/toolchain . Pengguna dapat dengan bebas memilih jalur untuk ANDROID_HOME . Misalnya, untuk menginstal toolchain di bawah $ANDROID_HOME/toolchain , lakukan ini di direktori tempat NDK dibongkar:
$ build/tools/make-standalone-toolchain.sh --platform = android-9 --install-d = $ android_home/toolchain
Level platform tidak penting di sini karena kami tidak menggunakan android spesifik C/C ++ API.
Perpustakaan dependen, seperti OpenSSL dan Libevent harus dibangun dengan toolchain dan diinstal di bawah $ANDROID_HOME/usr/local . Kami merekomendasikan untuk membangun perpustakaan ini sebagai perpustakaan statis untuk membuat penyebaran lebih mudah. Dukungan LIBXML2 saat ini dinonaktifkan.
Kami menggunakan Zlib yang datang dengan Android NDK, jadi kami tidak perlu membangunnya sendiri.
Sebelum menjalankan android-config dan android-make , variabel lingkungan ANDOIRD_HOME harus diatur untuk menunjuk ke jalur yang benar.
Setelah android-config , jalankan android-make untuk menyusun sumber. android-make hanya termasuk jalur untuk melintasi kompiler di PATH dan menjalankan make. Jadi, jika Anda memasukkan Path to Cors Compiler sendiri, Anda bisa menjalankan Make untuk membangun spdylay dan alat seperti biasa.
Referensi API publik tersedia secara online. Kunjungi http://tatsuhiro-t.github.io/spdylay/. Semua API publik ada di Spdylay/spdylay.h . Semua fungsi API publik serta fungsi callback typedef didokumentasikan.
Direktori SRC berisi implementasi klien dan server SPDY menggunakan perpustakaan SPDYLAY. Program -program ini dimaksudkan untuk memastikan bahwa spdylay API dapat digunakan secara akut untuk implementasi nyata dan juga untuk tujuan debugging. Harap dicatat bahwa OpenSSL dengan dukungan NPN diperlukan untuk membangun dan menjalankan program -program ini. Pada saat penulisan ini, OpenSSL 1.0.1 mendukung NPN.
Klien SPDY disebut spdycat . Ini adalah pengunduh sederhana yang mati seperti wget/curl. Itu terhubung ke SPDY Server dan mendapatkan sumber daya yang diberikan dalam baris perintah:
$ SRC/SPDYCAT -H
Penggunaan: SPDYCAT [-OANSV23] [-t <SecondS>] [-W <Window_bits>] [--cert = <tert>]
[--key = <yyy>] [---no-tls] [-d <pangkangkuan>] [-m <n>] [-p <sroxy_host>]
[-P <Roxy_port>] <Uri> ...
Opsi:
-v, --Verbose Informasi Debug Cetak seperti Penerimaan/
transmisi bingkai dan pasangan/nilai pasangan.
-n,--Null-out Delundcard Data yang Diunduh.
-O,--remote-name menyimpan data unduhan di direktori saat ini.
Nama file itu diasyikan dari URI. Jika URI
diakhiri dengan '/', 'index.html' digunakan sebagai a
nama file. Belum diimplementasikan.
-2, --spdy2 hanya menggunakan spdy/2.
-3, --spdy3 hanya menggunakan SPDY/3.
-spdy3-1 hanya menggunakan spdy/3.1.
-t, - -timeout = <n> batas waktu setiap permintaan setelah <n> detik.
-W, --window-bits = <n>
Mengatur ukuran jendela awal menjadi 2 ** <n>.
-a, --get-asset unduh aset seperti stylesheets, gambar
dan file skrip yang ditautkan dari yang diunduh
sumber. Hanya tautan yang asal usulnya
Sama dengan sumber daya tautan akan
diunduh.
-s, --Stat statistik cetak.
-H, --teader menambahkan header ke permintaan.
--cert = <tert> Gunakan file sertifikat klien yang ditentukan.
File harus dalam format PEM.
--key = <yyy> Gunakan file kunci privat klien. File
harus dalam format PEM.
---no-tls Nonaktifkan SSL/TLS. Gunakan -2, -3 atau --spdy3-1
Tentukan versi protokol SPDY untuk digunakan.
-d, --data = <file> Posting file ke server. Jika - diberikan, data
akan dibaca dari Stdin.
-m, -multiple = <n> meminta setiap URI <n> kali. Secara default, sama
Uri tidak diminta dua kali. Opsi ini
menonaktifkannya juga.
-p, --proxy = <host> Gunakan host ini sebagai proxy spdy
-P, --proxy-port = <port>
Gunakan ini sebagai port proxy spdy jika
satu diatur
-Output log berwarna-warni warna.
$ src/spdycat -nv https://www.google.com/
[0,021] NPN Pilih Protokol Berikutnya: Server jarak jauh menawarkan:
* SPDY/4A4
* SPDY/3.1
* spdy/3
* http/1.1
NPN memilih protokol: SPDY/3.1
[0,029] Tangan Lengkap
[0.029] RecV Pengaturan Frame <Versi = 3, Flags = 0, Length = 20>
(NIV = 2)
[4 (1): 100]
[7 (0): 1048576]
[0.029] RECV Window_Update Frame <Versi = 3, Flags = 0, Length = 8>
(stream_id = 0, delta_window_size = 983040)
[0.029] Kirim bingkai syn_stream <Versi = 3, flags = 1, panjang = 221>
(stream_id = 1, assoc_stream_id = 0, pri = 3)
: Host: www.google.com
: Metode: Dapatkan
:jalur: /
: Skema: https
: Versi: http/1.1
menerima: */*
Accept-Encoding: GZIP, mengempis
Pengguna-agen: spdylay/1.2.0-dev
[0.080] Recv syn_reply Frame <Versi = 3, flags = 0, panjang = 619>
(stream_id = 1)
: Status: 302 ditemukan
: Versi: http/1.1
Alternatif-Protokol: 443: Quic
Cache-Control: Private
Panjang konten: 262
tipe konten: teks/html; Charset = UTF-8
Tanggal: Sel, 19 Nov 2013 13:47:18 GMT
Lokasi: https://www.google.co.jp/
Server: GWS
X-frame-options: SameRoRigin
X-XSS-Proteksi: 1; Mode = Blok
[0.080] RECV Data Frame (Stream_ID = 1, Flags = 1, Panjang = 262)
[0.080] Kirim bingkai pergi <versi = 3, flag = 0, panjang = 8>
(last_good_stream_id = 0)
SPDY Server disebut spdyd dan menyajikan file statis. Ini adalah koneksi berulir tunggal dan multipleks menggunakan soket non-blocking. File statis dibaca menggunakan pemblokiran panggilan sistem I/O, read(2) . Itu berbicara spdy/2 dan spdy/3:
$ src/spdyd --htdocs =/Anda/htdocs/-v 3000 server.key server.crt
IPv4: Dengarkan di port 3000
IPv6: Dengarkan di port 3000
Protokol Berikutnya Berikutnya: SPDY/3.1
[id = 1] [1.296] Kirim bingkai pengaturan <Versi = 3, flag = 0, panjang = 12>
(NIV = 1)
[4 (0): 100]
[id = 1] [1.297] Recv syn_stream frame <Versi = 3, flag = 1, panjang = 228>
(stream_id = 1, assoc_stream_id = 0, pri = 3)
: Host: Localhost: 3000
: Metode: Dapatkan
: path: /readme
: Skema: https
: Versi: http/1.1
menerima: */*
Accept-Encoding: GZIP, mengempis
Pengguna-agen: spdylay/1.2.0-dev
[id = 1] [1.297] Kirim bingkai syn_reply <Versi = 3, flag = 0, panjang = 116>
(stream_id = 1)
: Status: 200 OK
: Versi: http/1.1
Cache-Control: Max-Age = 3600
Panjang konten: 66
Tanggal: Sel, 19 Nov 2013 14:35:24 GMT
Modifikasi Terakhir: Sel, 17 Jan 2012 15:39:01 GMT
Server: SPDYD SPDYLAY/1.2.0-DEV
[id = 1] [1.297] Kirim bingkai data (stream_id = 1, flag = 0, panjang = 66)
[id = 1] [1.297] Kirim bingkai data (stream_id = 1, flag = 1, panjang = 0)
[id = 1] [1.297] stream_id = 1 ditutup
[ID = 1] [1.297] RecV GOAWAY FRAME <Versi = 3, Flags = 0, Length = 8>
(last_good_stream_id = 0)
[id = 1] [1.297] ditutup
Saat ini, spdyd membutuhkan epoll atau kqueue .
Untuk pengguna SHRPX yang menggunakan SHRPX sebagai SPDY Proxy: Harap pertimbangkan untuk bermigrasi ke NGHTTPX yang dikembangkan di proyek NGHTTP2. NGHTTPX juga mendukung SPDY Proxy.
shrpx adalah proxy terbalik multi-threading untuk SPDY/HTTPS. Ini mengubah lalu lintas SPDY/HTTPS menjadi http biasa. Awalnya dikembangkan sebagai proxy terbalik, tetapi sekarang memiliki mode operasi lain seperti proxy depan frontend. Misalnya, dengan opsi --spdy-proxy ( -s in shorthand), ini dapat digunakan sebagai proxy spdy yang aman dengan proxy (misalnya, cumi) di backend. Dengan opsi --cliet-proxy ( -p ), ia bertindak seperti proxy maju ordinaly tetapi mengharapkan proxy spdy yang aman di backend. Dengan demikian menjadi adaptor untuk mengamankan proxy SPDY untuk klien yang tidak mendukung proxy SPDY yang aman. Mode operasi penting lainnya adalah --spdy-relay , yang hanya menyampaikan lalu lintas SPDY/HTTPS ke backend di SPDY. Tabel berikut merangkum mode operasi.
| Opsi Mode | Frontend | Backend | Catatan |
|---|---|---|---|
| bawaan | Spdy/https | Http | Proxy terbalik |
--spdy | Spdy/https | Http | Proxy Spdy |
--spdy-relay | Spdy/https | Spdy | |
--client | Http | Spdy | |
--client-proxy | Http | Spdy | Proxy Maju |
shrpx mendukung file konfigurasi. Lihat -Opsi --conf dan File Konfigurasi Sampel shrpx.conf.sample .
Kami secara singkat menggambarkan arsitektur shrpx di sini. Ini memiliki utas khusus yang mendengarkan soket server. Ketika menerima koneksi yang masuk, ia melewati deskriptor file dari koneksi yang masuk ke salah satu utas pekerja. Setiap utas pekerja memiliki loop acara sendiri dan dapat menangani banyak koneksi menggunakan I/O non-blocking. Jumlah utas pekerja dapat ditentukan menggunakan opsi baris perintah. Libevent digunakan untuk menangani I/O jaringan tingkat rendah.
Berikut adalah opsi baris perintah:
$ src/shrpx -h
Penggunaan: shrpx [-dh] [-s | --Client | -p] [-b <host, port>]
[-f <host, port>] [-n <cores>] [-c <um num>] [-l <level>]]
[Opsi ...] [<divate_key> <tert>]
Proxy terbalik untuk SPDY/HTTPS.
Argumen Posisi:
<s private_key> mengatur jalur ke kunci pribadi server. Diperlukan
Kecuali jika -p atau -klien ditentukan.
<tert> Tetapkan jalur ke sertifikat server. Diperlukan
Kecuali jika -p atau -klien ditentukan.
Opsi:
Koneksi:
-b, --backend = <host, port>
Atur host dan port backend.
Default: '127.0.0.1,80'
-f, --frontend = <host, port>
Setel host dan port frontend.
Default: '0.0.0.0.3000'
---backlog = <um num> Setel Dengarkan ukuran backlog.
Default: 256
--Backend-IPV4 menyelesaikan nama host backend ke alamat IPv4
hanya.
--Backend-IPV6 menyelesaikan nama host backend ke alamat IPv6
hanya.
Pertunjukan:
-n, --workers = <cores>
Atur jumlah utas pekerja.
Default: 1
--READ-RATE = <RACE> Atur tingkat baca rata-rata maksimum di frontend
koneksi. Mengatur 0 ke opsi ini berarti
Tingkat baca tidak terbatas.
Default: 1048576
--READ-BURST = <SIZE>
Atur Ukuran Burst Baca Maksimum di Frontend
koneksi. Mengatur 0 ke opsi ini berarti
Baca ukuran burst tidak terbatas.
Default: 4194304
--write-rate = <Rase>
Tetapkan tingkat penulisan rata -rata maksimum di frontend
koneksi. Mengatur 0 ke opsi ini berarti
Tingkat tulis tidak terbatas.
Default: 0
--write-Burst = <Size>
Atur ukuran burst write maksimum di frontend
koneksi. Mengatur 0 ke opsi ini berarti
Tulis ukuran burst tidak terbatas.
Default: 0
Timeout:
--Frontend-spdy-read-timeout = <sec>
Tentukan waktu tunggu baca untuk Spdy Frontend
koneksi. Default: 180
--Frontend-read-timeout = <sec>
Tentukan batas waktu baca untuk frontend non-spdy
koneksi. Default: 180
--Frontend-Write-timeout = <sec>
Tentukan waktu tunggu waktu untuk SPDY dan
Frontend Non-Spdy.
koneksi. Default: 60
--backend-read-timeout = <sec>
Tentukan batas waktu baca untuk koneksi backend.
Default: 900
--backend-write-timeout = <sec>
Tentukan waktu tunggu waktu untuk backend
koneksi. Default: 60
--backend-mondar-mandir-waktu-waktu = <sec>
Tentukan waktu tunggu yang tidak hidup untuk backend
koneksi. Default: 60
---backend-http-proxy-uri = <Uri>
Tentukan proxy uri dalam formulir
http: // [<usser>: <sfoll>@] <droxy>: <port>. Jika
Proxy membutuhkan otentikasi, tentukan
<user> dan <pass>. Perhatikan bahwa mereka pasti
dengan tepat persentase. Proxy ini digunakan
Saat koneksi backend adalah spdy. Pertama,
membuat permintaan koneksi ke proxy dan
itu terhubung ke backend atas nama
shrpx. Ini membentuk terowongan. Setelah itu, shrpx
melakukan jabat tangan SSL/TLS dengan
Hilir melalui terowongan. Timeout
Saat menghubungkan dan membuat permintaan koneksi
dapat ditentukan oleh --cackend-back-timeout
dan--backend-write-timeout opsi.
SSL/TLS:
---ciphers = <s suite> Set diizinkan daftar cipher. Format dari
String dijelaskan dalam cipher OpenSSL (1).
Jika opsi ini digunakan, --ter-honor-cipher-order
diaktifkan secara implisit.
--honor-cipher-order
Menghormati pesanan cipher server, memberikan
Kemampuan untuk mengurangi serangan binatang buas.
-k, -insecure saat digunakan dengan -p atau --client, jangan verifikasi
Sertifikat Backend Server.
--cacert = <path> Saat digunakan dengan -p atau -klien, atur path ke
File Sertifikat CA Tepercaya.
File harus dalam format PEM. Itu bisa
Berisi banyak sertifikat. Jika
OpenSSL Tertaut dikonfigurasi ke Sistem Memuat
sertifikat luas, mereka dimuat
saat startup terlepas dari opsi ini.
--Private-key-passwd-File = <filepath>
Jalur ke file yang berisi kata sandi untuk
Kunci pribadi server. Jika tidak ada yang diberikan dan
Kunci pribadi dilindungi kata sandi itu akan
diminta secara interaktif.
--subcert = <KeyPath>: <CertPath>
Tentukan sertifikat tambahan dan pribadi
file kunci. Shrpx akan memilih sertifikat
Berdasarkan nama host yang ditunjukkan oleh klien
menggunakan ekstensi TLS SNI. Opsi ini bisa
digunakan beberapa kali.
--backend-tls-sni-field = <host>
Secara eksplisit atur konten TLS SNI
perpanjangan. Ini akan default ke backend
Nama host.
--DH-param-file = <path>
Jalur ke file yang berisi parameter DH di
Format PEM. Tanpa opsi ini, dhe cipher
Suite tidak tersedia.
--Verify-CLIENT Memerlukan dan memverifikasi Sertifikat Klien.
--Verify-cacert = <path>
Jalur ke file yang berisi sertifikat CA
untuk memverifikasi sertifikat klien.
File harus dalam format PEM. Itu bisa
Berisi banyak sertifikat.
--CLient-Private-Key-File = <Tath>
Jalur ke file yang berisi klien pribadi
Kunci yang digunakan dalam otentikasi klien backend.
--Client-Cert-File = <path>
Jalur ke file yang berisi klien
Sertifikat yang digunakan di klien backend
otentikasi.
--tls-proto-list = <list>
Daftar Protokol SSL/TLS yang dibatasi
diaktifkan.
Protokol berikut tersedia:
TLSV1.2, TLSV1.1, TLSV1.0, SSLV3
Pencocokan nama dilakukan dalam hal tidak sensitif
tata krama.
Parameter harus dibatasi oleh satu
Hanya koma dan ruang putih apa pun diperlakukan
Sebagai bagian dari string protokol.
Default: tlsv1.2, tlsv1.1, tlsv1.0
SPDY:
-c, --pdy-max-concurrent-streams = <um num>
Tetapkan jumlah maksimum yang bersamaan
Stream dalam satu sesi SPDY.
Default: 100
--Frontend-spdy-window-bits = <n>
Mengatur ukuran jendela awal per-stream
Koneksi Spdy Frontend ke 2 ** <n>.
Default: 16
--Frontend-spdy-connection-window-bits = <n>
Mengatur Ukuran Jendela Per-Koneksi SPDY
Koneksi frontend ke 2 ** <n>.
Default: 16
--Frontend-spdy-no-tls
Nonaktifkan SSL/TLS di Frontend SPDY
koneksi. Protokol SPDY harus ditentukan
Menggunakan --frontend-spdy-Proto. Opsi ini
juga menonaktifkan frontend http/1.1.
--Frontend-Spdy-Proto
Tentukan protokol spdy yang digunakan di frontend
koneksi jika ---frontend-spdy-no-tls
digunakan. Default: SPDY/3.1
---backend-spdy-window-bits = <n>
Mengatur ukuran jendela awal per-stream
SPDY Backend Connection ke 2 ** <n>.
Default: 16
---backend-spdy-connection-window-bits = <n>
Mengatur Ukuran Jendela Per-Koneksi SPDY
Koneksi backend ke 2 ** <n>.
Default: 16
---backend-spdy-no-tls
Nonaktifkan SSL/TLS di Backend SPDY Connections.
Protokol SPDY harus ditentukan menggunakan
--Backend-Spdy-Proto
--Backend-Spdy-Proto
Tentukan protokol SPDY yang digunakan dalam backend
Koneksi Jika --Backend-spdy-no-TLS digunakan.
Default: SPDY/3.1
Mode:
-s, --pdy-proxy mengaktifkan mode proxy spdy aman.
--Pdy-bridge berkomunikasi dengan backend di spdy. Dengan demikian
Koneksi SPDY/HTTPS yang masuk
dikonversi ke koneksi spdy dan disampaikan ke
Backend. Lihat --Backend-http-proxy-Uuri
opsi jika Anda berada di belakang proxy dan ingin
untuk terhubung ke proxy spdy luar.
--Client Alih-alih menerima koneksi SPDY/HTTPS,
menerima koneksi HTTP dan berkomunikasi dengan
Backend Server di SPDY. Untuk menggunakan shrpx sebagai
Proxy Forward, Gunakan -P opsi sebagai gantinya.
-p,--Client-Proxy seperti-opsi klien, tetapi juga membutuhkan
jalur permintaan dari frontend pasti
URI mutlak, cocok untuk digunakan sebagai a
Proxy Maju.
Logging:
-L,--log-level = <level>
Atur tingkat keparahan output log.
Info, peringatan, kesalahan dan fatal.
Default: Peringatan
--AccessLog Print Sederhana AccessLog ke Stderr.
--syslog mengirim pesan log ke syslog.
--syslog-facility = <facility>
Atur fasilitas syslog.
Default: Daemon
MISC:
--Add-x-Forwarded-for
Tambahkan bidang header X-forwarded-for ke
permintaan hilir.
--no-via tidak ditambahkan ke Via Header Field. Jika via
Bidang header diterima, tersisa
tidak berubah.
-D, -Daemon dijalankan di latar belakang. Jika -d digunakan,
Direktori kerja saat ini diubah menjadi '/'.
--pid-file = <path> Setel path untuk menyimpan PID program ini.
--User = <user> Jalankan program ini sebagai pengguna. Opsi ini adalah
dimaksudkan untuk digunakan untuk menjatuhkan hak istimewa root.
--conf = <path> Muat konfigurasi dari path.
Default: /etc/shrpx/shrpx.conf
-V, --Version versi cetak dan keluar.
-H, --help cetak bantuan dan keluar ini.
Bagi Anda yang penasaran, shrpx adalah singkatan dari "spdy/https ke http reverse proxy".
Tanpa opsi -s , --spdy-bridge , -p dan --client , shrpx berfungsi sebagai proxy terbalik ke server backend:
CLIENT <-(SPDY, https)-> shrpx <-(http)-> server web
[Reverse Proxy]
Dengan opsi -s , berfungsi sebagai proxy spdy yang aman:
Klien <-(SPDY, https)-> shrpx <-(http)-> proxy
[Spdy Proxy] (misalnya, cumi -cumi)
Client di atas harus dikonfigurasi untuk menggunakan SHRPX sebagai proxy SPDY yang aman.
Pada saat penulisan ini, Chrome adalah satu -satunya browser yang mendukung proxy SPDY yang aman. Satu cara untuk mengonfigurasi chrome untuk menggunakan proxy spdy aman adalah membuat proxy.pac skrip seperti ini:
fungsi findProxyForUrl (url, host) {
mengembalikan "https serveraddr: port";
}
SERVERADDR dan PORT adalah nama host/alamat dan port mesin yang dijalankan Shrpx. Harap dicatat bahwa Chrome membutuhkan sertifikat yang valid untuk proxy SPDY yang aman.
Kemudian jalankan Chrome dengan argumen berikut:
$ google-chrome --proxy-pac-url = file: ///path/to/proxy.pac --use-npn
Catatan
Pada saat penulisan ini, Chrome 24 membatasi koneksi bersamaan maksimum ke proxy ke 32. Dan karena keterbatasan penanganan kolam soket di Chrome, itu dengan cepat diisi jika proxy SPDY digunakan dan banyak sesi SPDY ditetapkan. Jika mencapai batas, koneksi baru hanya diblokir sampai koneksi yang ada diatur waktunya. (Lihat edisi Chrome 92244). Penanganan solusi adalah membuat jumlah koneksi maksimum tinggi, katakanlah, 99, yang merupakan yang tertinggi. Untuk melakukan ini, Anda perlu mengubah pengaturan kebijakan yang disebut. Lihat Templat Kebijakan untuk detail cara mengubah pengaturan kebijakan pada platform yang Anda gunakan. Nama kebijakan yang kami cari adalah MaxConnectionPerProxy misalnya, jika Anda menggunakan Linux, ikuti instruksi yang dijelaskan di Linux Start Quick dan buat /etc/opt/chrome/policies/managed/test_policy.json file dengan konten berikut dan restart chrome:
{
"MaxConnectionProxy": 99
}
Dengan --spdy-bridge , ia menerima koneksi SPDY/HTTPS dan berkomunikasi dengan backend di SPDY:
CLIENT <-(SPDY, HTTPS)-> shrpx <-(spdy)-> Web atau spdy proxy dll
[Spdy Bridge] (misalnya, shrpx -s)
Dengan opsi -p , ini berfungsi sebagai proxy maju dan berharap bahwa backend adalah proxy spdy yang aman:
Klien <-(http)-> shrpx <-(spdy)-> proxy spdy aman
[Forward Proxy] (misalnya, shrpx -s atau node -spdyproxy)
Client perlu dikonfigurasi untuk menggunakan SHRPX sebagai proxy maju.
Dalam konfigurasi ini, klien yang tidak mendukung proxy SPDY yang aman dapat menggunakan proxy SPDY yang aman melalui shrpx . Menempatkan shrpx di kotak yang sama atau jaringan yang sama dengan klien, konfigurasi ini dapat membawa manfaat proxy SPDY yang aman untuk klien tersebut. Karena jumlah maksimum koneksi per server masih berlaku dalam koneksi proxy, perolehan kinerja tidak jelas. Misalnya, jika jumlah maksimum koneksi per server adalah 6, setelah mengirim 6 permintaan ke proxy, klien memblokir permintaan lebih lanjut, yang membunuh kinerja yang mungkin diperoleh dalam koneksi SPDY. Untuk klien yang dapat mengubah nilai-nilai ini (misalnya, network.http.max-connections-per-server di Firefox), meningkatkannya dapat meningkatkan kinerja.
Dengan --client opsi klien, berfungsi sebagai proxy terbalik dan berharap bahwa backend adalah server web yang diaktifkan SPDY:
Klien <-(http)-> shrpx <-(spdy)-> server web
[Reverse Proxy]
Untuk mode Operasi yang berbicara dengan backend di SPDY, koneksi backend dapat di -tunneled meskipun http proxy. Proksi ini ditentukan menggunakan opsi --backend-http-proxy-uri . Gambar berikut ini menggambarkan contoh --spdy-bridge dan --backend-http-proxy-uri opsi untuk berbicara dengan proxy spdy luar melalui proxy http:
Klien <-(SPDY, HTTPS)-> shrpx <-(SPDY)-
[Spdy Bridge]
-=================== ---> SPDY Proxy
(Terowongan proxy http) (misalnya, shrpx -s)
Direktori Contoh berisi implementasi klien SPDY sederhana di C.
Perpustakaan dilengkapi dengan pembungkus Python python-spdylay . Lihat Direktori python .