如何使用 Server.TLSNextProto 禁用 HTTP/2

2023-12-25

我有一个处理 https 请求的 Go 服务器:

package main
import (
        "fmt"
        "net/http"
        "log"
)
const (
        port       = "5966"
        cert       = "/tmp/cert.pem"
        key        = "/tmp/key.pem"
)
func main() {

        listen_at := ":" + port
        fmt.Println("Listening at", listen_at)
        go http.HandleFunc("/job_handler/", job_handler)
        log.Fatal(http.ListenAndServeTLS(listen_at, cert, key, nil))
}
func job_handler(w http.ResponseWriter, r *http.Request) {
       // do somework
}

事实证明,在 https 模式下,Go 对 HTTP/2 协议有透明的支持。我们有一些客户端在 HTTP/2 中行为明显错误,因此我们需要在服务器端禁用 HTTP/2。

不幸的是,我不能使用 ENV 变量GODEBUG=http2server=0禁用 HTTP/2。剩下的就是Server.TLSNextProto据记录here https://go.googlesource.com/go/+/master/src/net/http/doc.go?autodive=0%2F%2F#81.

我该如何使用Server.TLSNextProto在我的服务器代码上面禁用 https/2?


禁用 HTTP/2 的最简单设置是

package main

import (
    "log"
    "net/http"
    "crypto/tls"
)

func main() {

    m := http.NewServeMux()

    srv := &http.Server{
        Handler:      m,
        Addr:         "127.0.0.1:8080",
        TLSNextProto: make(map[string]func(*http.Server, *tls.Conn, http.Handler)),
    }

    log.Fatal(srv.ListenAndServe())

}

您可以通过以下方式验证支持



curl -v --http2-prior-knowledge http://localhost:8080
  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Server.TLSNextProto 禁用 HTTP/2 的相关文章

