首页 > 解决方案 > 标头传输编码:分块并请求为空

问题描述

这是一个基于 .net 框架 4.6 的基于 Webforms 的 asp.net 应用程序。在通过 SAML 执行 IdP 发起的 SSO 时,我们遇到了一些用户出现间歇性登录问题的问题。原因是在我们的侧应用程序上进行登录尝试时,请求正文中没有 SAML 响应(IdP 将 saml 响应发布到给定的 url)。

因此,我们使用 SAML 消息解码器扩展进行故障排除,发现 SAML 响应实际上是可用的,但它没有到达我们的应用程序请求对象。所以我们试图通过以下方式转储请求中的所有内容;

if (!Page.IsPostBack)

{

using (StreamWriter sw = new StreamWriter(pathxx))

{

using (Stream receiveStream = Request.InputStream)

{

using (StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8))

{

xxx += readStream.ReadToEnd();

}

}

sw.WriteLine(xxx);

}

 

}

这证实了即使 SAML 消息解码器显示 SAML 响应,SAML 响应也没有到达应用程序。所以基本上我们的合作伙伴方面是清楚的。他们正在发送我们需要的东西。

进一步挖掘表明,只要我们没有得到 SAML 响应,响应标头就会有 Transfer Encoding:Chunked 并且没有 Content-Length。这发生在 Chrome 和 Edge 中。Firefox 这不是问题。

有很多相关问题,但我找不到可靠的技术答案为什么会发生这种情况,无论这是浏览器还是 Web 服务器的故障(我们在 IIS 8.5 和 IIS 10 上)。有没有人在 ASP.Net 网站上遇到过这个问题并得到解决?

标签: asp.netiis-8

解决方案


一般因为在aspx中增加了控制功能,所以重点处理请求的全生命周期处理和页面的渲染。

而ashx专注于请求处理,但它只有一个ProcessRequest方法,所以更多用于处理ajax调用。

SAML SSO中,我注意到 SAML SSO 的工作原理是将用户的身份从一个地方(身份提供者)转移到另一个地方(服务提供者)。这是通过交换数字签名的 XML 文档来完成的。

ashx中有一个Generic Handler,用于在不创建HTML内容的情况下执行特定的任务,在处理XML内容时比aspx有优势。


推荐阅读