将HTTP POST请求redirect到HTTPS POST请求

我最近刚刚设置我的服务器通过SSL证书运行HTTPS。 该网站是一个图像主机,ShareX的开发人员已经将我的网站包含在他们的应用程序中。

我的问题是,所有的HTTP请求被自动redirect到HTTPS。 该网站的魅力,ShareX遇到问题。

如何告诉nginx将HTTP POST请求redirect到HTTPS,但仍然发出POST请求? 希望这听起来像信息。

你不能重定向。 您可以通过HTTP或通过HTTPS发送POST请求。 这符合RFC 7231,第4.3.3节。

你可以用307响应来做到这一点。

当通过POSTMAN触发时,这会将POST从HTTP重定向到HTTPS。

这是一些expressJS代码来做到这一点(但你可以将逻辑转换为任何语言)。

本质上,逻辑是:

如果有一个请求没有通过SSL,并且有一个运行THEN的SSL服务器

  • 将位置响应标头设置为您要重定向到的URL
  • 发送响应代码307

万一

这会使POSTMAN在响应位置标头使用HTTPS协议的地方自动重新发布SSL。 我相信这个逻辑也可以用于浏览器。 可能有这样做的安全问题,因为有人可以“嗅探”传入的HTTP请求,因此知道什么是通过HTTPS发送的。

使用这种方法需要您自担风险!

let middleware = (req, res, next) => { if (!req.secure && req.httpsserver) { let redirectUrl = `https://${req.hostname}:${config.httpsPort}${req.url}`; res.location(redirectUrl); return res.sendStatus(307); } return next(); }; module.exports = middleware;