Go http pkg 提供了一个Hijacker接口,谁能告诉我什么时候应该使用它。
我检查了评论,在劫持调用让调用者接管连接之后,HTTP 服务器库不会对连接做任何其他事情。
我理解它,因为它用于在一个端口内同时支持 http 请求和通用 tcp 交互。这样对吗?有没有其他好处。
这意味着您接管了 TCP 连接的控制权。TCP 是通用传输协议,而 HTTP 是 TCP 之上的应用程序协议。OSI 七层模型将 TCP 描述为第 4 层,HTTP 描述为第 7 层。
如果您需要实现不同的应用程序协议,这是劫持的一个用例。
或者,如果您需要使用 HTTP 做一些专门的事情,比如阻止保持连接,这是另一个用例。
另一个 Web 应用程序协议的示例是 Google 的SPDY。这也是您可能劫持现有 HTTP 连接而不是直接创建 TCP 连接的一个很好的理由。对于 SPDY,浏览器首先会发出一个包含“accept”标头的 HTTP 请求,表明它也能够理解 SPDY。所以现在你可以劫持连接并实现 SPDY 而不是 HTTP。