쿠릉쿠릉 쾅쾅
쿠릉쿠릉 쾅쾅
쿠릉쿠릉 쾅쾅
250x250
전체 방문자
오늘
어제
  • 분류 전체보기
    • HTML CSS
    • 잡담
    • 프로그래밍 꿀팁 사이트
    • 코딩 도서
    • [자바]
      • 디자인 패턴
      • 자바의 정석 - 3판
      • 자바
      • 자바 문법
    • git
    • [TDD]
    • 개발 서적 독후감
      • 클린 코더
      • 토비 스프링3
      • 객체지향의 사실과 오해
      • 모던 자바 인 액션
      • 엘레강트 오브젝트
    • CS
      • 운영체제
      • HTTP
    • [SQL]
      • SQL 기초
      • 혼자공부하는SQL
    • [ Spring ]
      • REST API
      • Spring Toy
      • Spring 에러
      • Spring
      • Spring 입문
      • Spring 핵심 원리
      • SpringMVC 1편
      • SpringMVC 2편
      • Spring Boot를 이용한 RESTful We..
      • Batch
    • [JPA]
      • JPA
      • JPA 에러
      • JPA 프로그래밍 - 기본편
      • 스프링 부트와 JPA 활용 1 - 웹 애플리케이..
      • 실전! 스프링 부트와 JPA 활용2 - API 개..
      • 실전! 스프링 데이터 JPA
      • 실전! Querydsl
    • 인텔리제이
    • [DB]
      • DB
      • H2
    • Gradle
    • 면접
    • [알고리즘]
      • 알고리즘
      • 자료구조
      • 자바 알고리즘 공부
    • [프로젝트]
    • 쿠릉식 객체지향 사고
    • 리눅스

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • SQL
  • 자료구조
  • REST API
  • 함수형인터페이스
  • 백준
  • 스프링
  • GitHub
  • java
  • 스프링부트
  • 깃허브
  • 재귀
  • 자바
  • JPA
  • Spring
  • http
  • springboot
  • MVC
  • 알고리즘
  • querydsl
  • Git

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
쿠릉쿠릉 쾅쾅

쿠릉쿠릉 쾅쾅

[HTTP] HTTP 헤더1 - 일반 헤더
CS/HTTP

[HTTP] HTTP 헤더1 - 일반 헤더

2022. 3. 2. 12:13
728x90

 

 

HTTP 헤더

  • HTTP 헤더는 HTTP 본문(body) 및 요청/응답에 대한 정보를 포함한다.
  • 헤더 필드 = 헤더 명 : 필드 값
    • 예) Host : www.google.com
    • 헤더 명은 대소문자 구문이 없다.

 

 

 

 

🔍 HTTP 헤더 용도

  • HTTP 전송에 필요한 모든 부가 정보를 담고있다.
  • 예) 메시지 바디 내용, 메시지 바디 크기, 압축, 인증, 요청 클라이언트, 서버 정보, 캐시 관리 정보.. 등등
  • 필요시 임의의 헤더를 추가할 수 있다.

 

 

 

🔍 HTTP 표현 헤더

  • 표현 = 표현 메타 데이터 + 표현 데이터
  • Representation = Representation Metadata + Representation Data
  • 과거에는 엔티티(Entity) 용어를 사용했으나 지금은 표현(Representation) 용어를 사용한다.

 

💡 HTTP 바디

  • 메시지 본문(message body)을 통해 표현 데이터를 전달한다.
  • 메시지 본문 = 페이로드(payload)
  • 표현은 요청이나 응답에서 전달할 실제 데이터를 의미한다.
  • 표현 헤더는 표현 데이터를 해석할 수 있는 정보를 제공한다.
    • 데이터 유형(html, json), 데이터 길이, 압축 정보 등등
  • 참고로 표현헤더는 표현 메타 데이터와 페이로드 메시지를 구분해야 한다.

 

 

💡 표현 헤더 종류

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

 

✔ Contexnt-Type

  • 표현 데이터의 형식 설명
  • 미디어 타입, 문자 인코딩
  • 예)
    • text/html; chaeset=utf-8
    • application/json
    • image/png

 

 

