11장 클라이언트 식별과 쿠키
서버가 통신하는 대상을 식별하는 기술
11.1 개별 저복
http는 익명으로 사용하며 상태가 없고 요청과 응답으로 통신하는 프로토콜이다.
사이트를 개인화시켜 사용자에게 제공하는 여러가지 방법
- 개별 인사
:사용자에게 특화된 환영 메세지나 페이지 내용을 만든다.
- 사용자 맞춤 추천
: 고객의 흥미를 학습하여 예상되는 제품을 추천할 수 있다.
- 저장된 사용자 정보
: 고객의 편의를 위해 저장된 사용자 정보를 사용할 수 있다.
- 세션 추적
: http 트랜잭션은 상태가 업승므로 각 요청과 응답은 독립적으로 일어난다.
사용자와 사이트의 상호작용을 위해 사용자의 상태를 세션으로 남긴다.
11.2 HTTP 헤더
사용자에 대한 정보를 전달하는 7가지 HTTP 헤더
- From 헤더
: 이메일 주소를 포함한다. 악의적 사용(스팸 메일 등) 문제가 있어 활용이 적다.
- User-Agent 헤더
: 사용자의 브라우저 이름과 버전정보, 경우에 따라 운영체제에 대한 정보
- Referer 헤더
: 사용자가 현재 페이지로 유입하게 한 웹페이지의 URL
- Authorization
- Client-ip
- X-Forwarded-For
- Cookie
11.3 클라이언트 IP 주소
클라이언트 ip 주소로 사용자를 식별하는 방식은 다음의 약점이 있다
- 사용하는 컴퓨터를 가리키기 떄문에, 공용 사용 컴퓨터에 대해서는 식별하기 힘들다.
- 인터넷 서비스 사용자(ISP)는 동적으로 IP주소를 할당한다.
- 많은 사용자는 방화벽을 사용한다.
- 프락시가 있을 경우 서버는 프락시의 ip를 본다.
11.4 사용자 로그인
웹 서버는 사용자의 이름, 비밀번호로 인증할 것을 요구할 수 있다.
11.5 뚱뚱한 URL
사용자의 상태 정보를 포함하고 있는 URL
문제점
- 못생긴 URL
- 공유하지 못하는 URL
: URL이 사용자의 세션에 대한 정보가 있으므로 공유 불가
- 캐시 사용 불가
: URL이 달라지므로 기존 캐시에 접근 불가
- 서버 부하 가중
: 뚱뚱한 URL에 해당하는 페이지를 다시 그려야 한다.
- 이탈
: 사용자가 다른 페이지로 이탈하기 쉬운데, 그럼 다시 뚱뚱한 URL로 돌아오기가 힘들다.
- 세션간 지속성의 부재
: 로그아웃하면 모든 정보를 잃는다.
11.6 쿠키
식별하는 방법들 중 가장 널리 사용하는 방식
쿠키는 캐시와 충돌할 수 있어서, 쿠키에 있는 내용물을 캐싱하지 않는다
11.6.1 쿠키의 타입
쿠키는 파기되는 시점에 따라 세션 쿠키(임시쿠키) , 지속 쿠키 로 나눌 수 있다.
지속 쿠키는 브라우저 종료, 하드웨어 재시작에도 남아있다.
임시 쿠키는 브라우저 종료시 만료된다.
11.6.2 쿠키는 어떻게 동작하는가
쿠키는 키 = 벨류 혀애의 리스트를 가지고 Set-Cookie 같은 HTTP 응답 헤더에 기술된다.
11.6.3 쿠키 상자: 클라이언트 측 상태
'클라이언트 측 상태' = 브라우저가 쿠키 정보를 저장할 책임
Cookies 파일의 각 쿠키들
- creation_utc
: 쿠키가 생성된 시점
- host_key
: 쿠키의 도메인
- name
: 쿠키의 이름
- value
: 쿠키의 값
path
: 도메인에 있는 경로
expire_utc
: 쿠키의 파기 시점, 초 단위
secure
: SSL 커넥션일 경우에만 보낼 지에 대한 정보
11.6.4 사이트마다 각기 다른 쿠키들
브라우저는 각 사이트에 2~3개의 쿠키만을 보낸다.
- 쿠키를 모두 전달하면 성능이 크게 저하되고,
- 쿠키가 모든 사이트에 통용되지 않고,
- 개인정보 문제를 일으킬 수 있기 때문이다.
이를 Set-Cookie 응답 헤더에 Domain 속성, Path 속성을 통해 기술할 수 있다.
11.6.6 Version 0(넷스케이프) 쿠키 명세
Version 0 쿠키 명세 = Set-Cookie 응답 헤더, Cookie 요청 헤더, 쿠키 조작 시 필요한 필드
Set-Cookie 속성
- 이름 = 값
: 필수 속성
- Expires
: 선택적 속성. 쿠키의 생명주기 관련. 없으면 세션이 끝날 때 파기
- Domain
: 선택적 속성. 특정 도메인에만 쿠키 제한적으로 전달
- Path
: 선택적 속성. 서버에 있는 특정 문서에만 쿠키를 할당 가능.
- Secure
: 선택적 속성. SSL 보안 연결을 사용할 때만 쿠키 전송
11.6.8 쿠키과 세션 추적
쿠키는 수차레 트랜잭션을 만들어내는 사용자를 추적하는 데 사용한다.
11.6.9 쿠키와 캐싱
캐시를 다루는데 기본 원칙
- 캐시되지 말아야 할 문서가있다면 표시하라
: Cashe-Control 을 통해 가능
- Set-Cookie 헤더를 캐시 하는 것에 유의하라
- Cookie 헤더를 가지고 있는 요청을 주의하라
: 보수적인 캐시는 매번 재검사를 하도록 강제하는 것이 효율적이다.
11.6.10 쿠키, 보안 그리고 개인정보
개인정보를 다루는 기술은 잘못된 의도로 사용될 수 있기 때문에 조심해야하며, 가장 큰 오용은 지속 쿠키를 사용하는 것이다.
개인정보 정책에 유의하여 잘 사용한다면 쿠키는 위험성보다 트랜잭션상의 편리함이 더 크다.