随机推荐

  • 使用 gcloud init 时遇到问题

    在 gcloud 上看到一个甜蜜的视频 想尝试一下 但一开始就遇到了阻碍 我完成了设置 下载了工具 运行了 gcloud auth login 一切顺利 尝试启动一个项目并出现错误 我不知道如何修复 gcloud init my aweso
  • Dojo 请求错误时访问 http 正文

    我的网络服务将有关发生的错误的详细信息放在 http 正文中 我如何在 dojo 请求中访问此详细信息 例如 http 错误如下所示 HTTP 1 1 500 Internal Server Error Transfer encoding
  • 从网页运行 bash 文件

    好的 我有一个 bash 文件 可以在 Linux 服务器上执行各种操作 我需要将 7 8 个变量传递给 bash 文件 这些变量将由用户在一个简单的网页上设置 只是想知道这是否可能 或者我是否需要通过其他语言编写 bash 文件调用脚本
  • 如何使用 Flash (AS3) 从远程域调用 Flex SWF?

    我有一个 Flex swf 托管在http www a com a swf http www a com a swf 我在另一个域上有一个尝试加载 SWF 的 Flash 代码 loader new Loader var req URLRe
  • 如何将值传递给部分标签助手? (ASP.NET 核心)

    我正在尝试在表单内渲染局部视图 我需要使用循环的值 当然 1 因为它从 0 开始 作为我的局部视图中的值之一 有什么想法可以让这项工作工作 我尝试使用 ViewData 或 ViewBag 执行此操作 但要么这是错误的方法 要么是我实施错误
  • Python正则表达式字符串匹配?

    我在尝试将 javascript 正则表达式的经验转移到 Python 上遇到了很大的困难 我只是想让这个工作 print re match e test 但它打印无 如果我做 print re match e est 它匹配 默认情况下它
  • 使用线型和组美学的ggplot错误

    我正在尝试根据以下数据绘制绘图 dt lt data frame ValuationDate seq Date as Date 2014 1 1 as Date 2014 7 1 by month Adjuster factor c Bob
  • 如何在 MS Access 中使用 C# 获取所有表名和列名?

    如何用C 获取Access 2007中所有表的名称和列表的名称 我想将表的名称绑定到组合框 将列名称绑定到列表框 这个简单的方法将为您返回一个包含所有列名称的数据表 void Main using OleDbConnection con n
  • 如何将图像直接从flask服务器发送到html?

    我是 Flask 的新手 我正在尝试制作一个应用程序 这样图像是由 html 和 js 从网络摄像头拍摄的 然后通过 ajax 请求发送到服务器 我得到了这部分 然后对图像进行一些处理 并且必须将其发送回前端 我知道如何在烧瓶中正常发送数据
  • 为什么节点需要缓存被填满并泄漏

    我正在对使用 Babel 转译的环回 API 进行压力测试 然而 在这些较长的 冒烟 测试中 我们看到堆分析中的 require 缓存变得相当大 高达 1GB 并且没有获得 GCd 我知道 require 缓存在最后一个引用被删除之前不会进
  • 为什么 RESTful api 中通常不使用 RSA 签名?

    我开发了一个简单的应用程序 不使用 至少在开始时 任何第三方授权 我想创建一个供 iOS Android 任何客户端使用的 RESTful api 因此我阅读了很多有关 RESTful API 实现的信息 然而 实现它们的通常方法包括发送某
  • 无法运行黄瓜测试 - java.lang.NoSuchMethodError: cucumber.runtime.Runtime.

    我尝试使用 Stackoverlow 解决方案多次运行 Cucumber 为其他人解决了这个问题 这对我不起作用 我运行 runnerfile 的堆栈跟踪 java lang NoSuchMethodError cucumber runti
  • 领域错误:属性需要定义所包含类型的协议

    我有以下型号并且正在使用Realm interface GUIRoutineModel GUIModel GUIModel is a subclass of RLMObject property nonatomic retain NSStr
  • 如何获取要发布到 Gravity Forms 的 html/css 表单?

    我有一个 Photoshop psd 到 WordPress 登陆页面转换项目 我首先将其转换为基本的 html css 页面 其中包括非功能性但样式正确的表单 由于需要将用户条目发布到 WordPress 中的重力形式插件 项目范围扩大了
  • 将因子得分添加到原始数据集

    我进行了因子分析并生成了 5 个因子 现在 我想在原始数据集中添加这些因素以运行回归 并使用自变量保留这些因素 有人可以告诉我该怎么做吗 我用于因子分析的代码如下 result 1 lt subset result select c 17
  • adb 无法识别 Android 设备

    我的 Android 三星 Galaxy Tab 7 遇到了一个大问题 每当我尝试将其连接到我的计算机时 设备的名称不是在我的 adb 设备中正常显示 而是 状态为在线或设备 我真的不知道问题是什么 任何帮助将不胜感激 如果您需要更多信息
  • 带有放大弹出回调的无限滚动

    我正在使用无限滚动和放大弹出窗口 弹出窗口适用于 第 1 页 的内容 但此后会失败 我尝试在InfiniteScroll 调用中使用MagnificPopup 的回调 grid infiniteScroll path pagination
  • Metal 文件作为 iOS 框架的一部分

    我正在尝试创建一个与 METAL Api iOS 配合使用的框架 我对这个平台还很陌生 我想知道如何构建框架来使用 metal 文件 我正在构建一个静态库 而不是动态库 它们应该是 a 文件的一部分 还是作为框架包中的资源文件 或者还有其他
  • 将 JSON 反序列化为现有对象 (Java)

    我想知道如何使用 Jackson JSON 库将 JSON 反序列化为现有对象 我试图找到如何做到这一点 但它似乎只能获取一个类并实例化它本身 或者如果不可能 我想知道是否有任何 Java JSON 反序列化库可以做到这一点 这似乎是 C
  • 如何使用 Server.TLSNextProto 禁用 HTTP/2

    我有一个处理 https 请求的 Go 服务器 package main import fmt net http log const port 5966 cert tmp cert pem key tmp key pem func main