
💡 header-field =
field-name:OWSfield-valueOWS
OWS: 띄어쓰기 허용field-name은 대소문자 구분 없음.


메세지 본문(message body)은 엔티티 본문(entity body)를 전달하는데 사용한다. 엔티티 본문은 요청이나 응답에서 전달할 실제 데이터를 의미한다.Entity) → 표현(Representation)Representation = representation Metadata + Representation Data

Content-Type: 표현 데이터의 형식Content-Encoding: 표현 데이터의 압축 방식Content-Language: 표현 데이터의 자연 언어Content-Length: 표현 데이터의 길이표현 헤더는 전송, 응답 둘 다 사용한다.

표현 데이터의 형식 설명

표현 데이터 인코딩

표현 데이터의 자연 언어

표현 데이터의 길이
Transfer-Encoding(전송 코딩)을 사용하면 Content-Length를 사용하면 안된다. 💡 협상
: 클라이언트가 선호하는 표현 요청
- 클라이언트와 서버 간에 클라이언트가 원하는 우선순위대로 맞춰서 서버에서 표현 데이터를 만들어 주는 것.
- 클라이언트에서 요청시에 작성하는 것이기에 요청에만 사용한다.
Accept: 클라이언트가 선호하는 미디어 타입 전달Accept-Charset: 클라이언트가 선호하는 문자 인코딩Accept-Encoding: 클라이언트가 선호하는 압축 인코딩Accept-Language: 클라이언트가 선호하는 자연 언어
Accept-Language)이 안되있을 경우
클라이언트에서 Accept-Language로 KO를 작성해 요청하면 서버에서는 해당 우선순위 언어를 지원할 수 있기 때문에 해당 언어인 한국어로 된 응답을 작성해 반환해준다.

응답할 때 메세지 바디에 대한
Content-Length를 지정하는 것

서버에서 메세지 바디를
gzip같은 방식을 이용해 압축해서 전달하는 방식
Content-Encoding이라는 항목을 헤더에 넣어서 어떻게 압축했는지 알려줘야 한다. 
chunked라고 불리는 덩어리로 쪼개서 보내는 방식
Content-Length를 넣으면 안된다.(길이를 예측할 수 없기 때문)
중간에 전송이 끊긴 경우, 처음부터 보내면 아까우니까 범위를 지정해서 전송하는 것.
이미지와 같이 용량이 큰 데이터를 받을 때 중간에 전송이 끊겼을 경우 범위를 지정해서 요청하면 매번 끊길 때마다 새로 받을 필요없이 특정 범위부터 응답해서 속도를 높일 수 있다.
유저 에이전트의 이메일 정보
현재 요청된 페이지의 이전 웹 페이지 주소
Referer: A를 포함해서 요청한다.Referer를 사용해서 유입 경로 분석이 가능하다.유저 에이전트 애플리케이션 정보
요청을 처리하는
ORIGIN서버의 소프트웨어 정보
메세지가 발생한 날짜와 시간

요청한 호스트 정보(도메인)
페이지 리다이렉션
Location 헤더가 있으면, Location 위치로 자동 이동한다.201(Created): Location 값은 요청에 의해 생성된 리소스 URI이다.3xx(Redirection): Location 값은 요청을 자동으로 리디렉션 하기 위한 대상 리소스를 가리킨다.허용 가능한 HTTP 메서드
405(Method Not Allowd)에서 응답에 포함해야 한다.GET, HEAD, PUT 유저 에이전트가 다음 요청을 하기까지 기다려야 하는 시간
503(Service Unavailable): 서비스가 언제까지 불가능한지 알려줄 수 있다.Authorization: 클라이언트 인증 정보를 서버에 전달WWW-Authenticate: 리소스 접근시 필요한 인증 방법 정의쿠키란 서버가 사용자의 웹 브라우저에 전송하는 작은 데이터 조각. 브라우저는 이 데이터 조각들을 저장해 놓았다가 동일한 서버에 재요청시 저장된 데이터를 함께 전송한다.
Set-Cookie: 서버에서 클라이언트로 쿠키 전달(응답)Cookie: 클라이언트가 서버에서 받은 쿠키를 저장하고, Session Management)Personalization)Tracking)
로그인 후 welcome 페이지에 접속하면,"안녕하세요. [닉네임]" 이렇게 해주기를 바라지만, 서버에서는 이게 로그인한 유저가 보낸 요청인지 알 수 없다.
이것은 바로 HTTP가 무상태 프로토콜(Stateless Protocol)이기 때문이다!

원하는 형태로 나오게 하기 위해서는 위와 같이 모든 요청에 사용자 정보를 포함해줘야 할 것이다.

한두 번은 괜찮겠지만, 이 과정을 100번 이상해야 한다면,,,?

정말 너무 귀찮을 것이다! 😣
이를 위해서 쿠키를 사용하는 것이다!

Set-Cookie로 로그인 정보를 담아 응답한다. Set-Cookie에 있는 정보를 저장한다. 
그래서 로그인 이후 welcome 페이지에 접근하면 쿠키를 조회해서 쿠키값을 Cookie에 담아서 보낸다.

이제 모든 요청에 쿠키 정보를 자동으로 포함하게 된다!