Erlang Cowboy如何为静态文件添加响应头

Posted

技术标签:

【中文标题】Erlang Cowboy如何为静态文件添加响应头【英文标题】:Erlang Cowboy how to add response headers for static files 【发布时间】:2021-03-26 01:37:47 【问题描述】:

我想将 Strict-Transport-Security 标头添加到 Web 应用程序中。

这里是设置

Dispatch = cowboy_router:compile([
    '_', [
        "/", cowboy_static, file, env_file:filepath(data, "assets/index.html")
    ]
]),
ok, _ = cowboy:start_tls(product_https,
    [
        port, 8443,
        certfile, env_file:filepath(etc, "ssl/cert.crt"),
        keyfile, env_file:filepath(etc, "ssl/key.key")
    ],
    #env => #dispatch => Dispatch
)

在提供静态文件时,我应该在哪里添加 HSTS 或其他自定义标头?

【问题讨论】:

【参考方案1】:

使用中间件是解决办法。

设置将是:

Dispatch = cowboy_router:compile([
    '_', [
        "/", cowboy_static, file, env_file:filepath(data, "assets/index.html")
    ]
]),
ok, _ = cowboy:start_tls(product_https,
    [
        port, 8443,
        certfile, env_file:filepath(etc, "ssl/cert.crt"),
        keyfile, env_file:filepath(etc, "ssl/key.key")
    ],
    #
        env => #dispatch => Dispatch,
        middlewares => [cowboy_router, my_security_middleware, cowboy_handler]
    
)

这是中间件的实现

-module(my_security_middleware).
-behaviour(cowboy_middleware).

-export([execute/2]).

execute(Req, Env) ->
    Req2 = cowboy_req:set_resp_header(<<"aaaaa">>, <<"bbbbb">>, Req),
    ok, Req2, Env.

这会将标头 aaaaa: bbbbb 添加到所有请求响应中。

【讨论】:

以上是关于Erlang Cowboy如何为静态文件添加响应头的主要内容,如果未能解决你的问题,请参考以下文章

Erlang cowboy 处理不规范的client

Cowboy:你如何呈现来自处理程序的静态 html 文件?

如何将 Cowboy (Erlang) websocket 连接到 webflow.io 生成的网页

Erlang Cowboy,牛仔缓存页面吗?

Cowboy 框架:发送 HTTP 调用

MFC SDI中 如何为动态创建的按钮添加消息处理函数