c#抛出异常 服务器提交协议冲突 Section=ResponseStatusLine 求解决

c#抛出异常 服务器提交协议冲突 Section=ResponseStatusLine 求解决,第1张

asp.net 增强了安全性,对一些有危害的http 头进行了判断,比如url中有空格的情况,以帮助网站提高网络攻击的防御能力。如果你的http头中有一些ASP.NET 认为是有危害的信息,则会返回这个错误。

根本原因是微软没有容忍不符合RFC 822中的httpHeader必须以CRLF结束的规定的服务器响应。

解决办法是对web.config (app.config) 配置做一些调整

<?xml version="1.0" encoding="utf-8" ?>

<configuration>

<system.net>

<settings>

<httpWebRequest useUnsafeHeaderParsing= "true " />

</settings>

</system.net>

</configuration>

config里配置一下就行了:

<system.net>

<settings>

<httpWebRequest useUnsafeHeaderParsing="true" />

</settings>

</system.net>

基础连接已经关闭: 该服务器提交了 HTTP 协议冲突

这个通常在我们使用.net http协议组件访问 某些互联网url资源的时候发生。

但是发觉采用winhttp的封装来读取是没有问题的,正常返回的,但有托管的原生组件却去使用COM,总觉得不爽。但是却不知道问题到底出在那里?感觉,肯定同.net的http实现代码有关系,因为同一个url,COM组件的读取是正常的(COM时代已经经过了考验);但是,又不是所有的url出现类似故障,一般是大约一些动态的asp.net页面出现的概率比较大。

近日终于查出来了,微软有相关的KB讨论:

http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=296969&SiteID=1

具体来说,就是在配置文件中加入

<configuration>

。。。。。。

<system.net>

<settings>

<httpWebRequest useUnsafeHeaderParsing="true" />

</settings>

</system.net>

</configuration>

原来是部分url的实现http协议可能会出现并非CRLF的结束部分,这个被实现较为严格的.net http协议组件所捕获,就出现题是错误,而实际上,这个大多数com时代的http协议组件是可以忽略的。为了让.net 的原生组件也忽略,就如上配置,覆盖系统的machine.config缺省设定。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/109845.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-11
下一篇2023-03-11

发表评论

登录后才能评论

评论列表(0条)

    保存