2020. 11. 17. 17:00 DEV ENVIRONMENT
Access to fetch at 'https://도메인/엔드포인트' from origin 'https://호출한도메인' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: It does not have HTTP ok status.

포스트맨으로는 잘되던게 실제 브라우저에서는 오류가 발생했습니다.

알아보니까 실제로는 OPTIONS라는 메소드로 먼저 호출을 한다고 하는데,

그 이름이 PREFLIGHT라고 하네요.

 

그래서 오류가 일반적인 CORS오류가 아니고

blocked by CORS policy: Response to preflight request doesn't pass access control check: It does not have HTTP ok status.

라고 적혀있습니다.

 

Access to fetch at 'https://도메인/엔드포인트' from origin 'https://호출한도메인' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: It does not have HTTP ok status.

 

스프링프레임웤(스프링부트)에서 해결하는 방법

 

1. 파일중에 WebSecurityConfigurerAdapter를 상속받은 클래스를 찾는다.

 

 

2. 오버라이드 된 configure(HttpSecurity http)메소드를 편집한다. (없으면 만듦)

@Override
protected void configure(HttpSecurity http) throws Exception {

 

 

3. http에 코드 추가

.cors().and()
.requestMatchers(CorsUtils::isPreFlightRequest).permitAll()

 

 

* 리액트프론트용 자바스크립트 코드

브라우저에 붙여서 테스트

var Data = {
  METHOD : {
    GET : 'GET',
    POST : 'POST',
    PUT : 'PUT',
    DELETE : 'DELETE'
  },
  TYPE : {
    FILE_UPLOAD : 'Data.TYPE.FILE_UPLOAD'
  },
  load : ( option ) => {
    const accessToken = localStorage.getItem('access.token');
    let parameters = {
      headers : { Authorization : accessToken ? `Bearer ${ accessToken }` : '' },
      method : option.method || Data.METHOD.GET
    };
    switch ( option.method ) {
      case Data.METHOD.POST :
      case Data.METHOD.PUT :
        option.type !== Data.TYPE.FILE_UPLOAD && ( parameters = { ...parameters, headers : { 'Content-Type' : 'application/json' } } );
        break;
      default :
    }
    if ( option.data ) {
      let data;
      if ( option.type === Data.TYPE.FILE_UPLOAD ) {
        data = new FormData();
        for ( let i in option.data ) {
          data.append( i, option.data[ i ] );
        }
      } else {
        data = JSON.stringify( option.data );
      }
      parameters = { ...parameters, body : data };
    }
    window.fetch( option.url, parameters )
      .then( response => response.json() )
      .then(
        ( data ) => {
          if ( data.code === 'S000000' ) {
            option.success && option.success( data.data );
          } else if ( data.hwrErrorCode?.code === 'ERR_SUCCESS' ) {
            option.success && option.success( data.candidates[ 0 ] )
          } else {
            option.error && option.error( data );
          }
        }
      );
  }
};
Data.load({url:'http://localhost/주소'});

 

 

2020. 11. 16. 12:25 ANDROID IOS
안드로이드 URLConnection 내용짤림, Android Logcat Truncated

Kotlin으로 urlConnection을 코딩하는데 계속 내용이 짤려서 나옵니다.

처음에는 내가 코틀린 나부랭이라서 못하는가부다 했는데,

로그가 길어서 짤리는것이였고,

실제로는 정상작동하고 있었습니다.

(공공데이타API였는데 결과가 한줄로 나오는바람에 4k를 넘어감)

 

로그캣의 최대출력길이는 4096바이트 입니다.

 

저는 빈 텍스트필드에 결과를 찍게 했더니 결과값이 100% 출력되었습니다.

 

아니면 로그를 짤라서 출력해도 됩니다.

출력물에 엔터값이 없으면 콤마나 갈메기등을 사용해보세요.

for( String line : logMesg.split("\n") ) {
    Log.d( TAG, line );
}

 

최근에 올라온 글

최근에 달린 댓글