Tech/Web

HTTP - "OPTIONS" 요청의 발생

Hewii 2021. 9. 1. 16:06

웹 개발중 브라우저에서 CORS메시지가 뜨는 경우가 있어 Wireshark를 통해 패킷을 확인한 결과, WAS와 HTTP Server가 다른 경우에 OPTIONS 라는 패킷이 감지되는 경우를 발견 하였다. 

 

나는 분명 GET으로 요청했는데 OPTIONS 패킷이 발생한 이유가 무엇일까? 라는 의문이 생겨 찾아보기 시작했다. 나는 HTTP Server로 C++로 구현하여 사용 하고 있었다. 하지만 자료 검색을 하다 보니 많은 것을 알 수 있었다.

 

CORS(Cross-Origin Resource Sharing)

 

CORS는 WAS와 데이터를 요청하는 Server가 다른 경우에 발생 한다. 이는 보안을 위해 생겼는데 출처가 다른곳으로 부터 데이터를 자율적으로 주고 받을 수 있게되면 보안상 많은 문제가 발생한다. CSRF나 XSS와 같은 방법등으로 정보의 탈취가 매우 쉬워 진다고한다. 그래서 보안을 할 필요가 생겼고, 그를 위해 생긴것이 CORS라고 한다.

 

HTTP Packet을 보면 Access-Control-Allow-Origin 이라는 패킷이 있는데, 이 항목에 "*" 와 특정 도메인등을 설정 할 수 있고 해당 부분에 언급되어있는 도메인으로 부터만 데이터를 주고 받을 수 있다.

 

이런 보안상의 기능이나 기타 기능을 보완하기위해 브라우저는 OPTIONS를 Preflight하여 서버에서 허용되는 옵션을 미리 확인하고 패킷을 처리하게 된다.

 

OPTIONS

 

OPTIONS는 아래와 같은 상황을 모두 만족할때 CORS 상황에서도 OPTIONS 패킷이 발생하지 않는다고 한다

 

1. GET, HEAD, POST 요청 중 한가지인 경우.

2. 허용 Cotent-Type application/x-www-form-urlencoded, multipart/form-data, text/plain 

3. 요청에 사용자 헤더가 없어야 한다.

 

 HTTP의 기본스펙이기 때문에 브라우저에서는 이를 따를 수 밖에 없다. 이러한 고정된 사항을 전반적으로 만족 시키기는 쉽지 않다. 결국 서버를 같은 도메인내에서 사용을 하던지, 해당 기능을 구현, 혹은 NGINX라거나 다른 웹서버를 이용해 구현이 필요할 수 있겠다.