全站HTTPS就是指整个网站的全部页面,全部资源所有使用HTTPS连接。
当用户的某个请求是明文的HTTP时,应该经过HTTP状态码301永久重定向到对应的HTTPS连接。web
为了实现全站HTTPS,能够从下面两种方法中选取一种。服务器
在Global.asax.cs
添加以下代码app
#if !DEBUG GlobalFilters.Filters.Add(new RequireHttpsAttribute()); #endif
这是配置了ASP.NET的程序,能够处理全部的通过ASP.NET处理的请求;可是对于存放在Web服务器上的其余资源文件(即不通过ASP.NET的程序的处理)无效。
若是有此需求,应该告知IIS服务器不要私自回复用户请求,要求全部请求都必须由ASP.NET程序执行。
此时,在Web.config
下增长下面的内容,注意是根目录的Web.config而不是Views文件夹的Web.config测试
<system.webServer> <modules runAllManagedModulesForAllRequests="true"/> <system.webServer>
[QIN.WARNING] 全部的请求都会发送给ASP.NET处理,此时应确保程序有能力处理原来属于IIS负责的那部份内容,好比图片。网站
插一句题外话,下个版本的ASP.NET听说要取消掉Web.config。
在IIS 7.0+的版本上,能够使用URL Rename来完成。Url Rename是指当IIS接收到某个请求后,先根据设定的规则进行更改请求地址后,在发送给网站程序。经测试本方法在Azure App Service (原名 Azure Websites)是能够使用的。
在Web.config的configuration
节点下,找到或添加system.webServer
节点,并在此节点下添加:ui
<rewrite> <rules> <!-- clear 会清除掉已有的rule,若是添加过别的rule,请注意确认--> <clear/> <rule name="Force HTTPS" enabled="true"> <match url="(.*)" ignoreCase="false" /> <conditions> <add input="{HTTPS}" pattern="off" /> </conditions> <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" appendQueryString="true" redirectType="Permanent" /> </rule> </rules> </rewrite>
这样就算轻松搞定了,可是在开发时,咱们不但愿要求HTTPS,这时能够经过只修改Release的Web.config来解决。
首先,不要修改Web.config
,而是找到Web.Release.config
(VS点开Web.config的小箭头)。
在configuration
节点下添加以下内容:url
<system.webServer> <rewrite xdt:Transform="Insert"> <rules> <!-- clear 会清除掉已有的rule,若是添加过别的rule,请注意确认--> <clear/> <rule name="Force HTTPS" enabled="true"> <match url="(.*)" ignoreCase="false" /> <conditions> <add input="{HTTPS}" pattern="off" /> </conditions> <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" appendQueryString="true" redirectType="Permanent" /> </rule> </rules> </rewrite> </system.webServer>
这个如刚才的区别仅仅在于<rewrite xdt:Transform="Insert">
,关于如何整合这些内容,请参阅用于 Web 应用程序项目部署的 Web.config 转换语法。code