我最近刚刚设置我的服务器通过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;