我最近刚设置我的服务器以使用SSL证书运行HTTPS。该网站是一个图像主机,ShareX的开发人员已将我的网站包含在他们的应用程序中。
我的问题是,所有HTTP请求都会自动重定向到HTTPS。这个网站很有魅力,ShareX遇到了问题。
如何告诉nginx将HTTP POST请求重定向到HTTPS,但是仍然发出POST请求?希望这听起来像是有用的。
答案 0 :(得分:5)
您无法重定向。您可以通过HTTP或HTTPS发送POST请求。这与RFC 7231, Section 4.3.3.
一致答案 1 :(得分:0)
您可以使用307响应来执行此操作。
当通过POSTMAN触发时,这会将POST从HTTP重定向到HTTPS。
这是执行此操作的一些expressJS代码(但您可以将逻辑转换为任何语言)。
基本上,逻辑是:
如果有一个请求未通过SSL而且有一个SSL服务器正在运行那么
- 将位置响应标头设置为您要重定向到的网址
- 发送响应代码307
END IF
这会导致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;