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如何为静态文件添加响应头的主要内容,如果未能解决你的问题,请参考以下文章
Cowboy:你如何呈现来自处理程序的静态 html 文件?