访问接口时,偶尔出现 :服务器提交了协议冲突. 求解答

y8932809 2016-12-26 10:30:38
程序内部访问了外部接口,但是问题出现的很诡异:
比如相同的一个请求,在某一段时间内是都可以访问成功并返回数据的,但是偶尔某段时间就会出现如下错误
System.Net.WebException: 服务器提交了协议冲突. Section=ResponseHeader Detail=“Content-Length”标题值无效
在 System.Net.HttpWebRequest.GetResponse()
网上看的方法,节点也加过了,然而没什么用。

然后用fiddler模拟请求,也是出现同样的情况,抓取到失败的信息是: HTTP/1.1 307 Temporary Redirect
这种情况个人感觉是服务器那里出了问题,请求被发送到了服务器,然后服务器进行了重定向。是这种原因么?
求解答。
...全文
999 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
shoppo0505 2017-01-13
  • 打赏
  • 举报
回复
引用 7 楼 y8932809 的回复:
[quote=引用 6 楼 shoppo0505 的回复:] [quote=引用 5 楼 y8932809 的回复:] [quote=引用 4 楼 shoppo0505 的回复:] [quote=引用 3 楼 y8932809 的回复:] 有人不啊
那就加个if判断和catch程序块,处理返回空或者exception的问题。[/quote] 现在也是这么做的,如果catch到了,那在访问一次,然而这样只是增加了成功的几率,并不能从根本上解决。。[/quote] 我觉得这个没有版本从根本上解决,如果你找到了根本解决方法,我很愿意听听。[/quote] 抱歉,最近忘来了,通过使用writeshark抓包工具抓到了,确实是对方服务器的返回的307,造成这个的原因是我们服务器上的dns写错了,在联通机房使用了电信的dns,造成对方电信的服务器返回了307,把服务器的dns改了之后,不再返回错误。 但是对之前为什么会偶尔返回错误,这个问题感觉还是不是很清楚,(也许是偶尔解析到了电信的服务器?) 但现在可以确定的是,从改完dns之后,确实没有返回307了。 最后十分感谢你的解答[/quote] 共勉。 你这个307错误还好,我有时常常遇到404,500什么的错误,还是不同类型的。没有找到过根本方法。 不过我的程序运行一次,短时间内要请求上千次,和你的还有点不一样。
y8932809 2017-01-12
  • 打赏
  • 举报
回复
引用 6 楼 shoppo0505 的回复:
[quote=引用 5 楼 y8932809 的回复:] [quote=引用 4 楼 shoppo0505 的回复:] [quote=引用 3 楼 y8932809 的回复:] 有人不啊
那就加个if判断和catch程序块,处理返回空或者exception的问题。[/quote] 现在也是这么做的,如果catch到了,那在访问一次,然而这样只是增加了成功的几率,并不能从根本上解决。。[/quote] 我觉得这个没有版本从根本上解决,如果你找到了根本解决方法,我很愿意听听。[/quote] 抱歉,最近忘来了,通过使用writeshark抓包工具抓到了,确实是对方服务器的返回的307,造成这个的原因是我们服务器上的dns写错了,在联通机房使用了电信的dns,造成对方电信的服务器返回了307,把服务器的dns改了之后,不再返回错误。 但是对之前为什么会偶尔返回错误,这个问题感觉还是不是很清楚,(也许是偶尔解析到了电信的服务器?) 但现在可以确定的是,从改完dns之后,确实没有返回307了。 最后十分感谢你的解答
shoppo0505 2016-12-30
  • 打赏
  • 举报
回复
引用 5 楼 y8932809 的回复:
[quote=引用 4 楼 shoppo0505 的回复:] [quote=引用 3 楼 y8932809 的回复:] 有人不啊
那就加个if判断和catch程序块,处理返回空或者exception的问题。[/quote] 现在也是这么做的,如果catch到了,那在访问一次,然而这样只是增加了成功的几率,并不能从根本上解决。。[/quote] 我觉得这个没有版本从根本上解决,如果你找到了根本解决方法,我很愿意听听。
y8932809 2016-12-28
  • 打赏
  • 举报
回复
引用 4 楼 shoppo0505 的回复:
[quote=引用 3 楼 y8932809 的回复:] 有人不啊
那就加个if判断和catch程序块,处理返回空或者exception的问题。[/quote] 现在也是这么做的,如果catch到了,那在访问一次,然而这样只是增加了成功的几率,并不能从根本上解决。。
shoppo0505 2016-12-28
  • 打赏
  • 举报
回复
引用 3 楼 y8932809 的回复:
有人不啊
那就加个if判断和catch程序块,处理返回空或者exception的问题。
y8932809 2016-12-27
  • 打赏
  • 举报
回复
有人不啊
y8932809 2016-12-27
  • 打赏
  • 举报
回复
引用 1 楼 shoppo0505 的回复:
这种情况,就我知道有两种可能性: 1. 单位时间内同一个IP地址访问次数太多,被限制了。 2. 数据库不能及时处理访问,导致timeout 你到最后,sleep一下进程,看看有没有帮助。
因为接口是第三方公司的,所以不针对他们那里是什么情况,但是我们每天访问的次数不会超过100次, 至于第二点,我问过第三方的技术人员,他们那里连请求都没收到。 会不会是防火墙方面的原因,但是又为什么时好时坏,好奇怪。
shoppo0505 2016-12-26
  • 打赏
  • 举报
回复
这种情况,就我知道有两种可能性: 1. 单位时间内同一个IP地址访问次数太多,被限制了。 2. 数据库不能及时处理访问,导致timeout 你到最后,sleep一下进程,看看有没有帮助。

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