【问题标题】:Nginx server block that serves http2 without other http and without https服务于 http2 的 Nginx 服务器块,没有其他 http 和 https
【发布时间】:2021-06-15 03:24:21
【问题描述】:

我正在尝试托管一个仅允许用户使用直接 http2 进入网站 http://website.com:1234 的网站,并且不允许任何用户通过 http0.9、http1.0、http1.1 进入或从其中任何一个升级其中。此外,我不希望我的网站能够提供 https。

我尝试使用以下方式进行配置: 服务器{

listen 1234 ssl http2
listen [::]:1234 ssl http2
etc
etc

}

还有 服务器{

listen 1234 http2
listen [::]:1234 http2
etc
etc

}

它不像我想要的那样工作,有人可以帮助我吗?

【问题讨论】:

  • 您可能应该只尝试第二个server 块,并测试$http2 变量的值h2c。见this document
  • @RichardSmith 我该如何测试呢?这一点我其实很陌生。你能指导我吗?所以你的意思是使用这个,对吗?服务器 { 听 1234 http2 听 [::]:1234 http2 等等 }
  • 没有h2c有什么办法吗?因为我试图不从其他 http 请求升级,如我的问题所述。

标签: nginx http2


【解决方案1】:

抱歉,这在技术上是不可能的。

目前没有浏览器支持不加密的 http2,未加密的 http2 连接需要根据规范从 http 1.1 升级

请参阅herehere 了解更多信息

【讨论】:

  • 这不是 100% 准确的。虽然浏览器仅支持通过 HTTPS 的 HTTP/2,但还有其他非浏览器客户端(尽管怀疑您是正确的,并且 OP 很可能在谈论浏览器)。如果您知道服务器在使用 HTTP/2(再次用于非浏览器使用),则未加密的 HTTP/2 连接可以通过先验知识方法直接连接到 HTTP/2:tools.ietf.org/html/rfc7540#section-3.4。看起来该常见问题解答需要稍作修改。
  • 嗨@milknik,是的,正如巴里所说,我正在尝试将未加密的 HTTP/2 连接直接连接到 HTTP/2。使用您发送给我的链接,我有一些理解问题。他们说,“我可以在不实施 HTTP/1.1 的情况下实施 HTTP/2 吗?是的,大部分情况下。”那不是说我能做到吗?
  • 您不想使用浏览器,而且您的非浏览器客户端支持 h2c 和先验知识。如果您想从浏览器中执行此操作,那么不,这是不可能的。
  • @BarryPollard 嗨,所以目前我决定将其保持在最低限度,只在我的服务器块中使用 http2。但我无法在我的谷歌浏览器中查看它,只有在 IE 上我才能做到。但是,它是二进制的。正常吗?
  • 对不起,我不明白你在问什么?你在用 https 吗?
猜你喜欢
  • 1970-01-01
  • 2016-01-21
  • 2019-08-11
  • 2017-06-26
  • 1970-01-01
  • 2020-05-03
  • 2021-01-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多