http服务器的责任与使用此服务器托管的Web应用程序的责任

时间:2016-02-04 11:53:50

标签: asp.net iis asp.net-core kestrel-http-server

我正在评估ASP.NET Core应用程序的各种托管选项。 在ASP.NET的新编程模型中,您使用一组中间件(混合了较早的IHttpModuleIHttpHandler)来处理请求。

您可以拥有一个中间件,可以负责身份验证,处理静态文件或在发送之前压缩响应(只是为了命名一些)。 这就是混乱。

在责任范围内在服务器和应用之间设置边框的位置?

哪一方应负责压缩响应?使用IIS,它由服务器处理并在web.config中配置。 Kestrel不提供此功能AFAIK,因此您需要在应用程序中实现自定义中间件,以便为您处理此问题。哪一个更合适?

身份验证怎么样? IIS提供身份验证设置(匿名,模拟,表单身份验证)。相反,在ASP.NET Core中,我们还可以编写一个可以为我们处理此问题的应用程序中间件。

好的, SSL 由服务器处理,因为它位于协议层的下方,而app仅在HTTP(S)上运行。

服务器应该承担什么责任?应用程序应该承担什么责任?

2 个答案:

答案 0 :(得分:1)

服务器负责实现基本HTTP协议,管理连接等。它也可以选择提供其他功能(例如windows auth),但我们建议不要使用它,除非它可以提供比中间件实现明显的优势。例如。 Windows身份验证可以在中间件中实现,但由于某些连接管理限制,它会更加困难。压缩可以在中间件中实现,就像在服务器中一样容易。

答案 1 :(得分:1)

正如wikipedia所述:

  

“Web服务器的主要功能是存储,处理和交付   网页给客户“

问题是所有着名的http服务器(nginx,apache,IIS,...)都带有许多模块,可以处理许多不同的任务,包括你在问题中提到的那些(身份验证,压缩,... )。

你添加的模块越多,你的http服务器就越慢。到目前为止,IIS并不知道是最快的http服务器,但是如果你删除所有模块并仅仅用于服务资源,那么它将变得非常快,因为它已经构建为在天!

责任问题与所有类型的软件应用程序相同 想想主要用于存储数据的数据库。像Oracle或SQL Server这样的RDBMS非常擅长。但是一旦他们发布了新版本,他们也会发布一个与存储数据无关的新功能。人们用它! ;-)
人们使用数据库作为搜索引擎的次数是多少?我看到人们用SQL Server发送邮件!但更糟糕的是有些人试图在商店程序中调用webservices; - )

总是很想拥有一个工具来做所有事情,但你需要记住它并不是为各种目的而构建的。我宁愿使用一堆轻量级工具,只有一个单一的责任,而是正确处理它。

现在回到你的问题,我认为这是一种利用中间件的好方法。这样您就可以控制整个管道,并确切地知道您的请求已经完成了什么。中间件也是可测试的!摆脱所有不必要的模块肯定会带你到一个更轻量级的http服务器。

正义的“依赖”答案也是可以接受的。如果你做了一些测试并意识到gzip压缩模块比中间件快10倍,那就去模块吧!不要教条主义!