有没有一个标准的头,服务器可以发送“普通”的HTTP模式,以提示HTTPS可用和推荐的浏览器?
我已经使用了HSTS机制,告诉浏览器不要切换回HTTP,但只有在已经build立安全连接时才能工作。 目前我在Apache中使用Rewrite的东西,使客户端使用HTTPS,但我想减less强制替代。
为了回答具体的问题, 实际上有一个提案,提供了你想要的东西,也就是 HTTP工作组提出的HTTP Alternative Services标准 。 目前的互联网草案是在2016年5月3日的几个月前发布的,目前的互联网草案在2016年11月4日到期。
鉴于它是如何新的,我希望UA的支持是最好的非常斑点。 ( Mark Nottingham称 Firefox和Chrome已经增加了支持,但是并没有提供任何版本号。)另外,UA的解释并不一定是用户做出的select。
在更一般的层面上,我认为你必须考虑为什么你不想“强制”UA使用HTTPS。 是否因为HTTPS的性能成本? (提示:这些日子完全可以忽略不计,特别是如果你也能够实现HTTP / 2)。是否因为某些客户端可能无法使用encryption? (提示:如果这确实是一个很大的用例,那么支持未encryption的TLS密码套件。我不build议这样做,但是在技术上可能和将你的汽车从悬崖上卸下一样技术上是可能的,至less这样,你应该得到HTTPS的真实性保证,虽然不保密。)是否因为你有客户不说SNI? (然后考虑为这个重要的网站分配一个IP地址,以支持在浏览器上停留5-10年的客户端。)
强制HTTPS有几个非常实际的好处,即使你没有什么“秘密”的网站或关心小的谷歌排名提升。
您可以随时使用HTTP 307响应来临时将客户端从HTTP站点redirect到HTTPS站点(如果需要的话),但是它将临时redirect与HTTPS和HSTS结合起来有点失败。
鉴于你已经在使用HSTS,我只是说从HTTP虚拟主机到HTTPS虚拟主机build立一个HTTP 301永久性redirect,并且每天都会这样。 至今没有什么理由。
这听起来像这个问题实际上是问 – 是否有一个标题,浏览器将用于沟通的用户,HTTPS是可用的,他们应该做出决定采取行动来使用它,为此和那个原因。
这个问题的答案是否定的。 这不是应用程序询问用户的问题,相对于构成应用程序用途的用户在应用程序之前放置的其他问题和决定。
应用程序有责任确保与用户交互的安全性,完整性和保密性,不要询问用户什么是毫无意义的问题,您希望您的交互是保密的,等等。
应用程序必须使用可以在浏览器中build立的信任边界上下文中使用的自动化机器,以确保这些属性表征交互,而无需用户采取行动。
出于这个原因,如果用户请求http,使用重写规则提供一个http 301响应代码来指向浏览器的https是正确的。
请注意,谷歌铬本身将启动信号,只有网站是不安全的,从具有login的网站开始 – 像StackOverflow家庭。
所以不要担心用户体验或用户决策的一部分。 使用http 301,并使用其他标题如hsts和x-frame-options和内容安全策略,并确保您的用户安全。