HTTP 메시지 = HTTP 헤더 + HTTP 바디
✅ HTTP 헤더의 용도
Content-Type
: 표현 데이터의 형식
-> ex) text/html; charset=utf-8
application/json
등
Content-Encoding
: 표현 데이터의 압축 방식
-> ex) gzip
Content-Language
: 표현 데이터의 자연 언어
-> ex) ko
en
en-US
Content-Length
: 표현 데이터의 길이
-> ex) 5
와 같은 정수
✅ HTTP BODY
✅ HTTP 전송방식
단순전송, 압축전송, 분할 전송, 범위 전송
✅ 일반 정보
From
: 유저 에이전트의 이메일 정보
-> 검색 엔진 같은 곳에서, 주로 사용, 요청에서 사용
Referer
: 이전 웹 페이지 주소
-> 현재 요청된 페이지의 이전 웹 페이지 주소
-> Referer를 사용해서 유입 경로 분석 가능
-> 요청에서 사용
User-Agent
: 유저 에이전트 애플리케이션 정보
-> Mozilla/5.0(Intel Mac OS X 10_15_7) AppleWebKit/537.36(KHTML,Gecko) Chrome/86.0 Safari
-> 클라이언트의 어플리케이션 정보(웹 브라우저 정보)
-> 통계 정보
-> 어떤 종류의 브라우저에서 장애가 발생하는지 파악 가능
-> 요청에서 사용
Server
: 요청을 처리하는 ORIGIN 서버의 소프트웨어 정보
-> ex) Apache/2.2.22
-> 응답에서 사용
Date
: 메시지가 발생한 날짜와 시간
-> ex) Tue, 15 Nov 1994 08:12:31 GMT
-> 응답에서 사용
✅ 특별한 정보
Host
: 요청한 호스트 정보(도메인)
-> 요청에서 사용
-> 필수 값임
-> 하나의 IP 주소에 여러 도메인이 적용되어 있을 때 (Host 값으로 각 도메인을 구분해줌)
Location
: 페이지 리다이렉션
Allow
: 허용 가능한 HTTP 메소드
Retry-After
: 유저 에이전트가 다음 요청을 하기까지 기다려야 하는 시간
✅ 인증 정보
Authorization
: 클라이언트 인증 정보를 서버에 전달
WWW-Authenticate
: 리소스 접근시 필요한 인증 방법 정의
✅ 캐시 장점
✅ 캐시 제어 헤더
Cache-Control, Pragma, Expires 가 있지만 Cache-Control의 캐시 만료일 지정이 가장 유연함
Cache-Control
(캐시 지시어)검증 헤더
ETag
, Last-Modified
조건부 요청 헤더
If-Match
, If-None-Match
-> ETag 값 사용If-Modified-Since
, If-Unmodified-Since
-> Last-Modified 값 사용✅ 프록시
, 프록시 서버
프록시
는 클라이언트와 서버 사이에 대리로 통신을 수행하는 것이며, 그 중계 기능을 하는 서버를
프록시 서버
라고 한다.
여러 클라이언트가 미국에 있는 원 서버에 있는 특정한 데이터가 필요한 상황이라고 가정!
정보를 가져오기 위해서는 많은 시간이 소요된다
하지만 원 서버
와 한국 클라이언트
의 중간에 위치한 한국의 캐시 서버가 있다면 시간을 줄일 수 있다.
여기서 한국의 캐시 서버 = 프록시 캐시 서버
여러 사람이 찾은 자료일수록 캐시에 이미 등록되어 있으면 빠른 속도로 데이터를 가져올 수 있다
국내에 프록시 캐시 서버
가 있기 때문에 외국의 원 서버
에서 데이터를 가져오는 것보다 빠르다
클라이언트에서 사용하고 저장하는 캐시 = private 캐시
프록시 캐시 = public 캐시
✅ 캐시 무효화 지시 방법
Cache-Control: no-cache
Cache-Control: no-store
Cache-Control: must-revaildate
Pragma: no-cache
no-cache
와 must-revaildate
의 차이점만약 프록시 캐시 서버와 원 서버 사이에서 네트워크 단절이 일어나 접근이 불가능하다면, no-cache에서 오류가 아닌 오래된 데이터라도 보여주자라는 개념으로 200OK
을 응답으로 내보낸다.
must-revaildate
는 만약 접급이 불가능 하다면 504
(Gateway Timeout)라는 오류를 내보낸다. 중요한 정보를 사용할 경우 예전 데이터를 보여준다면 큰 문제가 발생하기 때문에 이러한 경우는 must-revaildate
를 적용