✔ Content-Encoding

  • 표현 데이터 인코딩
  • 표현 데이터를 압축하기 위해 사용한다.
  • 데이터를 전달하는 곳에서 압축후 인코딩 헤더를 추가한다.
  • 데이터를 읽는 쪽에서 인코딩 헤더의 정보로 압축을 해제한다.
  • 예)
    • gzip
    • deflate
    • identity
      • 압축 없이 그대로 전송

 

✔Content-Language

  • 표현 데이터의 자연 언어를 의미한다.
  • 예)
    • ko
    • en
    • en-US

 

✔Content-Length

  • 표현 데이터(바이트 단위)의 길이를 의미한다.
  • Transefer-Encoding(전송 코딩)을 사용하면 Content-Length를 사용하면 안된다.
    • 전송 코딩안에 Content-Length가 이미 포함되어 있기 때문이다.

 

 

🔍 협상 헤더 (Content Negotiation)

  • 클라이언트가 선호하는 표현 요청
  • 협상 헤더는 요청시에만 사용한다.
  • Accept : 클라이언트가 선호하는 미디어 타입 전달
  • Accept-Charset : 클라이언트가 선호하는 문자 인코딩
  • Accept-Encoding : 클라이언트가 선호하는 압축 인코딩
  • Accept-Language : 클라이언트가 선호하는 자연 언어

 

✔ Accecpt-Language 적용 전

 

✔ Accecpt-Language 적용 후

 

 

💡 협상과 우선순위1 - Quality Values(q) 값 사용

  • 0~1, 값이 클수록 높은 우선순위를 가진다.
  • 생략시 1 값을 가진다.
  • Accept-Language : ko-KR, ko;q=0.9, en-US;q=0.8, en;q=0.7
    • 1. ko-KR;q=1
    • 2. ko;q=0.9
    • 3. en-US;q=0.8
    • 4. en;q=0.7

 

💡 협상과 우선순위2 - 구체적일수록 우선순위가 높다.

  • 1. text/palin;format=flowed
  • 2. text/plain
  • 3. text/*
  • 4. */*

 

💡 협상과 우선순위3 - 구체적인 것을 기준으로 미디어 타입을 맞춘다.

  • Accept : text/*;q=0.3, text/html;q=0.7, text/html;level=1, text/html;level=2;q=0.4, */*;q=0.5
우선순위 Media Type Quality
1 text/html;level=1 1
2 text/html 0.7
3 text/plain 0.3
4 image/jpeg 0.5
5 text/html;level=2 0.4
6 text/html;level=3 0.7

 

 

🔍 전송 방식

  • 단순 전송
  • 압축 전송
  • 분할 전송
  • 범위 전송

 

 

💡 단순 전송

  • Content-Length를 통해 데이터의 길이를 명시하여 한 번에 보내고, 한 번에 받는다.
  • Content-Length를 알 수 있을 때 사용한다.

 

💡 압축 전송

  • 단순 전송과 비슷하지만, Content-Encoding을 통해 압축 방식을 헤더에 명시하고 본문에 압축된 메시지를 응답으로서 웹 브라우저에게 보낸다.

 

💡 분할 전송

  • Content-Length 없이 Transfer-Encoding:chunked를 명시하여 분할하여 보낸다.
  • 분할 전송시 헤더에 Content-Length가 존재하면 안된다.
  • 마지막 메시지의 \r\n은 전송의 끝을 알리는 용도다.

 

💡 범위전송

  • 클라이언트가 특정 범위를 지정해서 요청을 보내면 서버에서 해당 범위만큼 응답이 온다.

 

 

🔍 일반 정보를 제공하는 헤더 (정보성 헤더)

  • Form : 유저 에이전트의 이메일 정보
  • Referer : 이전 웹 페이지 주소
  • User-Agent : 유저 에이전트 애플리케이션 정보
  • Server : 요청을 처리하는 오리진 서버의 소프트웨어 정보
  • Date : 메시지가 생성된 날짜

 

