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