2024.10.21.월.TIL CORS

김기남·2024년 10월 20일
post-thumbnail

안녕하세요, 오늘은 CORS 에 대해 정리해 보았습니다.

CORS란 무엇인가?

CORS는 웹 브라우저가 다른 출처의 리소스에 접근할 수 있도록 허용하는 정책입니다. 기본적으로 웹 브라우저는 보안상의 이유로 동일 출처 정책(Same-Origin Policy)을 따릅니다. 이는 한 출처에서 로드된 문서나 스크립트가 다른 출처의 리소스에 접근하는 것을 제한합니다. 하지만 CORS를 통해 이러한 제한을 완화할 수 있습니다.

CORS의 필요성

CORS는 다양한 웹 서비스와 API를 통합할 때 필요합니다. 예를 들어, A 도메인에서 호스팅되는 웹 애플리케이션이 B 도메인에 있는 API에 접근해야 할 경우, CORS가 없으면 브라우저가 요청을 차단하게 됩니다. 따라서 CORS는 웹 애플리케이션의 기능성을 높이고, 다양한 서비스와의 연동을 가능하게 합니다.

CORS의 작동 원리

CORS는 HTTP 헤더를 통해 작동합니다. 클라이언트가 서버에 요청을 보낼 때, 요청 헤더에 Origin을 포함시킵니다. 서버는 이 Origin 헤더를 확인하고, 요청을 허용할지 결정합니다. 만약 허용한다면, 서버는 응답 헤더에 Access-Control-Allow-Origin을 포함시켜 클라이언트에게 응답합니다. 이 과정은 다음과 같은 흐름으로 진행됩니다.

  1. 클라이언트가 서버에 요청을 보냅니다.
  2. 서버는 요청의 Origin을 확인합니다.
  3. 서버가 요청을 허용하면, Access-Control-Allow-Origin 헤더를 포함하여 응답합니다.

CORS 요청의 종류

CORS 요청은 크게 두 가지로 나눌 수 있습니다. 첫 번째는 "단순 요청(Simple Request)"이고, 두 번째는 "사전 요청(Preflight Request)"입니다. 단순 요청은 GET, POST, HEAD 메서드를 사용하는 요청으로, 특별한 헤더를 포함하지 않습니다. 반면, 사전 요청은 OPTIONS 메서드를 사용하여 서버에 요청을 보내고, 서버가 허용하는 메서드와 헤더를 확인하는 과정입니다.

CORS 관련 오류 및 해결 방법

CORS를 설정할 때 발생할 수 있는 오류는 여러 가지가 있습니다. 가장 흔한 오류는 "CORS 정책에 의해 차단됨"이라는 메시지입니다. 이 오류는 서버가 요청을 허용하지 않을 때 발생합니다. 이 경우, 서버의 CORS 설정을 확인하고, 필요한 헤더를 추가해야 합니다.

CORS와 보안

CORS는 보안과 관련된 중요한 요소입니다. 잘못된 CORS 설정은 보안 취약점을 초래할 수 있습니다. 예를 들어, Access-Control-Allow-Origin 헤더를 *로 설정하면 모든 출처에서 접근할 수 있게 되어, 악의적인 사이트에서 API를 호출할 수 있는 위험이 있습니다. 따라서, CORS 설정 시에는 신중하게 출처를 지정해야 합니다.

오늘의 코드카타

class Solution {

    public int solution(String[] spell, String[] dic) {
        int answer = 2;
        int index = 0;

        for (int i = 0; i < dic.length; i++) {
            index = 0;
            for (int j = 0; j < spell.length; j++) {
                if (dic[i].contains(spell[j])) {
                    index++;
                }
                if (index == spell.length) {
                    answer = 1;
                }
            }
        }

        return answer;
    }
}
public class Main {

    public static void main(String[] args) {

        Solution solution = new Solution();

        String[] s1 = {"p", "o", "s"};
        String[] s2 = {"z", "d", "x"};
        String[] s3 = {"s", "o", "m", "d"};

        String[] d1 = {"sod", "eocd", "qixm", "adio", "soo"};
        String[] d2 = {"def", "dww", "dzx", "loveaw"};
        String[] d3 = {"moos", "dzx", "smm", "sunmmo", "som"};

        System.out.println(solution.solution(s1, d1));
        System.out.println(solution.solution(s2, d2));
        System.out.println(solution.solution(s3, d3));
    }
}

외계어 사전

profile
새로운 시작~!

0개의 댓글