💡 Form

  • 유저 에이전트의 이메일 정보
  • 검색 엔진 곳에서 주로 사용된다.
  • 요청에서 사용한다.
  • 일반적으로 잘 사용되지 않는다.

 

💡 Referer

  • 현재 요청된 페이지의 이전 웹 페이지 주소
  • A → B로 페이지를 이동하는 경우 B를 요청할 때 Referer:A 정보를 헤더에 포함해서 요청한다.
  • Referer를 사용해서 유입 경로를 분석할 수 있다.
  • 요청에서 사용한다.
  • 자주 쓰인다.
  • 참고 : referer 단어는 referrer의 오타다. 하지만 그냥 그대로 쓰인다.

 

💡 User-Agent

  • 유저 에이전트란, 클라이언트 애플리케이션 정보(웹 브라우저 정보)다.
  • 통계 정보를 알 수 있다.
  • 어떤 종류의 브라우저에서 장애가 발생하는지 파악 가능하다.
  • 요청에서 사용한다.
  • 예) user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/ 537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36

 

💡 Server

  • 요청을 처리하는 ORIGIN(오리진) 서버의 소프트웨어 정보를 담고 있다.
    • ORIGIN 서버란, 클라이언트 요청의 최종 도착지이며, HTTP 응답을 보내주는 서버
  • 응답에서 사용한다.
  • 예)
    • Server : Apache/2.2.22(Debian)
    • Server : nginx

 

💡 Date

  • 메시지가 발생한 날짜와 시간을 담고 있다.
  • 예) Date : Tue, 15 Nov 1994 08:12:31 GMT
  • 응답에서 사용한다.

 

 

🔍 특별한 정보를 제공하는 헤더

  • Host : 요청한 호스트 정보(도메인)
  • Location : 페이지 리다이렉션
  • Allow : 허용 가능한 HTTP 메서드
  • Retry-After : 유저 에이전트가 다음 요청을 하기까지 기다려야 하는 시간

 

💡 Host

  • 요청한 호스트 정보(도메인)를 담고 있다.
  • 헤더에서 필수로 존재해야한다.
  • 요청에서 사용한다.
  • 하나의 서버가 여러 도메인을 처리할 때 도메인을 구분하기 위해서 사용한다.
  • 하나의 IP 주소에서 여러 도메인이 적용되어 있을 때 도메인을 구분하기 위해서 사용한다.

 

💡 Location

  • 페이지를 리다이렉션할 때 이동할 주소로 쓰인다.
  • 웹 브라우저는 3xx 상태코드의 응답결과에 Location 헤더가 있으면 Location 위치로 자동 이동(리다이렉트)한다.
    • 3xx 상태코드에서 Location 값은 요청을 자동으로 리다이렉션하기 위한 대상 리소스를 의미한다.
  • 201(Created) 응답 결과에 Location 값이 헤더에 존재하면 요청에 의해 생성된 리소스 URI로 이동한다.

 

💡 Allow

  • 허용 가능한 HTTP 메서드 정보를 담고 있다.
  • 405(Method Not Allowed) 상태코드의 응답에 포함되어 있어야 한다.
  • 예) Allow : GET, HEAD, PUT
  • 잘 쓰이지는 않는다.

 

💡 Retry-After

  • 유저 에이전트가 다음 요청을 하기까지 기다려야 하는 시간을 담고있다.
  • 503(Service Unavailable) 상태코드의 응답에 포함되어 있어야 한다.
  • 예)
    • Retry-After: Fri, 31 Dec 1999 23:59:59 GMT (날짜로 표기)
    • Retry-After: 120 (초 단위로 표기) 

 

 

🔍 인증

  • Authorization : 클라이언트 인증 정보를 서버에 전달
  • WWW-Authenticate : 리소스 접근시 필요한 인증 방법 정의

 

💡 Authorization

  • 클라이언트 인증 정보를 서버에 전달한다.
  • 예) Authorization: Basic xxxxxxxxxxxx

 

