Apache-2.4
在 Apache 中為每個瀏覽器使用不同的 HTTP 協議
我正在嘗試將 http/2 用於除 Safari 之外的所有內容,因為我們在將 http/2 與我們方便的任何版本的 Safari 一起使用時會看到一些奇怪的行為。但是,我無法弄清楚如何設置 Apache 以允許它。任何人都可以闡明為什麼以下不起作用?
BrowserMatchNoCase Safari NOHTTP2 # Chrome includes both Safari and Mozilla in its User Agent BrowserMatchNoCase Chrome !NOHTTP2 <IfDefine NOHTTP2> Protocols http/1.1 </IfDefine> <IfDefine !NOHTTP2> Protocols h2 h2c http/1.1 </IfDefine>
目前在
/etc/apache2/mods-enabled/http2.conf
. 我沒有使用IfDefine
or的經驗BrowserMatch
,所以我不確定我是否正確地執行了此操作(鑑於它不起作用,看來我不是)。我測試的每個瀏覽器仍然啟用了上述配置的 http/2 以及我測試過的任何其他瀏覽器。我也嘗試過
SetEnvIfNoCase User-Agent
代替,以及除andBrowserMatch
以外的各種選項,但是在執行 configtest 時,所有這些都會引發“此處不允許使用協議”錯誤。IfDefine``If``Directory
我在 Debian 9.6 上執行 Apache 2.4.25。
我懷疑你不能做你想做的事,因為當你弄清楚客戶端正在使用什麼瀏覽器時,你已經協商了協議並收到了請求;User-Agent 作為請求標頭送出。
只有當您將二進製文件作為額外參數傳遞時,您的第一個
<IfDefine>
塊才會起作用,這會將所有客戶端的協議限制為 HTTP/1.1。因為未設置定義,所以預設為啟用所有協議的第二個塊。見https://httpd.apache.org/docs/2.4/mod/core.html#ifdefinehttpd``-DNOHTTP2