1) Set-Cookie: 서버->클라이언트 쿠키 전달(응답)
2) Cookie: 클라이언트가 서버에서 받은 쿠키를 저장, 클라이언트->서버 쿠키 전달(요청)### HTTP 헤더 개요

HTTP 헤더 용도

<HTTP 표준>
1) message body - RFC7230(최신)

http로 전송할 때, 어떠한 리소스를 html / json 등으로 표현해 전달함
<표현 헤더>
표현 헤더는 요청, 응답 메세지에서 모두 사용
1) Content-Type: 표현 데이터의 형식
2) Content-Encoding: 표현데이터의 압축 방식
3) Content-Language: 표현 데이터의 자연 언어
4) Content-Length: 표현 데이터의 길이
--> 표현 헤더는 전송, 응답 둘다 사용
1 . Content-Type
표현 데이터의 형식 설명
2. Content-Encoding
표현 데이터 인코딩
gzip - 요즘 많이 사용

3. Content-Language
표현 데이터의 자연 언어

4. Content-Length
표현 데이터의 길이

1. 콘텐츠 협상(Contents Negotiation)
클라이언트가 선호하는 표현 요청
2. Accept-Language
1) Accept-Language 적용 전
한국어 브라우저로 외국에 있는 /event 에 접속 요청을 보내면,
서버는 클라이언트가 어떤 언어를 요청하는지 알 수 없기 때문에, 기본 영어(en)로 브라우저에 응답한다.
2) Accept-Language 적용 후

한국어 브라우저로 외국에 있는 /event 에 Accept-Language: ko (한국어 선호) 로 접속 요청을 보내면,
서버는 기본 영어 외에 한국어를 지원하므로 한국어(ko)로 브라우저에 응답한다.
3) Accept-Language 복잡한 예시

한국어 브라우저로 외국에 있는 /event 에 Accpet-Language: ko (한국어 선호) 로 접속 요청을 보내면,
서버가 한국어를 지원하지 않으므로 기본 독일어(de)로 브라우저에 응답한다.
3. 협상과 우선순위1
<Quality Values(q)>

1) Accept-Language 복잡한 예시

한국어 브라우저로 외국에 있는 /event 에 Accept-Language: ko-KR (한국어 우선순위 1), ko;q=0.9,en-US;q=0.8,en;q=0.7 로 접속 요청을 보내면,
서버가 한국어를 지원하지 않으므로 다음 우선순위인 영어(en)로 브라우저에 응답한다.
4. 협상과 우선순위2
<Quality Values(q)>

5. 협상과 우선순위3
<Quality Values(q)>

HTTP 메시지 전송 방식



어떠한 이유로 중간에 재요청해야할 때, 범위를 지정하여 사용
(e.g. 서버로부터 데이터를 절반 정도 받은 상태에서 끊겼을 때 처음부터 다시 받을 필요X, 이후부분부터 받음)

Range: bytes=클라이언트가 요청한 데이터의 범위
Content-Range: bytes 클라이언트가 요청한 데이터의 범위 / 전체 데이터의 길이
Content-Length: 실제 전송된 데이터의 길이






1) Set-Cookie: 서버->클라이언트 쿠키 전달(응답)
2) Cookie: 클라이언트가 서버에서 받은 쿠키를 저장, 클라이언트->서버 쿠키 전달(요청)
1. 쿠키 미사용
1) 처음 welcome 페이지 접근
로그인하지 않은 사용자가 서버에 /welcom 을 요청하면, 서버는 ~손님을 응답한다.
2) 로그인
사용자가 id, password 정보를 담아 서버에 /login 을 POST로 요청하면, 서버는 로그인 성공 응답을 한다. 
3) 로그인 이후 welcome 페이지 접근
사용자가 로그인 이후 서버에 /welcome 을 요청하면, 서버는 로그인한 사용자임을 구분할 수 없기때문에 ~손님을 응답한다.

Q. 서버는 왜 로그인한 사용자임을 알 수 없는가?
A. HTTP는 무상태(Stateless) 프로토콜이다.
4) 대안 - 모든 요청과 링크에 사용자 정보 포함?
요청을 할 때마다 userId, password 유저 정보를 계속 서버에 보낸다
2. 쿠키 사용
1) 로그인
웹 브라우저가 id, password를 담아 POST로 /login을 서버에 요청하면,
서버는 Set-Cookie에 유저 정보를 담아 클라이언트에 응답한다.
--> 클라이언트 웹 브라우저의 쿠키 저장소에 쿠키를 저장한다.

2) 로그인 이후 welcome 페이지 접근
로그인 이후, 웹 브라우저가 자동으로 Cookie를 담아 /welcome을 서버에 요청하면,
서버는 쿠키를 확인해서 로그인한 유저를 확인하고 응답을 한다.

3) 해결 - 모든 요청에 쿠키 정보 자동 포함
로그인 이후, 웹 브라우저가 요청을 보낼 때 자동으로 쿠키 저장소에서 꺼낸 쿠키를 담아 요청을 보낸다!!

<쿠기 생성, 접근 과정 정리>
1) 웹 브라우저가 id, password를 담아 서버에 로그인을 요청함
2) 서버는 id, password 검증에 성공하면, 해당 사용자에 대한 sessionId(쿠키)를 생성함
3) 서버는 Set-Cookie에 sessionId를 담아 웹 브라우저에 로그인 성공을 응답함
4) 웹 브라우저는 쿠키 저장소에 sessionId(쿠키)를 저장함
5) 이후 웹 브라우저가 쿠키 접근가능한 도메인에 요청을 보낼 때마다 자동으로 쿠키 저장소에서 꺼낸 sessionId(쿠키)를 Cookie에 담아 서버에 요청을 보냄
6) 서버는 sessionId(쿠키)의 유효성을 검사해 클라이언트를 식별함
3. 쿠키

쿠키 정보는 항상 서버에 전송된다.
-> 네트워크 트래픽 추가 유발
-> 최소한의 정보만 사용(세션, ID, 인증 토큰
Q. 쿠키 정보를 서버에 전송하지 않고 클라이언트에서 그 정보를 갖고있는 방식을 쓰고 싶으면?(웹 브라우저 내부에 데이터를 저장하고 싶으면?)
쿠키 - 생명주기
expires, max-age
1) expires : 만료 날짜 설정

2) max-age : 초단위 설정

<쿠키 종류>
1) 세션 쿠키 - 만료 날짜를 생략하면 브라우저 종료시까지만 유지
2) 영속 쿠키 - 만료 날짜를 입력하면 해당 날짜까지 유지(브라우저가 종료되어도 클라이언트 시간이 남아있는 한 유지)
쿠키 - 도메인
domain
1) 명시: 명시한 문서 기준 도메인 + 서브 도메인 포함 적용
domain=example.org 를 지정하고 쿠키 생성
쿠키 - 경로
path

쿠키 - 보안
Secure, HttpOnly, SameSite
1) Secure
2) HttpOnly
3) SameSite