当你创建一个web application的时候,你实际上在IIS里面创建了一个站点。一个IIS站点有bindings,包含单独的IP地址,一个Host Header 和port。IIS通过Bindings来决定HTTP 请求是请求的哪个站点。
当一个用户请求一个网页的时候,比如http://intranet.contoso.com/SitePages/Home.aspx,
客户端发起了一个HTTP请求。客户端通过查询DNS来获取到Host(比如intranet.contoso.com)的IP地址。客户端把host name加到了HTTP请求的数据包的host header字段里。然后客户端把HTTP请求的数据包,发送到目标IP地址(默认端口80,也可以是其他自定义端口)。IIS接到请求之后,分析数据包,并且发现,这个请求是为了Contoso Intranet 站点。
也就是说,可以在SharePoint里面,建多个Web Application, 这些站点可以使用同样的端口(比如80),但是需要有不同的host header。这样这些Web Application之间不会出现端口冲突,IIS会根据host header来判断应该由哪个Web Application来处理客户端发起的请求。
当IIS找到客户端请求的是哪个站点之后,它开启了一系列的操作,最终把结果返回给客户端。首先,IIS查找Web Application的物理路径,也叫做根目录。当你创建一个SharePoint Web Application的时候,你指定了这个路径。比如
C:\inetpub\wwwroot\wss\VirtualDirectories\clients.contoso.com80。
对于传统的APS.NET站点,真正的内容就是存储在这个路径的,但是SharePoint存储在了内容数据库里。 IIS这个时候就处理不了了,但是在web.config文件里,指定了这个站点是SharePoint Web Application,因此IIS把这个请求传递给了SharePoint。
然后,SharePoint解析这个URL,来决定是哪个Site Collection,哪个内容数据库。SharePoint获取这些数据,并返回给IIS,IIS再返回给用户。