什么是全站HTTPS

全站HTTPS就是指整个网站的所有页面,所有资源全部使用HTTPS链接。

当用户的某个请求是明文的HTTP时,应该通过HTTP状态码301永久重定向到对应的HTTPS链接。

为了实现全站HTTPS,可以从下面两种方法中选取一种。

修改Global.asax.cs

Global.asax.cs添加如下代码

#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负责的那部分内容,比如图片。

修改Web.config部署全站HTTPS

插一句题外话,下个版本的ASP.NET据说要取消掉Web.config。

在IIS 7.0+的版本上,可以使用URL Rename来完成。Url Rename是指当IIS接收到某个请求后,先根据设定的规则进行更改请求地址后,在发送给网站程序。经测试本方法在Azure App Service (原名 Azure Websites)是可以使用的。

在Web.config的configuration节点下,找到或添加system.webServer节点,并在此节点下添加:

    <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>

仅修改Release的Web.config

这样就算轻松搞定了,但是在开发时,我们不希望要求HTTPS,这时可以通过只修改Release的Web.config来解决。

首先,不要修改Web.config,而是找到Web.Release.config(VS点开Web.config的小箭头)。

configuration节点下添加如下内容:

  <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 转换语法

最新文章

  1. 关于 Direct2D
  2. 将Xml或Json生成类的最简单方式
  3. VMware虚拟机中设置端口映射(转载)
  4. ORACLE AWR 和 ASH
  5. 1043. Is It a Binary Search Tree (25)
  6. 数据库连接池c3p0和dbcp
  7. 如何签名apk,并让baidu地图正常显示
  8. java 代码第一天练习
  9. @Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction
  10. MySQL分区技术 (一)
  11. [Q]pdfFactory打印机内存不能为read的问题
  12. static 控件颜色修改
  13. android利用adb安装应用程序出现“more than one device and emulator wait for device ”
  14. Xcode中的变量模板(variable template)的用法
  15. ASP.NET Aries 高级开发教程:主题样式及多语言(标签化控制)
  16. Jquery 对DOM 的操作
  17. Git最牛最全详解
  18. 小白的CTF学习之路4——内存
  19. js 刷新
  20. 转: 关于linux用户时间与系统时间的说明

热门文章

  1. 9.Mybatis一级缓存和二级缓存
  2. C#连接Sql Serve数据库及增,删,改操作
  3. 全面的Seo面试题
  4. 汉化PLSQL怎么改变字体的大小及关键字颜色
  5. Unable to require openssl, install OpenSSL and rebuild ruby (preferred) or use non-HTTPS sources解决
  6. Tomcat 7.x热部署
  7. PTA Iterative Mergesort
  8. NPOI 2.0版本的使用
  9. UDP异步通信
  10. leveldb 学习笔记之log结构与存取流程