我的問題不是要找出服務器是否支持HTTP/2(他們都這樣做),但如何確保PHP正在使用HTTP/2與正確的cURL設置爲CentOS中最新的PHP版本(由Remi的存儲庫構建)。我自己的回答解決了這方面的一些古怪問題。PHP 7.1:沒有cURL與HTTP/2
我設置我的CentOS 7服務器支持HTTP/2與這一優良嚮導的幫助:Setting up HTTP/2 on your web server
所以我已經得到了最新版本,編譯和安裝他們和所有工作正常。頁面與HTTP/2標題一起提供,完全按照它們應該的方式。
現在我想在我的PHP腳本中使用HTTP/2功能。主要通過以HTTP/2方式進行cURL調用。我發現我需要升級libcurl
並使用特定的HTTP/2支持進行構建和編譯。隨着一些挫折,我得到了它的工作。
所以curl -V
告訴我:
curl 7.55.0-DEV (x86_64-unknown-linux-gnu) libcurl/7.55.0-DEV OpenSSL/1.1.0f zlib/1.2.7 nghttp2/1.23.1
Release-Date: [unreleased]
Protocols: dict file ftp ftps gopher http https imap imaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp
Features: IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP HTTP2 UnixSockets HTTPS-proxy
太好了!
而且phpinfo()
讓我在新安裝的OpenSSL的結合相同的版本(7.55.0-DEV
),它是:
OpenSSL 1.1.0f 25 May 2017
而且Apache的,BTW:
Server version: Apache/2.4.26 (Unix)
Server built: Jul 7 2017 09:47:22
然而,當我用cURL調用寫一個簡單的PHP腳本,CURLOPT_HTTP_VERSION
選項設置爲CURL_HTTP_VERSION_2_0
,如本例中所述:https://stackoverflow.com/a/37146586/1005334,它告訴我se rver沒有HTTP/2支持...
這怎麼可能?
一件事我注意到,即將在phpinfo()
OpenSSL的模塊位仍然提到了我的老版本的OpenSSL(OpenSSL的1.0.1e-FIPS),雖然捲曲模塊中提到的OpenSSL的版本規定的OpenSSL 1.1.0f。
我已經從Remi的倉庫安裝了PHP 7.1(它目前的版本是7.1.7),它是否是針對較舊的OpenSSL版本構建的,因此它不適用於我的新版本?我也在PHP/7中讀取HTTP/2的支持不是很明顯,但我認爲它不應該是一個問題,對吧?
或者是OpenSSL不是問題,我應該看看其他地方,也許編譯PHP從源頭與一些預期的標誌?
[用PHP創建HTTP/2請求](https://stackoverflow.com/q/37140780/1255289) – miken32