无论我尝试什么,我都无法让我的网站通过 http/2 提供文件(例如图像、js 等),它只是继续通过 http/1 提供服务。

我尝试过的:

  1. 使用 IIS Crypto 我将其设置为此(甚至禁用 tls1.0 和 tls1.1):

  2. 通过 Internet Explorer 设置取消选中 tls1.0 和 tls1.1 支持:

  3. 通过 web.config 强制使用 https:

    <!-- Redirect HTTP to HTTPS on www -->
    <rule name="Force HTTPS on www" stopProcessing="true">
      <match url=".*" />
      <conditions>
        <add input="{HTTPS}" pattern="off" ignoreCase="true" />
        <add input="{HTTP_HOST}" pattern="^www\.example\.com$" />
      </conditions>
      <action type="Redirect" url="https://{HTTP_HOST}/{R:0}" redirectType="Permanent" />
    </rule>
    
  4. 授予 IIS_IUSRS 组对根目录的读取权限

  5. 为我的网站启用匿名身份验证

  6. 我的网站有 https 绑定:未选中“禁用 HTTP/2”,选中“需要服务器名称指示”,绑定到端口 443,IP 地址设置为“全部未分配”

更新 1

  1. 尝试过h21:

    h2i

    正在连接到


    已连接到 123.123.123.123:443


    协商协议“h2”


    正在发送:[]


    h2i> ←[5D←[K[FrameHeader SETTINGS len=18]


    h2i> ←[5D←[K [MAX_CONCURRENT_STREAMS = 100]


    h2i> ←[5D←[K [UNKNOWN_SETTING_16 = 2]


    h2i> ←[5D←[K [INITIAL_WINDOW_SIZE = 1048576]


    h2i> ←[5D←[K[FrameHeader WINDOW_UPDATE len=4]


    h2i> ←[5D←[K Window-Increment = 983041


    h2i> ←[5D←[K[FrameHeader SETTINGS flags=ACK len=0]


    h2i>

  2. 我的服务器上未安装 IIS 应用程序请求路由

  3. 我通过 SSL Labs 验证了 SSL/TLS 设置和证书与 HTTP/2 的兼容性。它显示“TLS 1.2 > h2”,现代浏览器显示“TLS 1.2”。只有旧浏览器才会显示“TLS 1.2 > http/1.1”

  4. 我没有使用任何 CDN 或反向代理

  5. 我的 applicationhost.config 是这样的:

<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files">
    <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" />
    <staticTypes>
        <add mimeType="text/*" enabled="true" />
        <add mimeType="message/*" enabled="true" />
        <add mimeType="application/javascript" enabled="true" />
        <add mimeType="application/atom+xml" enabled="true" />
        <add mimeType="application/xaml+xml" enabled="true" />
        <add mimeType="image/svg+xml" enabled="true" />
    </staticTypes>
    <dynamicTypes>
        <add mimeType="text/*" enabled="true" />
        <add mimeType="message/*" enabled="true" />
        <add mimeType="application/x-javascript" enabled="true" />
        <add mimeType="application/javascript" enabled="true" />
    </dynamicTypes>
</httpCompression>
  1. 我的 web.config 如下所示:
<staticContent>
  <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="365.00:00:00" /> <!-- 365 days -->     
</staticContent>
  1. 我的和 example.com 在 IIS 中正确绑定
  2. “Get-ItemProperty -Path “HKLM:\System\CurrentControlSet\Services\HTTP\Parameters” -Name Http2Enabled”表示Http2Enabled设置为1
  3. 我尝试curl了其中一个出现问题的文件:`-I –http2
HTTP/1.1 200 OK
Cache-Control: max-age=31536000
Content-Length: 44124
Content-Type: application/javascript
Last-Modified: Tue, 24 Sep 2024 18:29:47 GMT
Accept-Ranges: bytes
ETag: "5ec25bcafedb1:0"
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Content-Type
Strict-Transport-Security: max-age=63072000; includeSubDomains
Date: Sun, 29 Sep 2024 19:52:10 GMT

3

  • 2
    HTTP/2 自 Windows Server 2016 以来就一直是一项功能,因此多年来大量用户一直在使用 HTTP/2。如果在某些情况下您发现未使用 HTTP/2,则需要使用 h2i、


    – 

  • 谢谢,已添加更新 1


    – 

  • h2i 的输出看起来不错。您可能想使用curl -vso /dev/null --http2 https://www.example.com/js/_myfuncs.min.js?v=1please 运行 curl。Cloudflare 在那篇文章中明确说明了这是正确的命令。


    – 

0