2016-01-07 1 views
3

J'ai installé httpd-2.4.18 avec nghttp 1.6.0 et curl 7.46 pour travailler avec un serveur http2. Il semble que le serveur fonctionne avec http2 quand je le tester avec Curl et nghttp comands (comme vous pouvez le voir ci-dessous), mais quand j'utilise le navigateur (Google Chrome 47.0.2526.106) les en-têtes de réponse sont http1 au lieu de http2, et le Spdy l'indicateur est gris (devrait être bleu). Est-ce que quelqu'un sait pourquoi?httpd-2.4.18 mod_http2 fonctionne avec curl et nghttp mais ne fonctionne pas avec le navigateur

Commandes utilisées

commande Curl utilisé qui me dit que fonctionne HTTP2 correctement:

[email protected]:/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 

La même chose avec nghttp2, il semble que le serveur HTTP2 fonctionne correctement avec la commande suivante:

[email protected]:/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> 

En-têtes de réponse de navigateur:

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" 

têtes de demande de navigateur:

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 

Répondre

2

Les navigateurs ne prennent pas en charge HTTP/1.1 à HTTP/2 demandes de mise à niveau.

La seule façon d'utiliser HTTP/2 à partir des navigateurs est via TLS et ALPN. Cela étant dit, vos "en-têtes de demande de navigateur" ci-dessus sont en réalité réponse en-têtes et viceversa, il est donc difficile de dire ce que vous faites réellement. Les en-têtes de requête n'ont pas les bits de mise à niveau nécessaires.

Si vous effectuez une requête en texte clair à partir d'un navigateur (c'est-à-dire en utilisant le schéma http), le navigateur n'essaiera pas de mettre à niveau et vous resterez en mode HTTP/1.1.

+0

Merci beaucoup sbordet, j'ai édité l'erreur que vous avez dite sur les en-têtes (Mauvais copier/coller depuis le navigateur). – Elo