虽然我们可以理解我们可以使用 MaxRequestLength 和 MaxAllowedContentLength(此处)在两个不同级别上为基本相同的事情配置 IIS,但很明显 IIS 在它决定之前实际上接受(等待它被下载)整个请求(可能是数百 MB)它必须被拒绝或过滤掉。
可以说,可以咨询标头以了解请求大小,或者标头是否不准确(长度设置为小于实际请求大小的值) - 一旦超过限制就退出。
如果重要的话 - 我正在研究一个 HttpHandler。
是否可以将 IIS 配置为像这样运行?
虽然我们可以理解我们可以使用 MaxRequestLength 和 MaxAllowedContentLength(此处)在两个不同级别上为基本相同的事情配置 IIS,但很明显 IIS 在它决定之前实际上接受(等待它被下载)整个请求(可能是数百 MB)它必须被拒绝或过滤掉。
可以说,可以咨询标头以了解请求大小,或者标头是否不准确(长度设置为小于实际请求大小的值) - 一旦超过限制就退出。
如果重要的话 - 我正在研究一个 HttpHandler。
是否可以将 IIS 配置为像这样运行?
您要做的是基于标头内容的请求过滤。
一个HttpHandler离 HTTP 栈太远了,不能做这样的事情。在这一步,我确定请求已被下载和映射。
它可以处理HttpModule (Init) 和HttpApplication事件,但在 ASP.NET 应用程序中,请求当然也会在处理之前完全下载。
在 IIS 7 和集成模式下,可以在 IIS 管道中声明 ASP.NET 模块。
这是进行请求过滤的好方法。无论如何,我很确定 IIS 在将请求映射到任何模块/处理程序之前已经下载了它。
您可以使用Request Filtering在请求处理管道中执行此操作。IIS 7.5 带来了Scan headers Fitlering Rules。
我不能肯定你的请求不会被下载,但我认为你不能早点下载。
好吧,至少我试过了。看来这是 IIS 设计无法做到的事情之一。