Неверный протокол 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())

вкладка сети инструментов Chrome develper для dlf.in

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, но это тоже не работает).

Другие вопросы по тегам