프리플라이트 요청(Preflight Request)는 주로 CORS(Cross-Origin Resource Sharing) 정책에 따라 브라우저가 실행하는 요청으로, 클라이언트가 서버에 특정 HTTP 요청을 보내기 전에 실제 요청이 안전한지 확인하기 위해 사용됩니다. 프리플라이트 요청과 TCP 핸드쉐이크는 서로 다른 수준의 통신에서 발생하는 개념입니다.
TCP 핸드쉐이크는 네트워크 계층에서 발생하는 과정으로, 클라이언트와 서버 간의 안정적인 연결을 설정하기 위해 3-way 핸드쉐이크를 수행합니다:
클라이언트가 서버에 SYN 패킷을 보냅니다.
서버가 클라이언트에 SYN-ACK 패킷으로 응답합니다.
클라이언트가 서버에 ACK 패킷을 보내면 연결이 수립됩니다.
이 과정은 모든 TCP 연결에서 발생하며, HTTP 요청이 전송되기 전에 반드시 수행됩니다.
프리플라이트 요청은 HTTP 계층에서 발생하는 과정으로, 주로 브라우저에서 CORS 정책을 준수하기 위해 사용됩니다. 프리플라이트 요청은 다음과 같이 진행됩니다:
클라이언트(브라우저)가 OPTIONS 메서드를 사용하여 서버에 프리플라이트 요청을 보냅니다. 이 요청에는 실제 요청에 대한 메타데이터(예: Access-Control-Request-Method, Access-Control-Request-Headers)가 포함됩니다.
서버는 이 요청을 수신하고, 허용되는 메서드와 헤더 등을 포함한 응답을 반환합니다.
클라이언트는 서버의 응답을 확인하고, 서버가 요청을 허용하면 실제 HTTP 요청을 보냅니다.
사실, 프리플라이트 요청도 TCP 핸드쉐이크를 거칩니다.
프리플라이트 요청이 HTTP 요청의 일종이기 때문에, 이 요청을 보내기 전에 TCP 연결이 이미 설정되어 있어야 합니다.
다만, 프리플라이트 요청 자체는 CORS 정책을 확인하기 위한 HTTP 레벨의 요청이기 때문에, TCP 핸드쉐이크와는 다른 목적을 가지고 있습니다.
TCP 핸드쉐이크: 모든 TCP 연결에서 발생하며, 안정적인 네트워크 연결을 설정하기 위해 사용됩니다.
프리플라이트 요청: CORS 정책을 확인하기 위해 HTTP 계층에서 발생하며, 클라이언트가 실제 요청을 보내기 전에 서버가 해당 요청을 허용하는지 확인합니다.
프리플라이트 요청도 HTTP 요청이므로, 실제로는 TCP 핸드쉐이크 과정을 거친 후에 이루어집니다.