Effective-Java-Camp / http-the-definitive-guide

[DONE] HTTP 완벽 가이드 스터디 레포지토리
0 stars 0 forks source link

[3부 11장] 클라이언트 식별과 쿠키 #12

Open vo0a opened 2 years ago

vo0a commented 2 years ago

서버들은 서버와 통신하고 있는 클라이언트를 추적해야 할 수도 있다. 이 장에서는 서버가 통신하는 대상을 식별하는 데 사용하는 기술을 알아본다.

11.1 개별 접촉

개별 인사

사용자 맞춤 추천

저장된 사용자 정보

세션 추적

이 장에서는 다음과 같은 사용자 식별 기술을 논의한다.

11.2 HTTP 헤더

사용자에 대한 정보를 전달하는 가장 일반적인 일곱 가지 HTTP 요청 헤더.

From 헤더

User-Agent 헤더

Referer

From, User-Agent, Refere 헤더는 사용자를 확실히 식별하기엔 정보가 부족하다.

11.3 클라이언트 IP 주소

클라이언트 IP 주소로 사용자를 식별하는 방법의 약점

  1. 클라이언트 IP 주소는 사용자가 아닌 사용자 컴퓨터를 가리킨다. 여러명이 한 컴퓨터를 이용할 경우 각각의 사용자를 식별할 수 없다.
  2. 많은 ISP는 사용자가 로그인하면 동적으로 IP를 할당한다.
  3. 보안을 강화하고 부족한 주소들을 관리하려고 많은 사용자가 NAT 방화벽을 통해 인터넷을 사용한다. NAT 장비들은 클라이언트의 실제 IP 주소를 방화벽 뒤로 숨기고, 클라이언트의 실제 IP 주소를 내부에서 사용하는 방화벽 IP 주소로 변환한다.
  4. 보통, HTTP 프락시와 게이트웨이는 원 서버에 새로운 TCP를 연결한다. 웹 서버는 클라이언트의 IP 주소 대신 프락시의 IP 주소를 본다.일부 프락시는 클라이언트의 IP 주소를 보존하기 위해 Client-Ip나 X-Forward-For HTTP 같은 헤더를 사용하지만 모든 프락시가 이런식으로 동작하진 않는다.

11.4 사용자 로그인

![image](https://user-images.githubusercontent.com/44438366/190902101-cb2f1166-8dca-45e6-960c-3c694f03169b.png)

11.5 뚱뚱한 URL

뚱뚱한 URL은 사이트를 브라우징하는 사용자를 식별할 수 있지만, 다음과 같은 문제가 있다.

못생긴 URL

공유하지 못하는 URL

캐시를 사용할 수 없음

서버 부하 가중

이탈

세션 간 지속성의 부재

11.6 쿠키

1) 쿠키의 타입

2) 쿠키는 어떻게 동작하는가

![image](https://user-images.githubusercontent.com/44438366/190902280-a9c68d6d-0932-415e-9fc5-aeb295928c06.png)

3) 쿠키상자: 클라이언트 측 상태

구글 크롬 쿠키

![image](https://user-images.githubusercontent.com/44438366/190902182-a7a8568e-de40-4e63-8b79-124ce1ace810.png)

마이크로소프트 인터넷 익스플로러 쿠키

4) 사이트마다 각기 다른 쿠키들

보통 브라우저는 쿠키를 생성한 서버에게만 쿠키에 담긴 정보를 전달한다. 많은 웹사이트는 광고를 관리하는 협력업체와 계약을 한다. 이 광고들은 웹 사이트 자체의 일부인 것처럼 제작되고, 지속 쿠키를 만들어낸다. 같은 광고사에서 제공하는 서로 다른 웹 사이트에 사용자가 방문하면, 지속 쿠키의 도메인이 같기 때문에 광고사 서버로 지속 쿠키가 전송된다.

이 기술에 Referer 헤더를 접목하여 방대한 사용자 데이터를 구축할 수 있다.

최신 브라우저들은 개인정보 설정 기능을 통해 협력업체의 쿠키 사용 방식에 제약을 가할 수 있도록 하고 있다.

Domain 속성

쿠키 Path 속성

5) 쿠키 구성요소

6) Version 0(넷스케이프) 쿠키

Version 0 Set-Cookie 헤더

Version 0 Cookie 헤더

7) Version 1 쿠키

8) 쿠키와 세션 추적

amazon.com에 접속하면 일어나는 트랜잭션들의 연속

a : 브라우저가 amazon.com의 루트 페이지를 처음 요청한다.

b : 서버는 클라이언트를 전자상거래 소프트웨어 URL로 리다이렉트 시킨다.

c : 클라이언트는 리다이렉트 URL로 요청을 보낸다.

d : 서버는 응답에 두 개의 세션 쿠키를 기술하고 사용자를 다른 URL로 리다이렉트 시키며, 클라이언트는 다시 이 쿠키들을 첨부하여 요청을 보낸다. 새로은 URL은 자체적으로 어떤 상태 정보를 가지고 있으므로 뚱뚱한 URL이다.

e : 클라이언트는 새로운 URL을 요청을 앞서 받은 두 개의 쿠키와 함께 보낸다.

f : 서버는 home.html 페이지로 리다이렉트 시키고 쿠키 두 개를 더 첨부한다.

g : 클라이언트는 home.html 페이지를 가져오고 총 네 개의 쿠키를 전달한다.

h : 서버는 콘텐츠를 보낸다.

https://github.com/kimmin-ko/HTTP-The-Definitive-Guide/blob/master/images/amazonSessionCookie.png?raw=true

9) 쿠키와 캐싱

캐시되지 말아야 할 문서가 있다면 표시하라

Set-Cookie 헤더를 캐시 하는 것에 유의하라

Cookie 헤더를 가지고 있는 요청을 주의하라

ruthetum commented 2 years ago

cache control public vs private : https://www.huskyhoochu.com/cache-control

cf. https://stackoverflow.com/questions/3492319/private-vs-public-in-cache-control