수색…


비고

브라우저 보안은 웹 페이지가 AJAX 요청을 다른 도메인으로 만들지 못하게합니다. 이 제한은 동일 출처 정책이라고하며 악의적 인 사이트가 다른 사이트의 중요한 데이터를 읽지 못하게합니다. 그러나 때로는 다른 사이트에서 웹 응용 프로그램에 교차 출연 요청을하도록 할 수 있습니다.

Cross Origin Resource Sharing (CORS)은 서버가 동일한 출처 정책을 완화 할 수있게 해주는 W3C 표준입니다. CORS를 사용하면 서버가 일부 출처 요청을 거부하고 다른 요청은 거부 할 수 있습니다. CORS는 JSONP와 같은 이전 기술보다 안전하고 유연합니다.

모든 요청에 ​​대해 CORS 사용

Configure 메서드의 IApplicationBuilder 에서 UseCors() 확장 메서드를 사용하여 모든 요청에 ​​CORS 정책을 적용합니다.

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();
    services.AddCors();
}

public void Configure(IApplicationBuilder app)
{
    // Other middleware..

    app.UseCors(builder =>
    {
        builder.AllowAnyOrigin()
               .AllowAnyHeader()
               .AllowAnyMethod();
    });

    // Other middleware..

    app.UseMvc();
}

특정 컨트롤러에 대해 CORS 정책 사용

특정 컨트롤러에 특정 CORS 정책을 사용하려면 ConfigureServices 메서드의 AddCors 확장에서 정책을 작성해야합니다.

services.AddCors(cors => cors.AddPolicy("AllowAll", policy =>
{
    policy.AllowAnyOrigin()
            .AllowAnyMethod()
            .AllowAnyHeader();
}));

이렇게하면 컨트롤러에 정책을 적용 할 수 있습니다.

[EnableCors("AllowAll")]
public class HomeController : Controller
{
   // ...
}

보다 정교한 CORS 정책

정책 작성 도구를 사용하면 정교한 정책을 작성할 수 있습니다.

app.UseCors(builder =>
{
    builder.WithOrigins("http://localhost:5000", "http://myproductionapp.com")
           .WithMethods("GET", "POST", "HEAD")
           .WithHeaders("accept", "content-type", "origin")
           .SetPreflightMaxAge(TimeSpan.FromDays(7));
});

이 정책은 GET , POSTHEAD 메소드 만있는 출처 http://localhost:5000http://myproductionapp.com 만 허용하고 accept , content-typeorigin HTTP 헤더 만 허용합니다. SetPreflightMaxAge 메서드를 사용하면 브라우저가 프리 플라이트 요청 ( OPTIONS )의 결과를 캐시하여 지정된 시간 동안 캐시합니다.

모든 컨트롤러에 대해 CORS 정책 사용

모든 MVC 컨트롤러에서 CORS 정책을 사용하려면 ConfigureServices 메서드의 AddCors 확장에 정책을 CorsAuthorizationFilterFactory 다음 CorsAuthorizationFilterFactory 정책을 설정해야합니다

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Cors.Internal;
...
public void ConfigureServices(IServiceCollection services) {
    // Add AllowAll policy just like in single controller example.
    services.AddCors(options => {
        options.AddPolicy("AllowAll",
           builder => {
                builder.AllowAnyOrigin()
                       .AllowAnyMethod()
                       .AllowAnyHeader();
        });
    });

    // Add framework services.
    services.AddMvc();

    services.Configure<MvcOptions>(options => {
        options.Filters.Add(new CorsAuthorizationFilterFactory("AllowAll"));
    });
}

public void Configure(IApplicationBuilder app) {
    app.useMvc();
    // For content not managed within MVC. You may want to set the Cors middleware
    // to use the same policy.
    app.UseCors("AllowAll");
}

이 CORS 정책은 컨트롤러 또는 작업 단위로 덮어 쓸 수 있지만 전체 응용 프로그램의 기본값을 설정할 수 있습니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow