메세지 본문(message body = payload)을 통해 표현(Representation) 데이터 전달
표현 헤더를 통해 표현 데이터를 해석
표현 데이터의 형식 설명
미디어 타입, 문자 인코딩
표현 데이터 압축하기 위해 사용
데이터를 전달하는 곳에서 압축 후 인코딩 헤더 추가
읽는 쪽에서 인코딩 헤더의 정보로 압축 해제
표현 데이터의 길이
바이트 단위
클라이언트가 선호하는 표현 요청
'데이터를 이렇게 주었으면 좋겠어 !' 라는 의미
Request에서만 사용
Accept, Accept-Charset, Accept-Encoding, Accept-Langugage etc..
우선 순위를 표현하기 위해 Quality Values(q) 값 사용
0~1, 클수록 높은 우선 순위, 구체적인 것이 우선
생략하면 1
예) Accept-Language : ko-KR,ko;q=0.9,un-US;q=0.8,en;q=0.7
유저 에이전트의 이메일 정보
잘 사용하지 않음
요청에서 사용
검색 엔진 같은 곳에서 주로 사용
현재 요청된 페이지의 이전 웹 페이지 주소
A -> B로 이동하는 경우, B를 요청할 떄 Referer: A를 포함해서 요청
유입 경로 분석 가능
요청에서 사용
클라이언트의 에플리케이션 정보(웹 브라우저 정보 등)
어떤 종류의 브라우저에서 장애가 발생하는지 파악 가능
요청에서 사용
요청을 처리하는 ORIGIN(진짜 요청이 있는 본 서버 != Proxy) 서버의 소프트웨어 정보
응답에서 사용
메세지가 발생한 날짜와 시간
응답에서 사용
요청한 호스트 정보(Domain)
필수
하나의 서버가 여러 도메인을 처리해야 할 때, 하나의 IP 주소에 여러 도메인 적용 되어 있을 때
위 그림처럼 하나의 IP에 여러 도메인 있을 수 있고 이를 식별하기 위해 사용
페이지 리다이렉션, 요청에 의해 생성된 리소스 URI
응답코드 3XX 시 Location 헤더의 값으로 리다이렉션
응답코드 201 - Created 시, 요청에 의해 생성된 리소스 URI
클라이언트 인증 정보를 서버에 전달
WWW-Authenticate : 리소스 접근시 필요한 인증 방법 정의
Set-Cookie : 서버에서 클라이언트로 쿠키 전달(응답)
Cookie: 클라이언트가 서버에서 받은 쿠키를 저장하고(브라우저에), HTTP 요청 시 서버로 응답
모든 요청에 쿠키 항상 포함
그림처럼 서버가 쿠키를 Set-Cookie 헤더를 이용해 전달하고, 클라이언트는 이후 요청 시 쿠키 저장소를 찾은 다음 Cookie 헤더에 이를 포함하여 요청
Expires : 만료일 GMT로 지정 - 만료일이 되면 쿠키 삭제
max0age : 초 단위로 지정 - 0이나 음수를 지정하면 쿠키 삭제
예) domain=example.org
명시한 문서 기준 도메인 + 서브 도메인 포함. 즉, 위에서 example.org의 하위 도메인까지
생략 시 현재 문서 기준 도메인만 적용
예)path=/home
이 경로를 포함한 하위 경로 페이지만 쿠키 접근
일반적으로 path=/루트 로 지정
반복 요청 데이터 저장 - 로컬, 프록시 서버에 저장 가능
캐시가 없다면 데이터가 변경되지 않아도 계속 네트워크를 통해 다운 받아야 함
캐시 적용 기간 동안 네트워크를 사용하지 않아도 됨
캐시 유효 시간이 초과하면, 서버를 통해 데이터를 다시 조회하고 캐시 갱신
캐시 유효시간 초과 후, 서버에 재요청 시, 다음 두가지 상황 발생
서버에서 기존 데이터 변경하지 않음
서버에서 기존 데이터를 변경 - 변경 시, 200 OK 이후 데이터 재 다운로드
데이터를 다시 전송 받는 대신, 저장해 두었던 캐시 재사용 가능
단, 클라이언트 데이터와 서버의 데이터가 같다는 사실 확인 필요
요청에 가지고 있는 최종 수정일을 보냄(if-modified-since)
변경되지 않았다면 304 Not Modified를 상태 코드로 보내고 변경 되었다면 200 OK
304 Not Modified 시, HTTP Body가 없음 - 헤더만 보냄
캐시 유효 시간이 초과해도 서버의 데이터가 갱신 되지 않으면 304 Not Modified + 헤더 메타 정보만 응답(Body X)
이후 클라이언트는 서버가 보낸 응답 헤더 정보로 캐시 메타 정보 갱신
클라이언트는 캐시에 저장되어 있는 데이터 재활용
네트워크 다운로드가 발생하지만 용량이 적은 헤더 정보만 다운로드로 실용적
시간 대신 이름으로 하는 ETag : If-None-Match 사용가능
캐시용 데이터에 임의의 고유한 이름을 달아둠
데이터가 변경되면 이 이름을 바꾸어서 변경
단순히 Etag만 보내서 같으면 유지, 다르면 다시 받음 !
캐시 제어 로직을 서버에서 완전히 관리 - 클라이언트는 단순 값을 제공하여 캐시 메커니즘을 모름
사용 예시