问题描述
我们有一个在 IIS 10.5 上运行的 ASP.NET WEBAPI 应用程序,我们提供了一个上传文件 API。 因为,我们希望大文件超过 1 GB 左右,所以我们正在执行一些测试分块传输编码。 据观察,IIS 10.5 不接受将传输编码设置为分块的请求。
在 .NET Framework 端,我们确实可以选择使用“无缓冲”输入流来避免缓冲,这样,我们可以避免在接收端缓冲,但这与分块编码不同。
API 消费者应用程序发送具有分块传输编码集的请求,但这些请求失败。虽然可以要求消费者应用程序不要发送此标头,但这可能会在消费者端造成潜在问题,因为所有内容都在客户端缓冲,从而导致内存问题,最终可能会耗尽内存。
根据 HTTP 1.1,发送方和接收方都应支持分块编码。论坛中有一个论点,即分块编码仅适用于“响应”而不适用于“请求”。但在双方都支持这一点似乎是合乎逻辑的,HTTP 1.1 规范似乎在谈论两端,尽管没有明确提及。
例如,Apache HTTP 客户端在文件上传期间也支持分块编码。
有没有办法启用分块编码支持?或者是 IIS 10.5 不支持它的任何原因?非常感谢您对此的任何帮助/想法。
解决方法
IIS 中的 AspEnableChunkedEncoding 可以启用分块编码:
https://docs.microsoft.com/en-us/previous-versions/iis/6.0-sdk/ms526005(v=vs.90)
此 blog 中存在类似问题。