我是注入一些脚本标签在一个网站,与源代码,如http:localhost:3000/css/my-page-css.css。当它在几乎所有的网站上运行时,有一个特定的网站正在以https的形式发送我所有的https请求。我该如何处理这样的案件?
我还在我的nodejs应用程序上配置了一个https服务器,它监听端口8443,而http侦听3000。但是,当我注入我的脚本标记时,它们有指向端口3000的src。因此,即使我在我的nodejs应用程序上配置了一个https,它也不能工作,因为它将监听另一个端口。
发布于 2018-07-16 11:02:59
您正在使用HTTP严格传输安全性(HSTS)
使用网址上的securityheader.com网站或Chrome工具,您的站点将发送以下Header:
Strict-Transport-Security max-age=7889238此HTTP报头将在您的way服务器中配置,并且是way服务器告诉浏览器“在接下来的7889238秒内仅在此域上使用HTTPS。如果有人尝试使用HTTP (通过键入或单击链接),则在将HTTP发送到服务器之前自动切换到HTTPS。”
这是一个安全特性,因为当前的默认(如果没有显式地给出方案)是HTTP。这允许网站所有者切换默认,甚至强的,阻止它能够被切换回来。
HSTS是在域级别上设置的,一个端口(例如443)不可能打开它,而另一个端口(例如,3000)则不可能打开它--它要么为该域打开,要么为off。
如果您真的想使用HTTP,那么您需要删除这个标题,并从浏览器中删除这个标头的记住值。尽管chrome允许您通过在URL中键入chrome://net-internals/#hsts并使用delete选项来完成此操作,但最简单的方法是将最大年龄从7889238更改为0,然后再次加载该网站。然后将标题完全移除。
对于您代理请求的本地主机之类的站点来说,这可能特别烦人,并在不经意间将其设置为虚拟主机名。您应该查看节点代理服务器是否允许删除该HTTP报头。不过,我认为开发人员最好停止对抗HTTPS,即使在开发环境中使用HTTPS,也可以使用添加到本地信任存储中的自签名证书。这可以避免诸如混合内容之类的问题,还可以使用仅限于HTTPS的特性(包括Brotli、HTTP/2、Geo Location...etc)。在开发过程中(尽管有些浏览器如Chrome仍然允许在http://localhost上使用这些浏览器)。
另外,可以选择为每个开发站点设置本地DNS别名。,并将其与HTTPS一起使用,或者不使用HTTPS,以适用于有关站点。
https://stackoverflow.com/questions/51356983
复制相似问题