Access to XMLHttpRequest at
'http://101.101.208.240:8081/api/member/v1/create'
from origin 'http://localhost:3000/' has been blocked by CORS policy:
Response to preflight request doesn't pass access control check:
It does not have HTTP ok status.
🔗 CROS 란?
GET
요청을 허용하는 설정을 보여준다.GET
밑에 동일한 폼으로 메서드를 추가해주면 되는 것 같다.https://docs.spring.io
대신 프론트의 도메인을 적으면 된다고 한다.spring:
cloud:
gateway:
globalcors:
cors-configurations:
'[/**]':
allowedOrigins: "https://docs.spring.io"
allowedMethods:
- GET
Access-Control-Allow-Origin
이 헤더에 포함되지 않아서 CORS 에러가 발생하고 만다.allowedMethods
에 OPTIONS
를 추가한다.Access-Control-Allow-Credentials:true
를 추가해야한다.allowed credentials
가 true
인 경우, allowed_origin을 *
로 입력할 수 없기 때문에 http://localhost:3000
이렇게 특정 origin을 입력해줘야한다.spring:
cloud:
gateway:
default-filters:
- DedupeResponseHeader=Access-Control-Allow-Origin Access-Control-Allow-Credentials
globalcors:
cors-configurations:
'[/**]':
allowedOrigins: 'http://localhost:3000'
allow-credentials: true # JWT 나 쿠키를 사용해 메시지를 보내야 할 경우 true
allowedHeaders: '*'
allowedMethods: # 메서드를 명시하지 않으면 안되는 경우도 있기 때문에 메서드는 명시해주는 편이 좋다고 한다.
- PUT
- GET
- POST
- DELETE
- OPTIONS
allowed credentials
를 true
로 설정할 수 있다.false
로 설정한다면 *
로 모든 경로의 요청을 허가할 수 있다.@Configuration
public class PreFlightCorsConfiguration {
private static final String ALLOWED_HEADERS = "x-requested-with, authorization, Content-Type";
private static final String ALLOWED_METHODS = "GET, PUT, POST, DELETE, OPTIONS";
private static final String ALLOWED_ORIGIN = "http://localhost:3000";
private static final String MAX_AGE = "3600";
// true 로 설정할 경우 allowed_origin 에 '*' 을 입력할 수 없고,
//http://localhost:3000 이렇게 특정해줘야 한다.
private static final String ALLOWED_CREDENTIALS = "true";
@Bean
public WebFilter corsFilter() {
return (ServerWebExchange ctx, WebFilterChain chain) -> {
ServerHttpRequest request = ctx.getRequest();
if (CorsUtils.isPreFlightRequest(request)) {
ServerHttpResponse response = ctx.getResponse();
HttpHeaders headers = response.getHeaders();
headers.add("Access-Control-Allow-Origin", ALLOWED_ORIGIN);
headers.add("Access-Control-Allow-Methods", ALLOWED_METHODS);
headers.add("Access-Control-Max-Age", MAX_AGE);
headers.add("Access-Control-Allow-Headers",ALLOWED_HEADERS);
headers.add("Access-Control-Allow-Credentials",ALLOWED_CREDENTIALS);
if (request.getMethod() == HttpMethod.OPTIONS) {
response.setStatusCode(HttpStatus.OK);
return Mono.empty();
}
}
return chain.filter(ctx);
};
}
}