繁体   English   中英

如何使用我的nodejs-express应用程序处理以https重定向的http请求?

[英]How to handle http requests which are getting redirected as https using my nodejs-express app?

我正在网站中注入一些脚本标签,其来源为http:localhost:3000/css/my-page-css.css 虽然它可以在几乎所有网站上运行,但该网站还是以某种方式将我的所有http请求发送为https 如何处理这种情况?

我还在我的nodejs应用程序上配置了一个https服务器,该服务器侦听端口8443而HTTP侦听3000 但是,当我注入脚本标记时,它们具有指向端口3000 src URLS。 因此,即使我在nodejs应用程序上配置了https,它也无法正常工作,因为它将监听其他端口。

您正在使用HTTP严格传输安全性(HSTS)

使用您URL上的securityheader.com网站或Chrome开发者工具,我们看到以下HTTP标头由您的网站发送回:

Strict-Transport-Security   max-age=7889238

该HTTP标头将在您的Web服务器中配置,并且是您的Web服务器告诉浏览器的一种方式:“在接下来的7889238秒内,仅在此域上使用HTTPS。如果有人尝试使用HTTP(通过键入或单击链接),则在将HTTP发送到服务器之前,会自动将HTTP切换为HTTPS。”

这是一项安全功能,因为当前默认(如果未明确提供方案)是HTTP。 这使网站所有者可以切换默认值,甚至强于此,也可以防止将其切换回默认值。

HSTS是在域级别设置的,不可能在一个端口(例如443)上打开它,而在另一个端口(例如3000)上不能打开-它在该域上打开还是关闭。

如果您确实要使用HTTP,则需要删除此标头,并从浏览器中删除该标头的记住值。 虽然chrome允许您通过在URL中键入chrome://net-internals/#hsts并使用Delete选项来执行此操作,但最简单的方法是将最长使用期限从7889238更改为0,然后加载网站再次。 然后完全删除标题。

对于像localhost这样的站点,在其中代理请求并无意中为该虚拟主机名设置请求的情况,这尤其令人讨厌。 您应该查看您的节点代理服务器是否允许您剥离该HTTP标头。 有人可能会说,如果浏览器制造商忽略localhost的HSTS会更好 ,但是我认为,如果开发人员停止使用HTTPS并使用它,甚至对于使用添加到您本地信任存储区的自签名证书的开发环境,也会更好。 这样可以避免在开发过程中出现诸如混合内容之类的问题,并且可以使用仅HTTPS的功能(包括Brotli,HTTP / 2,地理位置等)(尽管某些浏览器(例如Chrome)仍然允许在http://上使用这些功能) 本地主机 )。

或者,为您的每个开发站点设置一个本地DNS别名,并在有问题的站点上使用带有或不带有HTTPS的别名

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM