【问题标题】:Securing large static files without hogging ASP.Net threads using IIS使用 IIS 在不占用 ASP.Net 线程的情况下保护大型静态文件
【发布时间】:2012-08-20 16:35:59
【问题描述】:

当我的 ASP.NET 代码正在流式传输一个大文件时,它是否完全束缚了一个线程?也就是说,如果有 8 个人在下载大文件,而我只有 8 个线程可用,会不会再处理请求?

在任何情况下,我都需要找到另一种方法来保护大型静态文件,最好是在用户获得授权后让 IIS 直接为其提供服务,以便让应用程序服务器不必处理 IIS 的问题, Nginx 等可以在不打任何托管代码的情况下做得更好。

如果您的应用程序在其响应中放置“X-Accel-Redirect”标头,我相信 Nginx 允许这样做:http://kovyrin.net/2006/11/01/nginx-x-accel-redirect-php-rails/。 Apache 和 Lighttpd 具有相同的功能。

有什么建议吗?

【问题讨论】:

  • 如果文件在磁盘上,执行 HttpResponse.Redirect(pathtofile, true);
  • 重定向不起作用,因为这需要浏览器直接访问文件。我正在寻找更类似于服务器端 url 重写而不是客户端重定向的东西。

标签: asp.net iis download authorization static-files


【解决方案1】:

返回文件的 URL 是一个合适的解决方案。

您可以通过使用 asp.net 中的标准身份验证提供程序来防止拥有该 URL 的未经授权的用户下载该文件。如果您打开runAllManagedModulesForAllRequests(请参阅http://www.iis.net/configreference/system.webserver/modules),则用户在点击该 URL 时将进行身份验证,如果他们被授权,他们将被允许访问该文件。

在任何一种情况下,下载都不会锁定线程,只会锁定执行。这就是maxConnections 设置的默认设置为4294967295 的原因。 (见http://www.iis.net/configreference/system.applicationhost/sites/site/limits

【讨论】:

    猜你喜欢
    • 2011-02-23
    • 2012-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多