如何在 SAFE-Stack 中正确强制使用 HTTPS?

How to properly force HTTPS in SAFE-Stack?

根据 Saturn docs,要在土星中使用 HSTS,需要在 application:

中指定 force_ssl
application {
    url ("http://0.0.0.0:" + port.ToString() + "/")
    force_ssl
    ...
}

这适用于网络的部署版本,但它会破坏本地开发。服务器没有 return 响应,在日志中它写 Request redirected to HTTPS 仅此而已。

是否可以强制使用 SSL 并同时方便本地开发人员?

SAFE-stack 假定使用 webpackwebpack-dev-server,并且作为真实服务器的代理,这意味着需要在那里做一些调整。

所以 webpack 配置现在应该在 proxy 部分的 target 中有 https

devServer: {
    proxy: {
        '/api/*': {
            target: 'https://localhost:<port>',
            ...
        },
        ...
    },
    ...
},

这还不够 - 根据 docs,为避免安全异常,需要取消设置 secure 标志:

devServer: {
    proxy: {
        '/api/*': {
            target: 'https://localhost:<port>',
            secure: false,
            ...
        },
        ...
    },
    ...
},

最后一件事是相应地修改服务器application

application {
    url ("https://0.0.0.0:" + port.ToString() + "/")
    force_ssl
    ...

对于 Web 的开发版本和生产版本都应该这样做。