HTTP協議最初經過TCP傳輸,後爲了傳輸安全,加入了SSL/TLS做爲中間層,稱爲HTTPS(HTTP over SSL)。當在瀏覽器中輸入一個域名訪問時,瀏覽器默認會經過HTTP協議訪問服務器,服務端能夠返回301以跳轉到HTTPS,此後全部數據傳輸經過HTTPS傳輸。然而,中間人攻擊者可能會攻擊攔截初始的http請求,從而控制用戶後續的回話。html
HTTP Strict Transport Security,即HSTS協議提供了一個機制,讓服務端能夠主動告知瀏覽器,之後的請求所有嚴格地經過HTTPS進行。web
服務端向瀏覽器發送響應時,能夠在響應頭部中添加Strict-Transport-Security,告知瀏覽器開啓HSTS。chrome
如響應頭部中有Strict-Transport-Security: max-age=86400
表示爲當前域名啓用HSTS,過時時間爲1天。瀏覽器
如響應頭部中有Strict-Transport-Security: max-age=259200; includeSubDomains
表示爲當前域名和全部的子域名啓用HSTS,過時時間爲30天。安全
Tips服務器
Strict-Transport-Security: max-age=0
)瀏覽器將關閉此域名的HSTS設置對於開啓了HSTS的域名,瀏覽器將強制採用HTTPS。dom
在瀏覽器中訪問域名時,若是域名開啓了HSTS,瀏覽器將發生內部跳轉,直接跳轉到HTTPS進行訪問。即便用戶手動輸入http://domainname訪問,仍會發生強制跳轉。google
網頁中的資源,若是其URL的域名啓用了HSTS,瀏覽器請求此資源時將自動跳轉的HTTPS。 如網頁中有連接<img src="http://qlee.in/static/logo.img>
,並且qlee.in開啓了HSTS,瀏覽器將自動到https://qlee.in/static/logo.img請求相應的資源。firefox
HTTP默認採用80端口,HTTPS默認採用443端口。當瀏覽器由於HSTS執行內部跳轉時code
HSTS中的Strict
不僅是強制跳轉到HTTPS,也包含了對HTTPS鏈接創建的處理。開啓HSTS後,一旦有警告或者錯誤,瀏覽器將直接關閉HTTPS鏈接。包括如下幾種
服務端能夠經過響應的添加頭部Strict-Transport-Security: max-age=0
或者Strict-Transport-Security: max-age=0; includeSubDomains
來告知瀏覽器關閉域名的HSTS
對於chrome瀏覽器,地址欄中輸入chrome://net-internals/#hsts
進入HSTS設置頁面,能夠查詢、刪除指定域名的HSTS設置,也能夠手動爲域名開啓HSTS。
對於chrome和firefox瀏覽器,能夠經過刪除域名的歷史記錄來清除域名的HSTS設置。
google維護了一個稱爲「HSTS preload list」的站點域名和子域名列表,主流的web瀏覽器(Chrome, Firefox, Opera, Safari, IE 11 and Edge) 都採用了該域名列表,對列表中的域名強制開啓HSTS。域名的全部者能夠經過https://hstspreload.org/提交其域名。