💡 WWW-Authenticate

  • 리소스 접근시 필요한 인증 방법이 정의되어 있다.
  • 401(Unauthorized) 상태 코드의 응답과 함께 사용된다.
  • 예) WWW-Authenticate: Newauth realm="apps", type=1, title="Login to \"apps\"", Basic realm="simple"

 

 

🔍 쿠키

  • 쿠키란 서버가 사용자의 웹 브라우저에 전송하는 작은 데이터 조각을 의미한다.
  • 쿠키를 사용할 때 2가지 헤더를 사용한다.
  • Set-Cookie : 서버가 클라이언트로 쿠키를 전달한다. (응답)
  • Cookie : 클라이언트가 서버에서 받은 쿠키를 저장하고, HTTP 요청시 서버로 전달한다.

 

💡 쿠키 특징

  • 쿠키는 한개에 4KB까지 저장 가능하며, 최대 300개까지 저장할 수 있는 텍스트 파일이다.
  • 쿠키는 클라이언트에 저장된다.
  • 쿠키에는 이름, 값, 만료날짜, 경로 정보등이 들어있다.
  • 기본적으로 쿠키는 웹 브라우저가 종료되면 삭제된다. (만료 날짜를 지정하면 만료일이 되야 삭제된다.)
  • 웹 브라우저에 해당 서버의 쿠키 정보가 있으면 HTTP 요청(HTTP 헤더의 Cookie)에 무조건 담아 보낸다.

 

💡 쿠키 작동

 


 

  • 로그인 이후 웹 브라우저는 자동으로 요청을 보낼때 마다 쿠키를 조회해서 쿠키 정보를 보낸다.
  • 로그인 성공시 서버는 클라이언트한테 쿠키를 직접 주기보단 세션 키를 만들어서 서버의 데이터베이스에 저장하고, 세션 값을 클라이언트에 반환을 해준다. 그러면 클라이언트는 서버에 요청을 할 때 세션 id를 보낸다.

 

 

💡 쿠키 사용 이유

  • 필수적인 쿠키
    • 필수적인 쿠키는 페이지 탐색, 웹 사이트의 보얀 영역 접속, 그리고 검색을 포함한 웹사이트의 기본적인 기능의 활성화를 목적으로 사용되고 있다. 웹 사이트는 필수적인 쿠키 없이 최적화된 기능 수행이 불가능하므로, 쿠키는 이용자의 별도 동의 없이 활성화 되고 있다.
  • 기능 쿠키
    • 기능 쿠키는 웹 사이트가 접속자의 지역 및 언어 등 웹 사이트의 형태 및 외관에 영향을 줄 수 있는 접속자 설정을 저장하도록 허용하며, 접속자 설정에 따라 웹 사이트가 작동하도록 도움을 준다.
  • 성능 쿠키
    • 성능 쿠키는 정보의 익명 수집 및 보고를 통해 웹 사이트 운영자가 방문자와 웹사이트 사이의 상호작용을 이해하는데 도움을 준다. 유저와의 상화관계에 대한 통계자료를 제공함으로써 웹 사이트 운영자가 더욱 최적화된 웹 사이트를 개발하는데 기여한다.
  • 마케팅 쿠키
    • 마케팅 쿠키는 유저의 웹 사이트 방문 내역을 추적하며, 쿠키 제공자가 접속자의 경향 및 웹 사이트 이용 패턴을 파악한다. 그래서 유저에게 관련성 높은 광고나 제품을 제공하는데 기여한다.

 

 

💡 쿠키 정보

  • 예) set-cookie: sessionId=abcde1234; expires=Sat, 26-Dec-2020 00:00:00 GMT; path=/; domain=.google.com; Secure
  • 사용처
    • 사용자 로그인 세션 관리
    • 광고 정보 트래킹
  • 쿠키 정보는 항상 서버에 전송된다.
    • 네트워크의 추가 트래픽을 유발할 수 있다.
    • 최소한의 정보만 사용해야한다. (세션id, 인증 토큰)
    • 서버에 전송하지 않고, 웹 브라우저 내부에 데이터를 저장하고 싶으면 웹 스토리지(localStorage, sessionStorage)에 참고할 것
  • 주의
    • 보안에 민감한 데이터는 저장하면 안된다. (주민번호, 신용카드 번호 등등)

 

