zoukankan      html  css  js  c++  java
  • ASP.NET Core-允许跨域(CORS)

    介绍

    浏览器安全不允许不同域名的网页之间发送请求。这种限制叫做同源策略(the same-origin policy)。
    同源策略可以防止一个恶意的站点读取另一个站点的敏感数据。
    有时候,你想允许网站发送跨域的请求到你的应用。

    带策略的CORS 和中间件

    CORS中间件处理跨域请求。下面的代码允许指定的源能对整个应用进行跨域请求

    案例:

    CORS中间件处理跨域请求。下面的代码允许指定的源能对整个应用进行跨域请求
    这个代码会把CORS策略通过CORS中间件应用到这个应用的所有终端(endpoints);即把跨域作用到整个应用

    public void ConfigureServices(IServiceCollection services)
            {
             
                    string[] origins = new string[] { "http://*.fan.com", "https://*.fan.com", "http://*.fan.net", "https://*.fan.net" };
                    services.AddCors(option => option.AddPolicy("cors", policy => policy
                        .AllowAnyHeader()//允许所有的请求头
                                         //.WithHeaders(HeaderNames.ContentType, "x-custom-header");//要允许一个CORS请求中指定的请求头,可以使用 WithHeaders 来指定
                        .AllowAnyMethod()
                        .SetIsOriginAllowedToAllowWildcardSubdomains()//使可以匹配一个配置的带通配符的域名
                        .WithOrigins(origins) //指定来源域名
    
                        .AllowCredentials()
                    ));
             }
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IHostApplicationLifetime applicationLifetime, ILogger<Startup> logger , ElasticSearch elasticSearch)
            {
                app.UseCors("cors");//注意:1.UseCors必须在UseMvc之前被调用;2. URL末尾不能加/ ;这个url指的是 builder.WithOrigins(url)中的url
                }
    
    

    使用[EnableCors]属性设置允许跨域

    [EnableCors]属性提供了另一种方式设置跨域。即可以只设置选择的终端,而不是所有的终端.
    这里不同于上面的那种方式,上面的方式是应用的所有终端都会被设置允许跨域;
    使用[EnableCors]来指定默认的策略,而[EnableCors("{Policy String}")] 指定了特定的策略;
    [DisableCors]属性可以禁止CORS;

        [EnableCors("AnotherPolicy")]
        [HttpGet]
        public ActionResult<IEnumerable<string>> Get()
        {
            return new string[] { "green widget", "red widget" };
        }
    

    CORS 策略(Policy)的选项:

    • 设置允许的访问源
    • 设置允许的HTTP methods
    • 设置允许的请求头(request header)
    • 设置暴露的响应头(response header)
    • 跨不同源请求的证书(Credentials)
    • 设置过期时间

    SetIsOriginAllowedToAllowWildcardSubdomains:设置策略的 IsOriginAllowed 属性,使可以匹配一个配置的带通配符的域名
    AllowAnyMethod:设置允许的HTTP methods
    WithHeaders:要允许一个CORS请求中指定的请求头,可以使用 WithHeaders 来指定
    AllowAnyHeader:允许所有的请求头
    withCredentials:允许在跨域请求中发送证书
    WithExposedHeaders:暴露指定的响应头

    注意:如果 Access-Control-Allow-Credentials 头部出现了,则意味着 设置为所有的源 (setting origin to " * ")会失效。

    参考:https://docs.microsoft.com/zh-cn/aspnet/core/security/cors

  • 相关阅读:
    ubuntu 安装 Java 开发环境
    mtd-utils 的 使用
    容器技术与虚拟化技术
    Shell之作业控制
    Shell常用语句及结构
    Shell常用命令之read
    Shell之函数
    文件的copy
    类中调用初始化方法
    父类中的方法被覆盖以及子类调用父类覆盖的方法
  • 原文地址:https://www.cnblogs.com/fanfan-90/p/13305133.html
Copyright © 2011-2022 走看看