我想为我的应用所做的每个回复添加Access-Control-Allow-Origin: *
。
根据the docs,AfterMiddleware
正是为了这个
在常见情况下,Chain的Handler生成完整的响应,AfterMiddleware只对该响应进行后处理,例如添加标题或记录。
所以我尝试使用它:
struct CorsMiddleware;
impl AfterMiddleware for CorsMiddleware {
fn after(&self, req: &mut Request, res: Response) -> IronResult<Response> {
res.headers.set(hyper::header::AccessControlAllowOrigin::Any);
Ok(res)
}
}
但我收到错误cannot borrow immutable field "res.headers" as mutable
。我不确定这是否由不可变的Response
变量类型引起,但由于这是特征函数签名,我无法改变它。那么,我该如何改变一些不可改变的东西呢?如果可能的话,复制整个响应只是为了添加一个标题会很奇怪。
答案 0 :(得分:3)
最简单的解决方案
使用
mut
变量
struct CorsMiddleware;
impl AfterMiddleware for CorsMiddleware {
fn after(&self, req: &mut Request, mut res: Response) -> IronResult<Response> {
res.headers.set(hyper::header::AccessControlAllowOrigin::Any);
Ok(res)
}
}
在Rust中,当您是数据所有者时,您可以对它们执行任何操作,因此这可以解决您的问题。