解决和根源:Unsolicited response received on idle HTTP channel starting with xxx
环境:golang,使用http client,服务器:iis +aspx.net
动作:head请求或其他
此问题见于各种请求情况。核心是,http在活动期间收到了非预期的信息。
一开始我也很纳-闷,因为下载小文件不出错,大一点的就出错了,而且开始无法找到原因。
但找到原因后就豁然开朗了。
这个消息“Unsolicited response received on idle HTTP channel starting with 。。。”的意思是,客户端已经准备收工了,以为事情已经完了,却收到了服务端-发来的非预期的内容。有这些情况:
1、客户端发起了纯HEAD的请求(Request.RequestType=HEAD),服务端却给你发来了body响应。
一般是因为server端进行了redirect或transfer,在这些转向的过程中丢掉了一些信息,比如我是丢掉了HEAD而用GET取代了,导致服务端发来了body,客户端取得header后,发现还有body,这就出错了。
这个原因应该是大多数人的主要原因。
解决方案是:清理你的请求,中间不要更换requestType,比如get的话始终get,post也一样,尤其要关注HEAD请求,因为server中很容易把这个丢了,因为该信息在aspx.net中不存储在header中,只在request.requestType字段中,而导致使用了默认的get。
比如
Server.TransferRequest(datakey.Substring(5),true,"GET",this.Request.Headers,true);//可支持range,但不能支持HEAD请求,这句是有bug的
Server.TransferRequest(datakey.Substring(5),true, Request.RequestType, this.Request.Headers,true);//可支持range\HEAD请求,这句就完善了
2、响应内容超出了给出的length,这种很难说,很可能也与redirect或自动输出。流有关,你的header里面说的是a个byte,但实际上发送的数据比这个多了。
这个问题的解决方案就是:排除对应的数量错误。
希望这对于golang或http.net开发的人员来说,是个有价值的信息。
解决和根源:Unsolicited response received on idle HTTP channel starting with xxx的更多相关文章
- 解决PEnetwork启动的时候提示"An error occured while starting the "TCP/IP Registry Compatibility" Service (2)!"程序将立即退出的问题
解决PEnetwork启动的时候提示"An error occured while starting the "TCP/IP Registry Compatibility" ...
- 解决:Could not parse response code.Server Reply: SSH-2.0-OpenSSH_5.3
[摘要:办理:org.apache.commons.net.MalformedServerReplyException: Could not parse response code.Server Re ...
- [已解决]报错: Error response from daemon: conflict
报错内容: Error response from daemon: conflict: unable to delete f5b6ef70d79b (must be forced) - image i ...
- 解决报错Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: TLS handshaketimeout
报错: [root@localhost /]# sudo docker pull ubuntuError response from daemon: Get https://registry-1.do ...
- restsharp 组件调用返回 gbk 编码的api,中文乱码解决方法。(restsharp response 中文乱码 gbk)
最近要调一个restful风格的api 用了 一个开源第三方组件,组件还是蛮好用的, 支持直接按参数定义实体类,然后发起请求之前直接 addobject 的方式就把请求参数给添加进去了, 解码的时候可 ...
- Incomplete response received from application
RAILS_ENV=production rake secret 将输出的一大串字码粘贴到rails工程中/config/secrets.yml去,替换掉该文件中的<%= ENV["S ...
- 解决报错Error response from daemon: Get https://10.0.0.110/v2/: dial tcp 10.0.0.110:443: connect: connection refused
修改 #https不需要验证,否则要加上以下配置# 意思就是非安全仓库,加上重启就OK了! vim /lib/systemd/system/docker.service --insecure-regi ...
- 解决:Specifying a namespace in include() without providing an app_name和XXX is not a registered namespace问题
python3 Django 环境下,如果你遇到namespace没有注册以及在根目录下urls.py中的include方法的第二个参数namespace添加之后就出错的问题. 出错问题: 'Spec ...
- 异常解决:non-compatible bean definition of same name and class【com.xxx.xxx.XXX】
昨天同事遇到这样一个问题,意思是spring找到 有相同的实现类名在不同的package目录下. 跟踪他的项目代码并未发现问题. 重新给他的maven项目进行maven install一下. 查看 ...
- 使用SSH连接解决git报错:fatal: unable to access 'https://github.com/xxx/xxx.github.io.git/': Proxy CONNECT aborted
TL;DRs 这个错误的原因和HTTPS的代理配置有关,使用SSH方式连接可以避免这一问题 最近git pull和push的时候总是报错 fatal: unable to access 'https: ...
随机推荐
- linux 查看product_uuid,即主板id,机器识别码,需要root权限
1. 用命令 sudo dmidecode | grep UUID 或者 sudo lshw | grep uuid 2. 直接查看文件描述 sudo cat /sys/class/dmi/id/ ...
- mysql 取出分组后价格最高的数据
如何用mysql 取出分组后价格最高的数据 ? 看到这个问题,就想到了用 max 函数和 group by 函数,先 group by 然后取得 max, 但是这样真的可以吗? 不可以 ! 为什么? ...
- tomcat多主多备
主服务器默认轮询,当主服务器全部挂了,就会访问备机backup,备机也默认轮询
- Vite项目打包配置详解
一:vite构建项目 配置base 1.base配置打包公共路径 打开package.json 做项目时可以不去掉 好了,在以上你构建了vite,并配置了最简单的操作后,你准备配置vite.confi ...
- Django 知识点总结
知识点总结 一.URL: 1.在python 正则表达式中,正则表达式命名组的语法是(?P<name>pattern),其中命名组中的命名就是name,并且pattern 是某些匹配的模式 ...
- js时间转化为几天前,几小时前,几分钟前
在前面一篇文章中,我们学习到了如何获取时间和怎么算出两者之间的时间差 今天看看怎么将时间戳转换为几个月前,几周前,几天前,几分钟前的形式.与上面类似通过JavaScript计算当前时间与定义的时间的对 ...
- redis acl 修改密码
#redis acl 修改密码 acl setuser readwrite on >111111111 ~* &* +@allacl setuser readonly on >11 ...
- javaSE-验证码生成
一.使用Math类的radom() 方法 //生成验证码 String verifcationCode = ""; for (int i = 0; i <= 5; i++) ...
- C++ OnlineJudge
基本输入输出 1.接收多行数据,直到文件末尾 1 #include <iostream> 2 //#include <bits/stdc++.h> 3 #include < ...
- 微信小程序云函数中管理短信验证码的完整SDK工具
微信小程序云开发管理短信验证码并不是一件容易的事情,它不像其他web服务器开发中可以将验证码存放到session或者cookie中,你只能将其存到云开发的数据库中,实现起来非常困难.一个简单的需要短信 ...