HTTP2 可用但服务器拒绝使用它,这是为什么?
HTTP2 is available but server refuses to use it why it may be?
我已经为我的虚拟主机成功设置了 http2,但是当我尝试通过 curl 访问 url 时,服务器似乎拒绝通过 http2 连接并接受 http1。谁能解释为什么会这样?以及如何告诉我的服务器首先使用 http2。
下面是我尝试为其配置 http2 的站点的 curl 输出。
* Rebuilt URL to: https://example.com/
* Trying 172.24.112.31...
* TCP_NODELAY set
* Connected to example.com (172.24.112.31) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
* CAfile: /etc/ssl/certs/ca-certificates.crt
CApath: none
} [5 bytes data]
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
} [221 bytes data]
* TLSv1.2 (IN), TLS handshake, Server hello (2):
{ [112 bytes data]
* TLSv1.2 (IN), TLS handshake, Certificate (11):
{ [2426 bytes data]
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
{ [300 bytes data]
* TLSv1.2 (IN), TLS handshake, Server finished (14):
{ [4 bytes data]
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
} [37 bytes data]
* TLSv1.2 (OUT), TLS change cipher, Client hello (1):
} [1 bytes data]
* TLSv1.2 (OUT), TLS handshake, Finished (20):
} [16 bytes data]
* TLSv1.2 (IN), TLS handshake, Finished (20):
{ [16 bytes data]
* SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384
* ALPN, server accepted to use http/1.1
* Server certificate:
* subject: OU=Domain Control Validated; CN=*.example.com
* start date: Jun 9 09:24:31 2016 GMT
* expire date: Jun 10 09:24:31 2019 GMT
* subjectAltName: host "example.com" matched cert's "*.example.com"
* issuer: C=BE; O=GlobalSign nv-sa; CN=GlobalSign Domain Validation CA - SHA256 - G2
* SSL certificate verify ok.
} [5 bytes data]
> GET / HTTP/1.1
> Host: example.com
> User-Agent: curl/7.58.0
> Accept: */*
>
{ [5 bytes data]
< HTTP/1.1 302 Found
< Date: Thu, 08 Mar 2018 08:54:23 GMT
< Server: Apache/2.4.29 (Ubuntu)
< Location: https://example.com
< Content-Length: 315
< Content-Type: text/html; charset=iso-8859-1
<
{ [315 bytes data]
* Connection #0 to host example.com left intact
以下两行是我的重点,
* SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384
* ALPN, server accepted to use http/1.1
尽管 http2 可用,但服务器未使用它,但使用了 http1.1。
请帮助我理解这一点并以正确的方式配置 http2。
谢谢!
我在 Internet 上找到了解决方案,我正在更新它以帮助遇到同样问题的人。当我检查 apache 错误日志文件时,我发现了一个类似...
的警告
[http2:warn] [pid 8494] AH10034: The mpm module (prefork.c) is not supported by mod_http2. The mpm determines how things are processed in your server. HTTP/2 has more demands in this regard and the currently selected mpm will just not do. This is an advisory warning. Your server will continue to work, but the HTTP/2 protocol will be inactive.
然后经过一个小时的谷歌搜索,我开始知道这是在apache 上配置HTTP2.0 时prefork 模块的问题。您可以在此 location..
找到有关此特定问题的更多信息以及配置 http2 的详细步骤
如果您不想在配置 http2 时遇到任何麻烦,我希望 this document 一定能帮到您。
我按照这些步骤操作,我的问题就解决了。
我已经为我的虚拟主机成功设置了 http2,但是当我尝试通过 curl 访问 url 时,服务器似乎拒绝通过 http2 连接并接受 http1。谁能解释为什么会这样?以及如何告诉我的服务器首先使用 http2。
下面是我尝试为其配置 http2 的站点的 curl 输出。
* Rebuilt URL to: https://example.com/
* Trying 172.24.112.31...
* TCP_NODELAY set
* Connected to example.com (172.24.112.31) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
* CAfile: /etc/ssl/certs/ca-certificates.crt
CApath: none
} [5 bytes data]
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
} [221 bytes data]
* TLSv1.2 (IN), TLS handshake, Server hello (2):
{ [112 bytes data]
* TLSv1.2 (IN), TLS handshake, Certificate (11):
{ [2426 bytes data]
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
{ [300 bytes data]
* TLSv1.2 (IN), TLS handshake, Server finished (14):
{ [4 bytes data]
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
} [37 bytes data]
* TLSv1.2 (OUT), TLS change cipher, Client hello (1):
} [1 bytes data]
* TLSv1.2 (OUT), TLS handshake, Finished (20):
} [16 bytes data]
* TLSv1.2 (IN), TLS handshake, Finished (20):
{ [16 bytes data]
* SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384
* ALPN, server accepted to use http/1.1
* Server certificate:
* subject: OU=Domain Control Validated; CN=*.example.com
* start date: Jun 9 09:24:31 2016 GMT
* expire date: Jun 10 09:24:31 2019 GMT
* subjectAltName: host "example.com" matched cert's "*.example.com"
* issuer: C=BE; O=GlobalSign nv-sa; CN=GlobalSign Domain Validation CA - SHA256 - G2
* SSL certificate verify ok.
} [5 bytes data]
> GET / HTTP/1.1
> Host: example.com
> User-Agent: curl/7.58.0
> Accept: */*
>
{ [5 bytes data]
< HTTP/1.1 302 Found
< Date: Thu, 08 Mar 2018 08:54:23 GMT
< Server: Apache/2.4.29 (Ubuntu)
< Location: https://example.com
< Content-Length: 315
< Content-Type: text/html; charset=iso-8859-1
<
{ [315 bytes data]
* Connection #0 to host example.com left intact
以下两行是我的重点,
* SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384
* ALPN, server accepted to use http/1.1
尽管 http2 可用,但服务器未使用它,但使用了 http1.1。 请帮助我理解这一点并以正确的方式配置 http2。
谢谢!
我在 Internet 上找到了解决方案,我正在更新它以帮助遇到同样问题的人。当我检查 apache 错误日志文件时,我发现了一个类似...
的警告[http2:warn] [pid 8494] AH10034: The mpm module (prefork.c) is not supported by mod_http2. The mpm determines how things are processed in your server. HTTP/2 has more demands in this regard and the currently selected mpm will just not do. This is an advisory warning. Your server will continue to work, but the HTTP/2 protocol will be inactive.
然后经过一个小时的谷歌搜索,我开始知道这是在apache 上配置HTTP2.0 时prefork 模块的问题。您可以在此 location..
找到有关此特定问题的更多信息以及配置 http2 的详细步骤如果您不想在配置 http2 时遇到任何麻烦,我希望 this document 一定能帮到您。
我按照这些步骤操作,我的问题就解决了。