f# - 如何在 f# 中使用 suave 从 http 重定向到 https
问题描述
如何使用 Suave 将连接从 http 重定向到 https?
在https://gist.github.com/ademar/f4ddb788162dbdd9e104574e2accf07f我发现了这个:
let redirectToSsl : WebPart =
context(fun c ->
match c.request.header "x-forwarded-proto" with
| Choice1Of2 "http" ->
let uriBuilder = new UriBuilder(
Scheme = Uri.UriSchemeHttps,
Path = c.request.path,
Host = c.request.host)
Redirection.redirect (uriBuilder.Uri.ToString())
| _ -> fun _ ->async { return None })
但我不确定这将适合管道中的哪个位置?
解决方案
我会改变两件事:
- 检查实际协议。我认为这
x-forwarded-proto
仅用于代理,但我不确定。 - 要将其安装到您的管道中,请在访问安全时接受要调用的 Web 部件。
结果如下所示:
let redirectToSsl allow : WebPart =
context (fun c ->
if c.request.binding.scheme.secure then
allow
else
let uriBuilder =
new UriBuilder(
Scheme = Uri.UriSchemeHttps,
Path = c.request.path,
Host = c.request.host)
Redirection.redirect (uriBuilder.Uri.ToString()))
用法如下所示:
let app = redirectToSsl Files.browseHome // allow browsing under SSL only
警告:我没有在实践中尝试过这个,所以我可能会忽略其他问题。
推荐阅读
- javascript - 如何访问对象中的特定元素?
- java - 在仅使用 mousePressed、mouseReleased 和 mouseDragged 的自定义 JTable 中选择多行
- haskell - 这条适用法则是什么意思?
- angular - Azure B2C for Angular 8 app with angular-auth-oidc-client - b2clogin 端点 POST CORS 错误
- javascript - 异步函数执行顺序
- r - 是否有一个 ggplot one liner 可以完全删除 x 轴和所有相关组件?
- groovy - 如何在 Groovy 字符串中转义 ${}
- java - 如何通过点击应用内按钮向所有用户(或主题订阅者)发送通知?
- python - python:无法打开文件 - Bamboo
- go - 如何在 golang 中编译 libxml2