WebOne 架构深度解析HTTP/1.0 与 HTTP/1.1 双协议代理如何协同工作【免费下载链接】weboneHTTP 1.x proxy that makes old web browsers usable again in the Web 2.0 world.项目地址: https://gitcode.com/gh_mirrors/we/weboneWebOne 是一个 HTTP 1.x 代理服务器专门让 Web 1.0 时代的老旧浏览器重新访问现代 Web 2.0 网站。本文将带你拆解它的核心架构HTTP/1.0 与 HTTP/1.1 双协议代理如何分工协作、一个请求从浏览器到目标服务器要经历的 7 个处理环节以及 HTTPS 隧道是如何被解锁并双向转换的。 一句话认识 WebOne 双协议代理WebOne 本质上是一个适配器一头连接现代互联网HTTPS、UTF-8、JavaScript 框架另一头连接 90 年代风格的客户端HTTP/1.0、CERN 风格请求甚至 Netscape Navigator 3。它默认运行在 8080 端口只需在旧浏览器的代理设置中填入服务器地址老机器就能重新冲浪。 典型痛点老浏览器访问现代 HTTPS 网站时常因加密算法不匹配而直接报错例如下面这个Secure Connection Failed场景️ 整体架构一个抽象基类 两个协议服务器WebOne 的服务器层采用经典的模板方法设计抽象基类 HTTPServer.cs 只定义Working、Start()、Stop()三个契约具体协议由两个子类实现组件文件底层机制协议支持服务器契约HTTPServer.cs抽象基类—服务器 A旧版HttpServer1.csHttpListenerHTTP/1.1服务器 B新版HttpServer2.csTcpListener原始 TCPHTTP 0.9 / 1.0 / 1.1 CONNECT入口调度Program.cs配置项选择—入口程序 Program.cs 在启动时根据配置项UseMsHttpApi决定实例化哪一个服务器默认使用功能更全的 HttpServer2。⚖️ 双协议如何分工HttpServer1 与 HttpServer2服务器 A稳定但挑食的 HTTP/1.1 实现HttpServer1 是 WebOne 0.8.5 ~ 0.15.3 时代的服务器基于 .NET 的HttpListener✅ 非常稳定、快速、专业级兼容❌ 不接受CONNECT方法即无法代理 HTTPS❌ 不接受 CERN 风格请求如浏览器直接发GET ftp://...❌ 强制要求请求带Host:头——而 HTTP/1.0 时代的老浏览器往往没有自 v0.16.0 起它被保留下来仅用于故障排查作者在 HttpServer1.cs 的注释中坦诚列出了这些短板。服务器 B几乎完整的 HTTP 0.9/1.0/1.1 实现HttpServer2 是 v0.16 的新服务器直接监听原始 TCP 端口想怎么解析就怎么解析✅ 完整支持 HTTP 0.9 / 1.0 / 1.1 三种版本✅ 支持CONNECT方法HTTPS 隧道的前提✅ 支持通过浏览器直接GET ftp://地址CERN 代理模式✅ 兼容各种老浏览器的怪异请求头例如 Netscape 的 CONNECT 格式缺陷这就是双协议协同的第一层含义同一个端口上既接待 HTTP/1.1 的现代流量也接待 HTTP/1.0 甚至 HTTP 0.9 的怀旧流量。 请求的一生从 TCP 连接到页面送达无论请求来自哪种协议进入服务器后都会汇入同一条中转流水线。以 HttpServer2 为例接受连接HttpServer2.cs 异步接受 TCP 连接并立即排队等待下一个连接把当前连接交给请求处理器逐字符解析HttpRequestProcessor.cs 从数据流中逐字符读取直到遇到双换行才认定请求头结束——这个朴素的设计天然兼容 HTTP 0.9/1.0/1.1 的格式差异识别请求类型根据请求行与Host头判断是标准代理、本地代理还是 CONNECT 隧道HttpRequestProcessor.cs进入中转核心构建HttpTransit对象启动完整处理流程安全检查IP 黑名单/白名单、代理登录认证、URL 黑名单HttpTransit.cs协议版本镜像响应直接复制请求的协议版本——你发 HTTP/1.0它就用 HTTP/1.0 回HttpTransit.cs。这是双协议协同最关键的一行逻辑取回网页并翻译从现代服务器取回内容后替换字符编码、改写 HTML/JS、按需转换图片最终以老浏览器看得懂的格式写回 HTTPS 隧道如何被解锁当浏览器发送CONNECT example.com:443时HttpTransit.cs 会按四条岔路分发岔路触发条件处理方式直通模式匹配ConnectPassThrough规则只建隧道不窥探内容非 HTTP 解密匹配NonHttpSslDecrypt针对 SMTP/POP3 等服务解密标准 HTTPS目标是 443 端口交给假 HTTPS 服务器其他端口非 443 的 CONNECT按配置放行或解密标准 HTTPS 路径由 HttpSecureServer.cs 完成三件事现场签发一张合法证书用内置 CA 为目标域名即时生成证书HttpSecureServer.cs完成 SSL/TLS 握手与客户端建立加密隧道并把加密套件降级为老浏览器认识的老算法隧道内再跑一遍流水线解出明文 HTTP 后递归调用同一个请求处理器HttpSecureServer.cs——HTTPS 1.1 流量由此被转换为 HTTP 1.0 风格的响应 这套 MITM 机制是 WebOne 能翻译整个现代 Web 的根基也解释了为什么它只适合在隔离的怀旧局域网中使用。 连接复用HTTP/1.1 Keep-Alive 与 HTTP/1.0 一次一断协议差异还体现在连接管理上HTTP/1.1 Keep-Alive处理器完成一次响应后若双方都声明keep-alive就在同一条连接上递归处理下一个请求HttpRequestProcessor.cs避免老浏览器频繁重连HTTP/1.0 语义对识别出的 HTTP/1.0-only 客户端响应会降级为更简单的内容类型HttpTransit.cs并遵循一次一断的短连接习惯️ 实战验证让老浏览器连上双协议代理理解了架构配置就水到渠成。以 Netscape 为例不同浏览器的设置界面大同小异核心都是填HTTP 代理地址 端口配置完成后访问http://proxyhost:8080/即可看到 WebOne 的信息页确认双协议代理已就绪。所有运行参数端口、SSL、黑白名单等都定义在 webone.conf 中由 ConfigFileLoader.cs 加载。 核心源码文件速查表模块文件职责程序入口Program.cs加载配置、初始化 CA 证书、选择并启动服务器服务器契约HTTPServer.cs定义启动/停止/状态三个抽象接口HTTP/1.1 服务器HttpServer1.csHttpListener实现保留用于故障排查双协议服务器HttpServer2.csTcpListener实现支持 0.9/1.0/1.1 与 CONNECT请求解析HttpRequestProcessor.cs逐字符解析原始报文识别请求类型中转流水线HttpTransit.cs黑白名单、认证、协议版本镜像、内容翻译假 HTTPS 服务器HttpSecureServer.cs现场签发证书、SSL 握手、隧道内递归处理全局配置webone.conf端口、SSL、黑白名单等全部运行参数小结WebOne 的双协议架构可以浓缩为三句话一个抽象基类统一生命周期两个服务器类分别守住 HTTP/1.1 与全版本协议两条通道一条中转流水线让所有请求共享认证、安全与翻译逻辑。正是这套协同设计让 1994 年的浏览器也能读懂今天的网页。【免费下载链接】weboneHTTP 1.x proxy that makes old web browsers usable again in the Web 2.0 world.项目地址: https://gitcode.com/gh_mirrors/we/webone创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考