웹 브라우저는 웹 페이지를 요청할 때, 단순히 URL 주소만 틱 보내는 것이 아닙니다. 자신이 어떤 기기인지, 어떤 데이터 형식을 지원하는지 등의 메타정보 주머니인 'HTTP 헤더'를 머리에 얹어 보냅니다. 내 브라우저가 전송한 HTTP 헤더의 알맹이들을 스캔하여 보여드립니다.
HTTP 헤더는 클라이언트와 웹 서버가 HTTP 프로토콜 통신을 주고받을 때 패킷 바디 데이터 앞부분에 부가 정보, 요청 컨텍스트, 제어 메타데이터를 담아 전달하는 약속 영역입니다. 서버는 이 헤더 정보를 가장 먼저 읽어 들여 사용자의 요청을 수락할지 거부할지, 데이터를 어떤 언어(ko-KR 등)와 어떤 형식(HTML/WebP 등)으로 구성해 내보낼지 지능적으로 필터 결정합니다.
- **Host:** 요청을 전송받는 대상 서버의 도메인 주소명입니다. - **Connection:** 통신 완료 후 소켓 연결을 끊을지 계속 유지할지 지정합니다. (예: `keep-alive`로 통신 효율 업) - **Accept-Encoding:** 브라우저가 수용 및 압축 해제 가능한 인코딩 압축 포맷 규격 리스트입니다. (예: `gzip, deflate, br`을 지원해 고용량 텍스트 데이터를 80% 압축해 전송받음) - **Accept-Language:** 사용자가 선호하는 모국어 언어 코드 설정입니다. (예: `ko-KR`이 찍히면 한국어 버전 사이트를 우선 렌더링) - **Referer:** 이전 단계에서 어떤 웹사이트 링크를 클릭해서 이 사이트로 건너왔는지 유입 출발지 URL 주소 기록입니다.
우리가 네이버에 로그인한 뒤 페이지를 이동해도 로그인이 안 풀리는 것은 브라우저가 자동으로 모든 요청 헤더의 **'Cookie'** 영역에 임시 회원 식별 토큰을 넣어 보내기 때문입니다. 이 쿠키 헤더는 보안상 매우 민감하므로 자바스크립트로 탈취하지 못하게 차단하는 'HttpOnly' 속성을 서버 단에서 씌워두어야 하며, 공공 컴퓨터 사용 후에는 브라우저를 반드시 완전히 종료하거나 로그아웃을 쳐서 쿠키 헤더 자동 발송 기록을 세척해야 보안 사고를 막을 수 있습니다.