2016-03-22 24 views
0

HTTP/2 Stwitching Protokolleri için sorma. Ne yazık ki, birçok araştırmadan ve senaryona harcanan çok zamandan sonra, onu gerçekleştiremiyorum. İşteBir http hizmeti bir piton 3 script kullanarak HTTP/2 destekleyip desteklemediğini kontrol çalışıyorum piton 3

Elimde ne:

import sys 
import http.client as HttpClient 

h2c = { 
    "User-agent": 'python/' + str(sys.version.split()[0]), 
    "Connection": "Upgrade, HTTP2-Settings", 
    "Upgrade": "h2c", 
    "HTTP2-Settings": "AAMAAABkAAQAAP__", 
    "Accept": "*/*" 
} 

c = HttpClient.HTTPSConnection(ip, port) # IP and port given in arguments 
c.request('HEAD', '/', None, h2c) 
r = c.getresponse() 
# Print result (see below) 

Ben hyper varlığından haberdar ama hep yok istediğiniz SSL ve halen sertifika doğrulaması İşte hiper

benim komut dosyası örneği ile devre dışı bırakılamaz localhost üzerinde çalışan:

➜ http2 git:(master) ✗ python3 main.py -i localhost -p 443 

HEAD/HTTP/1.1 
Host: localhost 
Upgrade: h2c 
User-agent: python/3.4.2 
Accept: */* 
Connection: Upgrade, HTTP2-Settings 
HTTP2-Settings: AAMAAABkAAQAAP__ 

HTTP/1.1 200 OK 
Server: nginx/1.9.12 
Date: Tue, 22 Mar 2016 15:05:15 GMT 
Content-Type: text/html 
Content-Length: 867 
Last-Modified: Mon, 21 Mar 2016 10:03:18 GMT 
Connection: keep-alive 
ETag: "56efc6e6-363" 
Accept-Ranges: bytes 

kontrol ettim ve HTTP/2 (benim nginx sunucuda etkinleştirmek olduğunu curl --http2)

birisi HTTP 101 cevap sunucuyu zorlamak için bir fikir ... varsa

+0

ngnix, düz metin HTTP/2'ye yükseltme desteklemek https://trac.nginx.org/nginx/ticket/816 ve https://trac.nginx.org/nginx/ticket/808 görmez. Hiçbir destek, onu uygulayamayacağınız anlamına gelmez. –

cevap

1

2 şekilde müzakere edilebilir/2 HTTP: TLS üzerinden ALPN vasıtasıyla veya düz metin HTTP/1.1 üzerinden Yükselt.

Burada ne işin var iki yöntemden bir karışımıdır: Bir TLS bağlantısı kullanarak ve HTTP/1.1 yükseltme gönderiyor.

Bunun yerine yapmanız gereken TLS bağlantısını kullanmaktır, ALPN uzantısını istemcinin desteklediği protokoller listesiyle (sizin durumunuza göre, en az h2) belirtin - sunucu HTTP/2'yi konuşmayı kabul ederse - HTTP/2 kareleri doğrudan göndermeye başlayın (HTTP/1.1 yükseltmesi değil).

Python uzmanı değilim, ancak ALPN protokollerini belirtmek mümkündür, bkz. here ve here.

Ayrıca HTTP/2 uygulamaya other Python projects bakmak istiyorum.

+0

Yardımlarınız için teşekkürler. Benim hatam, [RFC] 'yi yanlış anladım (https://tools.ietf.org/html/rfc7540#section-3.1) ve aslında TLS bağlantısını kullanarak konuşuyorlar, ALPN uzantısını belirtiyorlar. – ellirdnaw

+0

Ancak, 'set_alpn_protocols' işlevinden yararlanmak için Python 3.5 kullanmalıyız, ancak 3.4'e bağımlıyım (script'im, python'u yüklemeden, herhangi bir PC'de çalışmayı gerektiriyor, sadece apt paketi yöneticisi sayesinde). Baska öneri? – ellirdnaw

+0

"set_npn_protocols" sayesinde istediğimi yapmayı başardım. RFC7540'da önerilmiyor ancak python'u paket yöneticisi aracılığıyla güncelleyene kadar kullanacağım. Yardım ettiğin için teşekkür ederim! – ellirdnaw