💡 쿠키 생명 주기

  • 예)
    • Set-Cookie: expires=Sat, 26-Dec-2020 04:39:21 GMT
      • 만료일이 되면 쿠키가 삭제된다.
      • 만료일은 GMT 시간 기준으로 설정할 것
    • Set-Cookie: max-age=3600 (3600초)
      • 0이나 음수를 지정하면 쿠키가 삭제된다.
    • 세션 쿠키 : 만료 날짜를 생략하면 브라우저 종료시까지만 유지된다.
    • 영속 쿠키 : 만료 날짜를 입력하면 해당 날짜까지 유지된다.

 

💡 쿠키 도메인

  • 명시 : 명시한 문서 기준 도메인 + 서브 도메인 포함
    • 예) domain=example.org
    • domain=example.org에서 쿠키가 생성된다.
    • example.org와 dev.example.org 등 서브 도메인에서도 쿠키 접근이 가능하다. 
  • 생략 : 현재 문서 기준 도메인만 적용된다.
    • example.org에서 쿠키를 생성하고 domain 지정을 생략한다.
    • example.org에서만 쿠키 접근 가능
    • dev.example.org 등 서브 도메인에서는 쿠키 미접근

 

💡 쿠키 경로 - Path

  • 예) path=/home
  • 이 경로를 포함한 하위 경로 페이지만 쿠키 접근 가능
  • 일반적으로 path=/ 루트로 지정한다.
  • 예)
    • path=/home 지정
    • /home → 쿠키 접근 가능
    • /home/level1 → 쿠키 접근 가능
    • /home/level1/level2 → 쿠키 접근 가능
    • /hello → 쿠키 접근 불가능

 

💡 쿠키 보안

  • Secure
    • 쿠키는 http, https를 구분하지 않고 전송한다.
    • 그러나 Secure를 적용하면 https인 경우에만 전송한다.
  • HttpOnly
    • XSS 공격 방지
    • 자바스크립트에서 접근이 불가능하다. (documen.cookie)
    • HTTP 전송에만 사용한다.
  • SameSite
    • XSRF 공격 방지
    • 요청 도메인과 쿠키에 설정된 도메인이 같은 경우에만 쿠키를 전송한다.

 

💡 세션이란,

  • 세션은 쿠키를 이용하는 하나의 방식이다.
  • 세션이란, 통신을 하기 위해 서로 연결된 순간부터 통신을 마칠떄 까지의 기간을 의미한다.
  • HTTP 세션이란, 클라이언트가 서버와 연결된 순간부터 웹 브라우저가 닫아 서버와의 HTTP 통신을 끝낼떄까지의 기간이다.
  • 세션 방식은 서버에 세션에 대한 정보(세션 상태, 클라이언트 상태, 세션 데이터 등)를 저장해놓고 세션 쿠키(고유한 세션 ID값)를 클라이언트에게 주어 서버가 클라이언트를 식별할 수 있도록 하는 방식이다.

 

✔ 세션 특징

  • 따로 용량 제한이 없다. (서버 능력에 따라 다르다.)
  • 서버에 세션 객체를 생성하며, 각 클라이언트 마다 고유한 세션 ID값을 부여한다.
  • 쿠키를 사용하여 세션 ID값을 클라리언트에 보낸다.
  • 웹 브라우저가 종료되면 세션 쿠기는 삭제된다.

 

✔ 세션 작동 방식

  • 클라이언트가 서버에 요청을 보내면 서버에서는 요청 헤더에서 쿠키(Cookie)를 확인하고 세션 ID가 있는지 확인한다.
  • 요청에 세션 ID가 없다면 서버에서 세션 ID를 생성하고 응답을 보낼 때 쿠키에 세션 ID를 담아 보낸다. (서버에서 가장 먼저 세션 객체를 생성하여 정보를 저장한다.)
  • 클라이언트는 응답에서 받은 세션 쿠키(세션 ID값)를 저장해두고, 매번 해당 서버에 요청을 보낼 때마다 세션 쿠기를 함께 보내서 자신이 누구인지 인증한다.
  • 세션 쿠키는 브라우저가 종료되면 삭제된다.

 

