-
HTTP(6) - HTTP 헤더 (정보 및 쿠키)스프링/HTTP 기본 지식 2023. 2. 7. 13:11
일반 정보
1. From : 유저 에이전트의 이메일 정보
2. Referer : 이전 웹 페이지 주소
3. User-Agent : 유저 에이전트 애플리케이션 정보
4. Server : 요청을 처리하는 origin 서버의 소프트웨어 정보
5. Date : 메시지가 생성된 날짜
1. From
- 검색 엔진 같은 곳에서 사용
- 하지만 잘 사용되지 않음
2. Referer
- 현재 요청된 페이지 이전 웹 페이지 주소
- 웹 사이트에서 뒤로가기 버튼을 사용할 때 뒤로가지는 그런 기능을 작동함
- A에서 B로 이동하는 경우 B를 요청할 때 Referer : A를 포함해서 요청
- Referer를 사용해서 유입 경로 분석 가능 (데이터 분석할 때 내 웹사이트를 어느 경로로 들어왔지?? 등으로 사용)
- 많이 사용됨
3. User-Agent
- 클라이언트 애플리케이션 정보 (웹 브라우저 정보 등)
- 통계 정보
4. Server
- origin 서버 : 내 요청을 받는 진짜 서버 (통신할 때 사용되는 프록시 서버 등을 제외한 내가 요청한 서버)
5. Date
- 메시지가 발생한 날짜와 시간을 보여줌
- 요청이 아닌 응답에서만 사용
특별한 정보
1. Host : 요청한 호스트 정보 (도메인)
2. Location : 페이지 리다이렉션
3. Allow : 허용 가능한 HTTP 메서드
4. Retry-After : 유저 에이전트가 다음 요청을 하기까지 기다려야 하는 시간
1. Host
- 요청에서 사용, 필수적
- 하나의 서버가 여러 도메인을 처리해야 할 때
- 하나의 IP 주소에 여러 도메인이 있을 때
하나의 서버에 aaa.com, bbb.com, ccc.com 이라는 3개의 도메인이 있을 때
GET /hello HTTP/1.1
Host: aaa.com
을 통해 aaa.com으로 호스팅을 함
2. Location
- 웹 브라우저는 3xx 응답의 결과에 Location이 있으면, Location 위치로 자동 이동 (리다이렉트)
3. Allow
- 만약에 POST를 제공 안하는 곳에 POST를 할 경우
- 405 오류를 내리면서 Allow : GET, HEAD, PUT이라고 내려야함
- 잘 사용되지는 않음
4. Retry-After
- 503 : 서비스가 언제까지 불능인지 알려줄 수 있음
- Retry-After : 120으로 사용
- 하지만 오류가 났을 때 언제까지 불능인지 알 수 있는 방법이 없어서 잘 사용되지는 않음
인증
Authorization : 클라이언트 인증 정보를 서버에 전달
- Authorization: Basic xxxxxxxxxxxxx
WWW-Authenticate
- 인증이 제대로 안되면 401 오류를 남기고 이 헤드를 넘김
- WWW.Authenticate: Newauth realm="apps", type=1,
title="Login to \"apps\" ", Basic realm="simple" 등으로 클라이언트에 반환함
쿠키
1. Set-Coockie : 서버에서 클라이언트로 쿠키 전달(응답)
2. Cookie : 클라이언트가 서버에서 받은 쿠키를 저장하고, HTTP 요청시 서버로 전달
HTTP는 무상태 프로토콜이기 때문에 클라이언트오 서버가 요청과 응답을 주고 받으면 연결이 끊어진다.
클라이언트가 다시 요청하면 서버는 이전 요청을 기억하지 못하고, 클라이언트와 서버는 서로 상태를 유지하지 않는다.
로그인 된 상태에서 다시 웹 사이트에 접근하면 사용자를 기억 못해서 로그인 상태를 받아들이지 못한다.
대안
로그인을 하면
HTTP/1.1 200 OK
Set-Cookie: user=조찬희
위와 같은 코드로 쿠키 저장소에 user=조찬희로 저장
로그인 이후 웹 브라우저가 welcome 홈페이지에 들어가면 웹 브라우저는 cookie 값을 무조건 찾아서
GET /welcome HTTP/1.1
Cookie: user=조찬희
로 만들어줘서 서버에 보내주게 된다.
쿠키 사용시 특이점
- 최소한의 정보만 사용
- 네트워크 트래픽 추가 유발
- 서버에 전송하지 않고 웹 브라우저 내부에 저장하고 싶으면 웹 스토리지에 저장
- 보안에 민감한 데이터는 저장하면 안됨
쿠키 - 생명주기
- Set-Cookie: expires=Sat, 11-Feb-2023 07:23:11 GMT
- 만료일이 되면 쿠키 삭제
- Set-Cookie: max-age=3600()3600초
- 세션 쿠키 : 만료 날짜를 생략하면 브라우저 종료시 까지만 유지
- 영속 쿠키 : 만료 날짜를 입력하면 해당 날짜까지 유지
쿠키 - 도메인
1. 명시 - 명시한 문서 기준 도메인 + 서브 도메인만 포함
domain=example.org를 지정해서 쿠키를 생성하면
- example.org는 물론이고 dev.example.org도 쿠키 접근
2. 생략 - 현재 문서 기준 도메인만 적용
example.org에서 쿠키를 생성하고 domain 지정을 생략
- example.org에서만 쿠키 접근
- dev.example.org는 쿠키 미접근
쿠키 - 경로
- 이 경로를 포함한 하위 경로 페이지만 접근
- 일반적으로 path=/ 루트로 지정
- 예)
- path=/home 지정
- /home -> 가능
- /home/level1 -> 가능
- /home/level2 -> 가능
- /hello -> 불가능
쿠키 - 보안
1. Secure
- 쿠키는 http, https를 구분하지 않고 전송하는데 Secure를 적용하면 https인 경우에만 전송
2. HttpOnly
- XSS 공격 방지
- 자바스크립트에서 접근 불가, HTTP 전송에만 사용
3. SameSite
- XSRF 공격 방지
- 요청 도메인과 쿠키에 설정된 도메인이 같은 경우만 쿠키 전송
'스프링 > HTTP 기본 지식' 카테고리의 다른 글
HTTP(7) - HTTP 헤더 (캐시 제어 헤더, 프록시 캐시, 캐시 무효화) (0) 2023.02.07 HTTP(7) - HTTP 헤더 (캐시 검증헤더와 조건부 요청) (0) 2023.02.07 HTTP(5) - HTTP 헤더 (표현헤더, 협상, 전송 방식) (0) 2023.02.07 HTTP(4) - HTTP 상태코드 (0) 2023.02.06 HTTP(3) - API 설계 예 (0) 2023.02.05