标头传输编码:分块并请求为空
Posted
技术标签:
【中文标题】标头传输编码:分块并请求为空【英文标题】:Header Transfer Encoding:Chunked and request empty 【发布时间】:2021-01-14 17:23:47 【问题描述】:这是一个基于 .net framework 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 网站上遇到过这个问题并得到解决?
【问题讨论】:
我认为您的问题过于广泛。有必要弄清楚是由IIS或浏览器引起的问题。 1)那么有没有简单的方法来重现这个问题?还请提供更多示例代码和详细步骤。 2) 您使用的是哪个版本的 Edge 和 Chrome? 3)控制台中是否有任何警告或错误? 4)您期望哪种格式的 saml 响应?我检查了有关Transfer-Encoding:chunked 和Content-Length 的文档。两者不能同时存在。 5) 您可以在IIS上查看日志,查看请求和URL是否正确。 6) 检查事件查看器以查看是否记录了任何错误消息。 我可以使用 ashx 解决这个问题。我将相同的代码放入 ashx 文件中,它开始工作。有谁知道为什么 aspx 和 ashx 的工作方式不同。 【参考方案1】:一般因为aspx中增加了控制功能,所以重点是处理请求的完整生命周期处理和页面的渲染。
ashx虽然专注于请求处理,但它只有一个ProcessRequest方法,所以更多用于处理ajax调用。
在SAML SSO 中,我注意到 SAML SSO 的工作原理是将用户的身份从一个地方(身份提供者)转移到另一个地方(服务提供者)。这是通过交换数字签名的 XML 文档来完成的。
ashx中有一个Generic Handler,用于在不创建html内容的情况下执行特定任务,在处理XML内容时比aspx有优势。
【讨论】:
以上是关于标头传输编码:分块并请求为空的主要内容,如果未能解决你的问题,请参考以下文章