2017-08-25 334 views
0

我有一個網站(userbob.com),通常以https的形式提供所有頁面。但是,我試圖讓一個子目錄(userbob.com/tools/)始終以http的形式提供內容。目前,似乎Chrome的HSTS功能(我不明白它是如何工作的)強制我的網站通過https加載頁面。我可以轉到chrome:// net-internals /#hsts並從Chrome的HSTS集中刪除我的域,並且下一個查詢將按我的意願工作,而無需重定向到https版本。但是,如果我嘗試第二次加載該頁面,則會再次重新導向。我可以使用它的唯一方法是如果我在每次請求後都轉到chrome:// net-internals /#hsts並從Chrome的HSTS集中刪除我的域名。如何讓瀏覽器知道我希望我的所有來自userbob.com/tools/的頁面都以http的形式加載?我的網站使用apache/tomcat網絡服務器。防止http頁面重定向到https頁面

(僅供參考,我希望工具目錄中的頁面通過http而不是https服務頁面的原因是因爲它們中的一些是用於iframe http頁面的。如果我嘗試從https頁面iframe http頁面我最終得到混合內容錯誤。)

回答

1

HTTP嚴格傳輸安全性(或HSTS)是您的網站可以發送給瀏覽器的設置,其中指出「我只想在我的網站上使用HTTPS - 如果有人試圖訪問HTTP鏈接,請自動將其升級到HTTPS你發送請求「。它基本上不會允許您無意或故意發送任何HTTP流量。

這是一項安全功能。 HTTP流量可被攔截,讀取,更改並重定向到其他域。僅HTTPS的網站應該將HTTP流量重定向到HTTPS,但如果任何請求最初仍通過HTTP發送,則存在各種安全問題/攻擊,因此HSTS會阻止此操作。

HSTS的工作方式是您的網站在您的HTTPS請求上發送一個HTTP標頭Strict-Transport-Security,其值爲例如max-age=31536000; includeSubDomains。在這個例子中,瀏覽器緩存這個並且激活HSTS 31536000秒(1年)。您可以在瀏覽器Web開發人員工具中或使用類似https://securityheaders.io的網站查看此HTTP標頭。通過使用chrome://net-internals/#hsts站點,您可以清除該緩存並再次允許HTTP通信。但是,一旦通過HTTPS訪問網站,它將再次發送標題,瀏覽器將恢復爲僅HTTPS。

因此,要永久刪除此設置,您需要停止發送該標題Strict-Transport-Security標題。在Apache/Tomcat服務器中找到並關閉它。或者更好的做法是先將其更改爲max-age=0; includeSubDomains(它告訴瀏覽器在0秒後清除緩存,並在不訪問chrome://net-internals/#hsts的情況下將其關閉,只要您通過HTTPS訪問該站點以拾取此標題,並且然後完全以後刪除頁眉。

一旦你關閉HSTS可以恢復到對用標準重定向HTTP上的HTTPS一些網頁和一些。

但是這將是我的疏忽不提醒你反對回到HTTP。HTTPS是新的標準,並且有一個普遍的推動,鼓勵所有的站點轉移到HTTPS並懲罰那些已經完成的。閱讀他的帖子瞭解更多信息:https://www.troyhunt.com/life-is-about-to-get-harder-for-websites-without-https/。雖然你是正確的, nt在HTTPS頁面上,你應該考慮是否有另一種方法來解決這個問題。您網站上的單個HTTP頁面可能導致安全問題,如泄漏Cookie(如果它們未正確設置)。加上幀是可怕的,不應該再使用:-)

+1

感謝您的徹底解答。我最終修改了我的工具,只支持iframing https頁面。 – John

0

您可以使用重寫規則將https請求重定向到子目錄內的http。創建.htaccess文件中tools目錄,並添加以下內容:

RewriteEngine On 
RewriteCond %{HTTPS} on 
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 

確保阿帕奇mod_rewrite啓用。

+0

謝謝你的建議。但是,如果我這樣做,Chrome最終會顯示ERR_TOO_MANY_REDIRECTS錯誤。看起來好像我的服務器試圖以這種方式強制http,Chrome堅持認爲該頁面應該被加載爲https,並且服務器以301頁面重定向到http頁面,然後Chrome請求https頁面,並且該循環重複,直到Chrome放棄。 – John