Go Server HTTP 302 跳转 HTTPS
这篇笔记从Go服务器部署HTTPS后的实际问题切入,作者遇到了HTTP 400错误——当用户直接输入IP地址访问时,浏览器自动补充HTTP协议,与HTTPS服务冲突,导致服务器返回“Client sent an HTTP request to an HTTPS server”。根因在于Go官方没有内置HTTP到HTTPS的重定向功能,而手动修改协议方式不够便捷。 作者最初尝试在Gin中间件中检测TLS报文,但发现多次请求后识别不可靠。后来发现开源库 `hlfhr`,它通过劫持 `net.Conn` 实现自动重定向。具体方案是加载证书后,用 `hlfhr.New` 创建服务器并监听端口,实现访问HTTP时自动302跳转HTTPS。作者还fork项目调整状态码为307,避免POST请求被误转为GET,提升兼容性。 效果上,改造后用户访问HTTP地址会自动跳转至HTTPS,解决了体验痛点。对于Go开发者,这提供了一个轻量级的实现思路。