.NetCore在跨域时设置自定义响应头的注意事项

  现在B/S开发基本都是前后端分离的方式了吧,那么这往往会涉及到一个跨域的问题,为了安全,跨域访问往往做了很多的限制,这里对跨域时自定义响应头做个笔记。

  当我们在.NetCore的后端给请求添加了一个自定义的响应头的时候,通过api调用,响应头完美的返回:  

    public class HomeController : ControllerBase
    {
        [HttpGet]
        public object Get()
        {
            Response.Headers["Access-Token"] = "XXXXXXXX";
            return "Hello";
        }
    }

  接口响应可以看到有响应头:

  

  然后你兴高采烈的提交接口,提交给前端,然后前端说拿不到响应头,这就有点纳闷了,明明返回了,为什么会拿不到?

  其实,这也是跨域访问的一个限制,这就要说说Access-Control-Expose-Headers 这个响应头了,它的作用主要是在响应跨源请求中,允许服务器指定哪些响应头可以暴露给浏览器中运行的脚本(js),往往它需要和Access-Control-Allow-OriginAccess-Control-Allow-Methods 等一起使用,毕竟要在跨域请求中啦。

  所以,我们只需要在跨域的管道配置中添加这个自定义的响应头既可以:  

    //跨域
    services.AddCors(options =>
    {
        options.AddDefaultPolicy(builder =>
        {
            builder.AllowAnyHeader()
                .AllowAnyOrigin()
                .AllowAnyMethod()
                .WithExposedHeaders("Access-Token");
        });
    });

  这样我们就可以前端脚本上拿到这个响应头了。

posted @ 2024-04-09 15:11  没有星星的夏季  阅读(16)  评论(0编辑  收藏  举报