Неверный протокол http, показанный инструментами разработчика Chrome?
Я проверяю протокол http, используемый для этого сайта http://www.dlf.in/ Инструменты разработчика Chrome показывают, что он http / 1.1, как на изображении ниже.
Однако инструмент командной строки - это http2 или alpn в python, что, по-видимому, указывает на то, что http / 1.1 недоступен. И только http1 доступен. Что тут происходит?
Я делаю ALPN-согласование в python следующим образом (версия openssl: OpenSSL 1.0.2h и версия python 3.5.1)
import ssl
import socket
port = 443
domain = 'www.dlf.in'
ctx = ssl.create_default_context()
ctx.set_alpn_protocols(['h2', 'spdy/3.1', 'spdy/3', 'spdy/2', 'http/1.1'])
conn = ctx.wrap_socket(socket.socket(socket.AF_INET, socket.SOCK_STREAM),
server_hostname=domain)
conn.connect((domain, port))
print(conn.selected_alpn_protocol())
3 ответа
На этом сайте нет HTTPS. Браузеры поддерживают HTTP/2 только через HTTPS, несмотря на то, что теоретически теоретически это разрешено через HTTP.
С помощью telnet
а также HTTPie
для отправки HTTP-запросов (как 1.0, так и 1.1) веб-сервер отвечает:
HTTP / 1.1 200 ОК
Я попробовал это с 2.0 и получил:
HTTP / 1.1 505 HTTP версия не поддерживается
Этот сайт не поддерживает SSL (я пытался использовать curl https://www.dlf.in
и получил ответ HTTP 504)
Curl - это браузер командной строки, который также реализует HTTP/2 в открытом виде (не SSL) и имеет механизм обновления (использующий --http2
флаг). Используя этот флаг, я увидел, что веб-сайт не поддерживает чистый HTTP/2. (Существует возможность прямого соединения с HTTP/2 в открытом виде, без механизма обновления, используя --http2-prior-knowledge
, но это тоже не работает).