httpd-2.4.18 mod_http2 работает с curl и nghttp, но не работает с браузером
Я установил httpd-2.4.18 с nghttp 1.6.0 и curl 7.46 для работы с сервером http2. Кажется, что сервер работает с http2, когда я тестирую его с помощью команд Curl и nghttp (как вы можете видеть ниже), но когда я использую браузер ( Google Chrome 47.0.2526.106), заголовки ответа - http1 вместо http2 и Spdy индикатор серый (должен быть синим). Кто-нибудь знает почему?
Используемые команды
Используется команда Curl, которая говорит мне, что http2 работает правильно:
eloy@eloy-OptiPlex-745:/usr/local/apache2/logs$ curl --http2 -I http://localhost
HTTP/1.1 101 Switching Protocols
Upgrade: h2c
Connection: Upgrade
HTTP/2.0 200
date:Thu, 07 Jan 2016 21:38:06 GMT
server:Apache/2.4.18 (Unix) OpenSSL/1.0.2e
last-modified:Mon, 11 Jun 2007 18:53:14 GMT
etag:"2d-432a5e4a73a80"
accept-ranges:bytes
content-length:45
content-type:text/html
То же самое с nghttp2, кажется, что сервер http2 работает правильно с помощью следующей команды:
eloy@eloy-OptiPlex-745:/usr/local/apache2/logs$ nghttp -uv http://localhost
[ 0.000] Connected
[ 0.000] HTTP Upgrade request
GET / HTTP/1.1
host: localhost
connection: Upgrade, HTTP2-Settings
upgrade: h2c
http2-settings: AAMAAABkAAQAAP__
accept: */*
user-agent: nghttp2/1.6.0
[ 0.001] HTTP Upgrade response
HTTP/1.1 101 Switching Protocols
Upgrade: h2c
Connection: Upgrade
[ 0.001] HTTP Upgrade success
[ 0.001] recv SETTINGS frame <length=6, flags=0x00, stream_id=0>
Заголовки ответа из браузера:
HTTP/1.1 304 Not Modified
Date: Thu, 07 Jan 2016 21:49:40 GMT
Server: Apache/2.4.18 (Unix) OpenSSL/1.0.2e
Connection: Upgrade, Keep-Alive
Keep-Alive: timeout=5, max=100
ETag: "2d-432a5e4a73a80"
Запросить заголовки из браузера:
GET / HTTP/1.1
Host: localhost
Connection: keep-alive
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: es-ES,es;q=0.8
If-None-Match: "2d-432a5e4a73a80"
If-Modified-Since: Mon, 11 Jun 2007 18:53:14 GMT
1 ответ
Браузеры не поддерживают запросы обновления с HTTP/1.1 до HTTP/2.
Единственный способ использовать HTTP/2 из браузеров - через TLS и ALPN.
Сказав это, ваши "Заголовки запроса от браузера" на самом деле являются заголовками ответа и наоборот, поэтому трудно сказать, что вы на самом деле делаете. В заголовках запросов отсутствуют необходимые биты обновления.
Если вы делаете открытый текст запроса из браузера (то есть, используя http
схема), тогда браузер не будет пытаться выполнить обновление, и вы останетесь в режиме HTTP/1.1.