我有一个网站(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 Web服务器。
(仅供参考,我希望工具目录中的页面通过http而非https提供页面的原因是因为其中一些页面是针对iframe的http页面。如果我尝试从https页面iframe一个http页面我最终得到混合内容错误。)
HTTP严格传输安全(或HSTS)是您的网站可以发送到浏览器的设置,其中显示“我只想在我的网站上使用HTTPS - 如果有人尝试转到HTTP链接,请在发送请求之前自动将其升级为HTTPS ”。它基本上不允许您无意或有意地发送任何HTTP流量。
这是一项安全功能。 HTTP流量可以被拦截,读取,更改并重定向到其他域。仅限HTTPS的网站应将HTTP流量重定向到HTTPS,但如果最初仍通过HTTP发送任何请求,则存在各种安全问题/攻击,因此HSTS会阻止此操作。
HSTS的工作方式是您的网站在您的HTTPS请求上发送一个HTTP Header Strict-Transport-Security
,其值为max-age=31536000; includeSubDomains
。在此示例中,浏览器缓存此缓存并激活HSTS 31536000秒(1年)。您可以在浏览器Web开发人员工具中或使用https://securityheaders.io等网站查看此HTTP标头。通过使用chrome://net-internals/#hsts
站点,您可以清除该缓存并再次允许HTTP流量。但是,只要您通过HTTPS访问该站点,它就会再次发送Header,浏览器将恢复为仅HTTPS。
因此,要永久删除此设置,您需要停止发送该Strict-Transport-Security
标头。在Apache / Tomcat服务器中找到它并将其关闭。或者更好的是首先将它更改为max-age=0; includeSubDomains
一段时间(告诉浏览器在0秒后清除缓存,因此只要您通过HTTPS访问该站点以获取此标头,就可以将其关闭而无需访问chrome://net-internals/#hsts
,并且然后完全删除标题。
关闭HSTS后,您可以恢复使用HTTPS上的某些页面,以及使用标准重定向的HTTP上的某些页面。
但是,如果不警告你不要回到HTTP,那将是我的疏忽。 HTTPS是新标准,并且普遍推动鼓励所有网站转移到HTTPS并惩罚那些已完成的网站。阅读他的帖子了解更多信息:https://www.troyhunt.com/life-is-about-to-get-harder-for-websites-without-https/。虽然您无法在HTTPS页面上构建HTTP内容,但您应该考虑是否有其他方法可以解决此问题。您网站上的单个HTTP页面可能会导致安全问题,例如泄漏Cookie(如果未正确设置)。加上框架很糟糕,不应再使用了:-)
您可以使用重写规则将https请求重定向到子目录中的http。在.htaccess
目录中创建一个tools
文件并添加以下内容:
RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
确保启用了apache mod_rewrite
。
基本上,来自HTTPS请求的任何HTTP 301响应都表明目标重定向到HTTP,任何浏览器都不应该这样做,这样做的服务器显然违反了基本安全性,或者被严重破坏。但是,对HTTPS请求的301回复仍然可以重定向到另一个HTTPS目标(包括在另一个域上,前提是满足其他CORS要求)。
如果您导航HTTPS链接(或javascript事件处理程序)并且浏览器开始加载回复301重定向到HTTP的HTTPS目标,则浏览器的行为应该类似于500服务器错误或连接失败( DNS名称未解析,服务器未响应超时)。
这种服务器端重定向显然无效。网站管理员永远不应该这样做!如果他们想要关闭服务并通知HTTPS用户该服务托管在其他地方并且不再安全,那么他们必须返回一个没有重定向的有效HTTPS响应页面,这应该是一个4xx错误页面(最可能是404 PAGE)找不到)并且他们不应该重定向到另一个不尊重CORS要求的HTTPS服务(例如第三方托管搜索引擎或停放页面),或者发送错误的媒体类型(不接受所请求的语言和显示那个页面用另一种语言)。
实现HSTS的浏览器完全正确并且朝着正确的方向发展。但我真的认为CORS规范是一团糟,只是调整为仍然允许广告网络主持和控制他们自己广播到其他网站的广告。
我强烈认为,出于正当理由仍然希望展示广告(或任何用于受众群体衡量的跟踪器)的严肃网站可以在他们自己的域和相同协议中托管这些广告/跟踪器:服务器仍然可以获得他们自己的广告内容希望通过自己下载/刷新这些广告并维护自己的本地缓存进行广播。如果他们希望第三方分析这些数据,他们可以通过收集他们需要和想要的数据并在自己的服务器上过滤来跟踪他们的受众:网站必须认真实施自己的隐私要求。
我讨厌那些太多的网站,当被访问时,被许多第三方追踪,包括非常具有侵入性的网站,如Facebook和大多数广告网络,以及许多非常弱的第三方服务,质量/安全性非常差,发送非常糟糕他们从不控制的内容(包括假广告,假新闻,宣传非法活动,非法商业,年龄等级无效......)。
让我们回到网络的起源:一个网站,一个域名,一个第三方。这并不意味着他们无法链接到其他第三方网站,但这些只能通过明确的用户操作(点击或点击)完成,并且访问者必须能够知道这将会发生什么,或者哪些内容将被显示。
这甚至可以用于在新闻文章中插入视频(例如Youtube):新闻网站可以自己托管框架的静态图像缓存和“播放”按钮的图标:当用户点击该图标时,它将开始激活第三个派对视频,在这种情况下,thirf派对将直接与该用户交互,并可以收集其他数据。但是,未激活的内容只能由原始网站根据自己发布的政策进行跟踪。