✔ 쿠키와 세션의 관계

  • 쿠키는 클라이언트(웹 브라우저)에 정보를 저장하고, 세션은 서버에 정보를 저장한다.
  • 쿠키와 세션은 서로 반대되는 개념처럼 보일 수 있으나 결국 세션은 쿠키를 이용하는 하나의 방식이다.
  • 쿠키와 세션은 방식의 차이일뿐 반대 개념이 아니다.
  • 쿠키는 stateless(무상태)한 HTTP 통신에서 클라이언트에게 정보(표시)를 주어 해당 클라이언트를 식별하기 위해 만들어졌다.
  • 하지만 클라이언트에 저장된다는 쿠키의 특징은 보안에 있어서 치명적인 단점이다.
  • 그래서 세션이라는 개념을 통해 중요한 정보는 서버에서 관리하고 클라이언트에게는 세션 쿠키(세션 ID)를 주어 식별이 가능하도록 한 것이다.
  • 세션이란, 서버에 정보를 저장하고 쿠키를 통해 클라이언트를 식별하는 방식이다.
  • 결론적으로 세션(통신을 시작하고 마칠 때까지의 기간)을 유지하는 위해 쿠키를 사용하는 것이다.

 

쿠키와 세션은 결국 목적(클라이언트에서 관리하냐, 서버에서 관리하냐)에 맞게 사용하면 된다.

클라이언트는 믿을 수 없기에 중요한 정보나 처리는 서버에서 다뤄야한다.

예를들어 쿠키는 쇼핑몰의 장바구니, 개인 설정(팝업창 표시 여부 등) 같은 것들에 많이 사용된다.

세션은 로그인 유지 등에 많이 사용된다.

 

 

 

 

 


👀 참고 자료

https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/dashboard

 

모든 개발자를 위한 HTTP 웹 기본 지식 - 인프런 | 강의

실무에 꼭 필요한 HTTP 핵심 기능과 올바른 HTTP API 설계 방법을 학습합니다., - 강의 소개 | 인프런...

www.inflearn.com

 

https://kobrekim.com/footer-ko-kr/cookie-policy-ko-kr/what-are-cookies-and-why-we-use-them-ko-kr/

 

쿠키란 무엇인가 / 쿠키를 사용하는 이유 | Kobre & Kim — Disputes and Investigations

쿠키란 무엇인가 / 쿠키를 사용하는 이유

kobrekim.com

 

https://noahlogs.tistory.com/38

 

[네트워크] HTTP 쿠키와 세션이란 ?

 HTTP 에는 쿠키라는 개념이 존재하는데, 이름부터가 친숙하고 귀엽다. 왜 쿠키라는 이름이 붙여졌을까에는 여러가지 이야기들이 있는데, 내가 처음 공부할 때 들었던 이야기는 헨젤과 그레텔

noahlogs.tistory.com

 

728x90

'CS > HTTP' 카테고리의 다른 글

[HTTP] HTTP 헤더2 - 캐시와 조건부 요청  (0) 2022.03.04
[HTTP] HTTP 상태코드  (0) 2022.03.01
[HTTP] HTTP 메서드  (0) 2022.02.28
[HTTP] HTTP 기본  (0) 2022.02.10
[HTTP] 인터넷 네트워크  (0) 2022.02.09
    'CS/HTTP' 카테고리의 다른 글
    • [HTTP] HTTP 헤더2 - 캐시와 조건부 요청
    • [HTTP] HTTP 상태코드
    • [HTTP] HTTP 메서드
    • [HTTP] HTTP 기본
    쿠릉쿠릉 쾅쾅
    쿠릉쿠릉 쾅쾅
    깃허브 주소 : https://github.com/kureung

    티스토리툴바