关于http劫持和keep-alive

2024-01-01

i use

resp, err := http.Get("http://example.com/")

得到一个http.Response,我想准确地写入http处理程序,但只有http.ResponseWriter,所以我劫持了它。

...
webConn, webBuf, err := hj.Hijack()
if err != nil {
    // handle error
}
defer webConn.Close()

// Write resp
resp.Write(webBuf)
...

写入原始请求

但是当我劫持时,http连接无法重用(保持活动),所以速度很慢。

怎么解决?

谢谢!对不起我的台球英语。

update 12/9 keepalive keepalive2 keep-alive, It keep two tcp connection, and can reuse.

nokeepalive nokeepalive2 but when i hijack, and conn.Close(), It can't reuse old connection, so it create a new tcp connection when i each refresh.


不要使用劫持,因为一旦劫持,HTTP 服务器库将不会对该连接执行任何其他操作,因此无法重用。

我改变方式,复制标题和正文,看起来像反向代理(http://golang.org/src/pkg/net/http/httputil/reverseproxy.go http://golang.org/src/pkg/net/http/httputil/reverseproxy.go),是有效的。

Example:

func copyHeader(dst, src http.Header) {
    for k, w := range src {
        for _, v := range w {
            dst.Add(k, v)
        }
    }
}

func copyResponse(r *http.Response, w http.ResponseWriter) {
    copyHeader(w.Header(), r.Header)
    w.WriteHeader(r.StatusCode)
    io.Copy(w, r.Body)
}

func handler(w http.ResponseWriter, r *http.Response) {
    resp, err := http.Get("http://www.example.com")
    if err != nil {
        // handle error
    }
    copyResponse(resp, w)
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于http劫持和keep-alive 的相关文章

  • HTTP请求压缩

    一般用例 想象一下一个正在上传大量 JSON 的客户端 内容类型应保留application json因为这描述了实际数据 Accept Encoding 和 Transfer Encoding 似乎是为了告诉服务器应该如何格式化响应 看起
  • 如何在 Go 中表示可选字符串?

    我希望建模一个可以有两种可能形式的值 不存在或字符串 执行此操作的自然方法是Maybe String or Optional
  • 取消用户特定的 goroutine [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个应用程序 网络应用程序 允许用户使用 twitter oauth 登录并提供自动推文删除功能 用户登录到 Web 应用程序后
  • 给定方法值,获取接收者对象

    Go 有没有办法从方法值获取接收者对象 例如有没有这样的MagicFunc这将使以下程序输出字符串my info来自底层 Foo 实例 package main import fmt type Foo struct A string fun
  • 共享来自单独命令/进程的属性

    我提供带有多个命令和子命令的命令行工具 我使用cobra https github com spf13 cobra命令行 我有两个单独的命令首先是前提条件e 给其他人 例如第一个命令是通过创建临时文件夹并验证某些文件来首选环境 第二个命令应
  • org.apache.http 软件包在 API 级别 23 中被删除。替代方案是什么?

    在更新到最新的 android API 级别 23 Marshmallow 后 通过 build gradle 添加以下更改后 所有 org apache http 类都不起作用 android compileSdkVersion 23 b
  • 为什么我的 SQL 占位符没有被替换(使用 Go pq)?

    根据文档 我正在这样做 var thingname string asdf var id int err database QueryRow SELECT id from things where thing thingname Scan
  • 无法通过键获取 Gorilla 会话值

    我无法通过这种方式从会话中获取价值 它是nil session initSession r valWithOutType session Values key 完整代码 package main import fmt github com
  • 按引用或按值扫描功能

    我有以下代码 statement SELECT id from source where mgmt 1 var exists string errUnique dr db QueryRow statement mgmt Scan exist
  • nsq 无法通过连接到 nsqlookupd 来消费消息

    我尝试使用 docker compose 来运行 nsq docker compose yml如下 version 3 services nsqlookupd image nsqio nsq command nsqlookupd ports
  • 使用 testify 模拟接口方法两次,输入和输出不同

    如何在 golang 测试中模拟接口方法两次 例如 type myCache interface Get key string data interface error type service struct cache myCache f
  • 如何在C#中执行Go函数

    有没有办法从 C 执行 Go 函数 例如 对于 Python 我会使用 Ironpython 我知道我可以生成一个进程来执行 Go 脚本 但如果可能的话 我真的不想回退到这样的解决方案 Google 搜索没有显示任何内容 那么有什么方法可以
  • 是否可以修改 $_SESSION 变量?

    恶意用户是否可以将 SESSION 在 php 中 变量设置为他想要的任何值 很大程度上取决于您的代码 有一点非常明显 SESSION username REQUEST username
  • 错误“binary.Write:无效类型”是什么意思?

    下面显示的代码 我创建了一个结构类型并希望将其编码为二进制 但它显示binary Write invalid type main Stu错误 我读过一些类似的代码 但我找不到为什么我的代码不起作用 type Stu struct Name
  • Go 的范围不能超过 (类型接口 {})

    我正处于尝试将我的注意力集中在 Go 上的婴儿阶段 目前 我正在模拟一个 API 请求 该请求返回包含对象数组的 JSON 格式的字符串 我试图找出迭代每个记录并访问每个字段的最合适的方法 最终 每个字段都将写入 Excel 电子表格 但现
  • 有没有办法使用 ASP.NET 在用户离开页面时始终运行某些服务器端代码?

    我想知道当用户离开 ASP NET 中的页面时是否有任何方法可以始终运行一些服务器端代码 页面卸载事件不好 因为如果有人单击链接 则不会调用该事件 理想情况下 即使用户关闭浏览器 我也希望代码能够运行 我怀疑我所问的问题是不可能的 但问一下
  • Golang中如何获得100%的代码覆盖率? [复制]

    这个问题在这里已经有答案了 我无法获得 100 的代码覆盖率 因为我无法在 Golang 中测试 Fatals 我发现了一些问答 包括this one https stackoverflow com questions 30688554 h
  • 使用什么 API 在现有 MFC 应用程序中添加 HTTP 客户端支持?

    我最近接到一项任务 要添加与以下内容交互的能力网络地图服务 http en wikipedia org wiki Web Map Service到现有的 MFC 应用程序 我需要客户端 HTTP API 根据我的研究 领先的候选人似乎是CA
  • Access-Control-Allow-Origin值跨站缓存

    我正在尝试编写一个 nginx 配置来处理 http 和 https 上的两个站点 只要客户端从不访问这两个站点 它似乎就可以工作 但如果它们这样做 就会出现缓存 跨站点问题 Allow cross origin location eot
  • 如何使用 Ruby on Rails 3 检查 HTTP 请求的“Content-Length”字段?

    我正在使用 Ruby on Rails 3 在我的视图文件中我有以下代码 为了避免服务器过载 我会在服务器接收上传文件之前检查上传文件的大小 这是因为 按下表单的提交按钮 服务器会先完整接收文件 然后再检查文件 我知道一个HTTP 请求有标

随机推荐

  • 为什么我直接将数据分配给 MutableState 变量?

    有人告诉我MutableState就像MutableLiveData在科特林中 以及MutableState fit Compose MutableLiveDataenter code here适合 XML 布局 在代码A中 我需要将数据分
  • C 库中的 Valgrind 错误?

    Valgrind 显示大小为 8 的错误的未初始化值 有时 以下条件跳转会出现未初始化值错误 我所做的就是使用 gcc 附带的 stdc 库打印格式化字符串 和内置的 vsnprintf 这是一个名为 format 的方法 它是自定义字符串
  • 如何使用正则表达式来匹配名称?

    我是Python新手 我想编写一个正则表达式来进行一些名称检查 我的输入字符串可以包含 a z A Z 0 9 和 但应以 a z 或 A Z 开头 而不是 0 9 和 我想为此编写一个正则表达式 我尝试过 但没有什么是完美匹配的 一旦输入
  • iOS 应用程序因 cfrunloop_is_calling_out_to_an_observer_callback_function 而崩溃

    运行我的应用程序时 我偶尔会遇到此崩溃 它似乎与我的代码没有任何关系 它是什么以及我如何避免它 线程 0 名称 调度队列 com apple main thread 线程 0 崩溃 0 libsystem kernel dylib 0x00
  • 如何使用 .NET 代码从 Windows Phone Marketplace 获取我的应用程序的深层链接?

    如何以编程方式从 Windows Phone Marketplace 获取应用程序的深层链接 以便可以在代码中使用它 获取 AppDeeplink 非常有用 例如在 ShareStatusTask 和 ShareLinkTask 中 这是可
  • 将 XDocument 绑定到 WPF 并仍然使用 XPath?

    这是一个由 2 部分组成的问题 1 是否可以在不使用 ObjectDataProvider 的情况下将 XDocument 绑定到 WPF 控件 这是我的代码片段 其中 XmlDocument 可以工作 但我无法使用 XDocument X
  • 使用不同中间件的 Compojure 路由

    我目前正在使用 Compojure 以及 Ring 和相关中间件 在 Clojure 中编写 API 我正在尝试根据路线应用不同的身份验证代码 考虑以下代码 defroutes public routes GET public endpoi
  • 地球上所有 MimeType 的列表,映射到文件扩展名? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有列出现有所有 mimeType 的资源 我发现了一些地方的 mimeTypes 少于 1000 个
  • 使用 React hooks 防止 React 重新渲染 D3 图表

    我一直分别使用 React 和 D3 现在有一个项目 我需要对应用程序的绘图功能进行低级别控制 基本上 当用户放大绘图时 我需要能够从数据库中获取更高分辨率的数据 反之亦然 我找到了一些结合使用 D3 和 React 的方法 我想尝试让我的
  • ByRef 参数类型不匹配”错误 VB6

    我是 VB6 和 spread 的新手 我的 VB 项目正在使用 spread 在进行 spread 初始化的表单中 VB 6 会抛出一个编译错误 By Ref Argument Type Mismatch 错误 是否是因为 spread问
  • 在python中查找对某个对象的所有引用

    在 python 中查找对象的所有引用的好方法是什么 我问的原因是看起来我们有 内存泄漏 我们正在从网络浏览器将图像文件上传到服务器 每次执行此操作时 服务器上的内存使用量都会与刚刚上传的文件的大小成比例地增加 该内存永远不会被 pytho
  • C# process.start,如何知道进程是否结束?

    在 C 中 我可以使用以下命令启动一个进程 进程 启动 程序 exe 如何判断程序是否仍在运行 或者是否已关闭 MSDN 系统 诊断 流程 http msdn microsoft com en us library system diagn
  • 在验证 w3c 的 facebook 元标记中没有属性“property”

    我们可以使用meta name fb admins 代替meta property fb admins 用于 w3c 验证 我正在回答这个问题 尽管这是一个老问题 因为我认为这对于将来想要获得这方面信息的人来说是有价值的 当埃文说它不会通过
  • Yii2 - 制作超链接以在语言之间切换

    Hello 在 Yii1 1 中 我可以在 siteController 中执行操作 然后使用 Yii app gt controller gt createUrl actionname array language gt new lang
  • Fedora OpenJDK 设置 JAVA_HOME

    我正在使用 Fedora 实际上是 Pidora 因为我试图在树莓派集群上设置 hadoop 我使用 ansible 在所有节点上安装了 oopenjdk 但是 当我尝试设置 JAVA HOME 环境变量时 我对以下文件夹感到非常困惑 us
  • C 函数名还是函数指针? [复制]

    这个问题在这里已经有答案了 我们来看看这段代码 include
  • 路径相关类型是类型投影吗?

    我现在正在深入阅读Scala 以下是这本书的摘录 所有路径相关类型都是类型投影 路径依赖型foo Bar被重写 作为foo type Bar由编译器 在 Scala 中 所有类型引用都可以编写为针对命名实体的项目 类型 scala Stri
  • React 功能组件:如何使用 componentDidMount() [重复]

    这个问题在这里已经有答案了 我有一个函数 从技术上讲 它是一个 React 函数组件 export default function Daw return lt gt div Hello world div gt 当然 我的普通函数不能有R
  • 如何将用纯 python 动态创建的按钮添加到用 Kivy 语言编写的 kivy 布局中?

    我的问题是 我需要基于可变数量的网格方块创建按钮网格 并将它们放置在网格布局上 并使用屏幕管理器将它们显示在屏幕上 我知道如何使用简单的 for 循环在纯 python 中执行此操作 但是我用 kivy 语言编写了程序的布局 并且我不知道如
  • 关于http劫持和keep-alive

    i use resp err http Get http example com 得到一个http Response 我想准确地写入http处理程序 但只有http ResponseWriter 所以我劫持了它 webConn webBuf