什麼是OWIN?
OWIN的英文全稱是Open Web Interface for .NET。
如果僅從名稱上解析,可以得出這樣的資訊:OWIN是針對.NET平台的開放Web接口。
那Web接口是誰和誰之間的接口呢?是Web應用程式與Web伺服器之間的接口,OWIN就是.NET Web應用程式與Web伺服器之間的接口。
為什麼需要這樣一個接口呢?因為.NET Web應用程式是運作于Web伺服器之中的,.NET Web應用程式需要通過Web伺服器接收使用者的請求,并且通過Web伺服器将響應内容發送使用者。如果沒有這樣一個接口,.NET Web應用程式就要依賴于所運作的具體Web伺服器,比如ASP.NET應用程式要依賴于IIS。有了這個接口,ASP.NET應用程式隻需依賴這個抽象接口,不用關心所運作的Web伺服器。
是以,OWIN的作用就是通過引入一組抽象接口,解耦了.NET Web應用程式與Web伺服器,再次展現了接口的重要性。在軟體開發中,每次解耦都是一次很大的進步。
【進一步的了解】
OWIN是對ASP.NET Runtime的抽象。
ASP.NET 5.0是OWIN的一種實作
通過下面幾張圖可以更直覺地了解:

我對Owin了解
OWIN是一個規範和标準,旨在闡述web伺服器和web應用應該如何去解耦,它使得原本不太可能遷移到其他環境的ASP.NET應用變得可能。
在OWIN之前,當我們在寫ASP.NET應用的時候,我們的思想裡是預設将我們的應用綁定到IIS上的,因為我們要依賴System.Web這個程式集。
System.Web這個程式集似乎在ASP的年代就存在着了,它包含的東西未必每個你都需要,但是每個預設每個請求都會使用這個資源,是以就可能造成一些浪費。
要明白的是OWIN本身是一個規範,它沒有什麼dll啊exe之類的,我了解它就是一份文檔而已。
基于Owin的延伸
Katana源于微軟,是微軟為了實作OWIN的規範而作的産品,它就是實實在在的程式集了,我們可以使用它了。現在的Katanna實作了:
Web API
SignalR
目前ASP.NET MVC和Web Forms還是隻能在System.Web中運作,不過長期來看,這部分很會被解耦,被分離出來。ASP.NET在IIS裡的性能開銷多半也是由于System.Web這個解不開根源,不過現在,我們有兩個方式去搭建運作環境:
IIS
自宿主(Self-Host)
如果你想性能好點,你可以采取自宿主的方式;如果你想用到IIS那些為你做好的功能,那就用IIS吧。