반응형
Jake Seo
제이크서 위키 블로그
Jake Seo
전체 방문자
오늘
어제
  • 분류 전체보기 (715)
    • 일상, 일기 (0)
    • 백준 문제풀이 (1)
    • 릿코드 문제풀이 (2)
    • 알고리즘 이론 (10)
      • 기본 이론 (2)
      • 배열과 문자열 (8)
    • 데이터베이스 (15)
      • Planet Scale (1)
      • MSSQL (9)
      • 디비 기본 개념 (1)
      • SQLite 직접 만들어보기 (4)
    • 보안 (7)
    • 설계 (1)
    • 네트워크 (17)
      • HTTP (9)
      • OSI Layers (5)
    • 회고 (31)
      • 연간 회고 (2)
      • 주간 회고 (29)
    • 인프라 (52)
      • 도커 (12)
      • AWS (9)
      • 용어 (21)
      • 웹 성능 (1)
      • 대규모 서비스를 지탱하는 기술 (9)
    • 깃 (7)
    • 빌드 도구 (7)
      • 메이븐 (6)
      • 그레이들 (0)
    • Java (135)
      • 이펙티브 자바 (73)
      • 자바 API (4)
      • 자바 잡지식 (30)
      • 자바 디자인 패턴 (21)
      • 톰캣 (Tomcat) (7)
    • 프레임워크 (64)
      • next.js (14)
      • 스프링 프레임워크 (28)
      • 토비의 스프링 (6)
      • 스프링 부트 (3)
      • JPA (Java Persistence API) (5)
      • Nest.js (8)
    • 프론트엔드 (48)
      • 다크모드 (1)
      • 노드 패키지 관리 매니저 (3)
      • CSS (19)
      • Web API (11)
      • tailwind-css (1)
      • React (5)
      • React 새 공식문서 요약 (1)
      • HTML (Markup Language) (5)
    • 자바스크립트 (108)
      • 모던 자바스크립트 (31)
      • 개념 (31)
      • 정규표현식 (5)
      • 코드 스니펫 (1)
      • 라이브러리 (6)
      • 인터뷰 (24)
      • 웹개발자를 위한 자바스크립트의 모든 것 (6)
      • 팁 (2)
    • Typescript (49)
    • 리눅스와 유닉스 (10)
    • Computer Science (1)
      • Compiler (1)
    • IDE (3)
      • VSCODE (1)
      • IntelliJ (2)
    • 세미나 & 컨퍼런스 (1)
    • 용어 (개발용어) (16)
      • 함수형 프로그래밍 용어들 (1)
    • ORM (2)
      • Prisma (2)
    • NODEJS (2)
    • cypress (1)
    • 리액트 네이티브 (React Native) (31)
    • 러스트 (Rust) (15)
    • 코틀린 (Kotlin) (4)
      • 자바에서 코틀린으로 (4)
    • 정규표현식 (3)
    • 구글 애널리틱스 (GA) (1)
    • SEO (2)
    • UML (2)
    • 맛탐험 (2)
    • 리팩토링 (1)
    • 서평 (2)
    • 소프트웨어 공학 (18)
      • 테스팅 (16)
      • 개발 프로세스 (1)
    • 교육학 (1)
    • 삶의 지혜, 통찰 (1)
    • Chat GPT (2)
    • 쉘스크립트 (1)
    • 컴파일 (2)
    • Dart (12)
    • 코드팩토리의 플러터 프로그래밍 (4)
    • 플러터 (17)
    • 안드로이드 스튜디오 (1)
    • 윈도우즈 (1)
    • 잡다한 백엔드 지식 (1)
    • 디자인 패턴 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 메이븐 페이즈
  • 이펙티브 자바
  • 자료구조
  • next js app
  • 알고리즘
  • item7
  • item9
  • Javadoc 자바독 자바주석 주석 Comment
  • 메이븐 라이프사이클
  • Next.js
  • 자바 검증
  • 외래키 제약조건
  • 빈 검증
  • Pre-rendering
  • 자바 디자인패턴
  • 추상 팩터리 패턴
  • 프로그래머의 뇌
  • prerendering
  • 작업기억공간
  • 자바스크립트
  • 이펙티브자바
  • Java
  • 자바
  • NEXT JS
  • 도커공식문서
  • 플라이웨이트패턴
  • 싱글톤
  • 싱글턴
  • 참조 해제
  • 메이븐 골
  • 객체복사
  • 토비의 스프링
  • 슬로우 쿼리
  • 서버리스 컴퓨팅
  • pnpm
  • serverless computing
  • 팩터리 메서드 패턴
  • 러스트
  • 싱글톤 패턴
  • rust
  • 디자인패턴
  • 이펙티브 자바 item9
  • MSSQL
  • 느린 쿼리
  • 스프링 검증
  • item8
  • 자바스크립트 인터뷰
  • bean Validation
  • 자바스크립트 면접
  • try-with-resources

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Jake Seo

제이크서 위키 블로그

네트워크/HTTP

HTTP 헤더란? (Http headers)

2023. 4. 16. 11:41

HTTP 헤더란?

  • HTTP 통신의 핵심이 되는 중요한 컴포넌트 중 하나이다.
  • 요청 혹은 응답의 필수 구성요소이다.
  • 클라이언트와 서버 간의 메세지 전송 및 해석을 돕기 위해 메타데이터와 추가 정보를 제공한다.

HTTP 헤더 포맷의 특징

  • 키-밸류 (key-value) 쌍으로 이루어져 있다.
  • 순수한 텍스트 (plain text) 로 이루어져 있고, 특정한 문법을 따른다.
  • 콜론(:) 과 스페이스() 로 구분된다.
  • 각 헤더는 하나의 줄로 표현되고, 각 줄은 하나의 헤더 필드를 나타낸다.

보통 아래처럼 생겼다.

네이버의 요청 헤더 (Request Header) 예시

:authority: www.naver.com
:method: GET
:path: /
:scheme: https
accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
accept-encoding: gzip, deflate, br
accept-language: en-US,en;q=0.9
cache-control: max-age=0
cookie: PM_CK_loc=3c860616080e1d3213ae4c2aae7241c88ed50197fa2a85ace57cef8fb93d4169; SB_MODE=plusdeal; NNB=JDPYIFDNNA4WI
sec-ch-ua: "Google Chrome";v="111", "Not(A:Brand";v="8", "Chromium";v="111"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
sec-fetch-dest: document
sec-fetch-mode: navigate
sec-fetch-site: none
sec-fetch-user: ?1
upgrade-insecure-requests: 1
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36

네이버의 응답 헤더 (Response Header) 예시

cache-control: no-cache, no-store, must-revalidate
content-encoding: gzip
content-type: text/html; charset=UTF-8
date: Fri, 14 Apr 2023 14:51:28 GMT
p3p: CP="CAO DSP CURa ADMa TAIa PSAa OUR LAW STP PHY ONL UNI PUR FIN COM NAV INT DEM STA PRE"
pragma: no-cache
referrer-policy: unsafe-url
server: NWS
strict-transport-security: max-age=63072000; includeSubdomains
x-frame-options: DENY
x-xss-protection: 1; mode=block

HTTP 헤더의 타입

타입에 따라 일부 헤더는 요청과 응답 모두에 적용 가능하고, 몇몇 헤더는 요청이나 응답 둘 중 하나에만 적용 가능하다.

일반 헤더 (general header)

요청 응답에 모두 적용 가능한 헤더이다. 메시지, 연결 관리 (Connection Management), 캐싱 정책 등을 제공한다.

  • Date: 메세지가 생성된 날짜와 시간 등을 가리킨다.
    • ex) Date: Tue, 15 Nov 2022 08:12:31 GMT
  • Cache-Control: 클라이언트와 서버에서 메세지 캐싱이 어떻게 이루어질지 지시한다.
    • ex) Cache-Control: no-cache, no-store, must-revalidate
  • Connection: 커넥션 관리에 대해 명시한다. 트랜잭션 이후에 커넥션을 계속 살릴지 끊을지를 결정한다.
    • ex) Connection: keep-alive 혹은 Connection:close

커넥션의 관리 방법에 따라서 Cold TCP Connection 과 Warm TCP Connection 이 있다.

요청 헤더 (request header)

클라이언트가 서버에 요청할 때 이용되는 헤더이다. 클라이언트가 사용하는 언어정보 (languages), 유저 에이전트 (user agent) 와 받아들이는 미디어 타입에 대한 정보 (content-type) 등이 포함되어 있다.

  • User-Agent: 통신 시 어떤 브라우저 혹은 애플리케이션으로 접근했는지에 대해 명시한다.
    • ex) User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3
  • Accept: 클라이언트가 이해할 수 있고 처리할 수 있는 Media type (MIME type) 에 대해 명시한다.
    • ex) Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
  • Accept-Language: 클라이언트가 선호하는 언어에 대해 명시한다.
    • ex) Accept-Language: en-US,en;q=0.8
  • Host: 요청이 보내지는 도메인 이름과 포트에 대해 명시한다.
    • ex) HOST: www.example.com:80

응답 헤더 (response header)

서버의 응답에 대한 정보를 전달할 때 쓰이는 헤더이다. access control policies 혹은 쿠키와 같은 서버에 대한 정보를 포함한다.

  • Server: 요청을 처리하는 서버 소프트웨어에 대해 명시한다.
    • ex) Server: Apache/2.4.7 (Ubuntu)
  • Content-Type: HTTP 바디에 들어있는 메시지의 Media type (MIME type) 에 대해 명시한다.
    • ex) Content-Type: text/html; charset=UTF-8
  • Content-Length: 응답 HTTP 바디의 길이를 명시한다.
    • ex) Content-Length: 348
  • Set-Cookie: 서버에서 클라이언트로 쿠키를 줄 때 사용한다.
    • ex) Set-Cookie: sessionId=abc123; Expires=Wed, 21 Oct 2023 07:28:00 GMT;
    • 참고자료: HTTP 쿠키란?
  • Access-Control-Allow-Origin: cross-origin 요청에서 어떠한 origin 이 접근허용되었는지 명시한다.
    • ex) Access-Control-Allow-Origin: *

엔티티 헤더 (entity header)

보통 HTTP 바디에 대한 정보를 주기 위해 존재한다. 요청과 응답 헤더에서 모두 쓰인다.

  • Content-Type
  • Content-Encoding: 보통 압축 방식에 대한 정보를 주기 위해 사용된다.
    • ex) Content-Encoding: gzip
  • Content-Length

이 외에 존재하는 사용자 정의 헤더

  • 사용자 정의 헤더로 클라이언트와 서버 간의 추가 메타데이터 혹은 정보를 전달할 수 있다.
  • 단, 사용자 정의 헤더를 만들 때는 설명이 포함된 이름을 사용하고 다른 헤더와 중복되지 않는 이름을 사용하도록 각별히 주의하는 것이 좋다.

HTTP/2 의 의사 헤더 (pseudo-header)

  • :authority 와 같이 헤더의 이름이 : 으로 시작하는 헤더이다.
    • 앞에 : 를 붙여 기존 HTTP 커스텀 헤더와 충돌하지 않는 방식으로 만들어진다.
  • HTTP/2 프레이밍 매커니즘에서 중요한 역할을 한다.
  • HTTP/1 의 시작 줄 (Start line) 에 있던 정보를 옮겨온 것이다.

:authority

  • Host 헤더를 대체한다.
    • ex) :authority: www.example.com:80

:method

  • 요청 시 HTTP 메서드를 나타낸다.
    -ex) :method: GET

:path

  • 요청된 리소스의 경로를 나타낸다.
    • ex) :path: /index.html

:scheme

  • 프로토콜 스키마에 대해 명시한다.
    • ex) :scheme: https

:status

  • 응답 코드에 대해 명시한다.
    • ex) :status: 200
반응형
저작자표시 비영리 (새창열림)

'네트워크 > HTTP' 카테고리의 다른 글

HTTP/1 에서 HTTP/2 로 가면서 얻는 개선점들 (HTTP1 에서 HTTP2로)  (0) 2023.04.16
HTTP 응답 메세지의 구조  (0) 2023.04.15
HTTP 요청 메세지의 구조  (0) 2023.04.15
HTTP Content-Type 헤더란?  (0) 2023.04.14
HTTP MIME type 이란?  (0) 2023.04.14
    '네트워크/HTTP' 카테고리의 다른 글
    • HTTP/1 에서 HTTP/2 로 가면서 얻는 개선점들 (HTTP1 에서 HTTP2로)
    • HTTP 응답 메세지의 구조
    • HTTP 요청 메세지의 구조
    • HTTP Content-Type 헤더란?
    Jake Seo
    Jake Seo
    ✔ 잘 보셨다면 광고 한번 클릭해주시면 큰 힘이 됩니다. ✔ 댓글로 틀린 부분을 지적해주시면 기분 나빠하지 않고 수정합니다. ✔ 많은 퇴고를 거친 글이 좋은 글이 된다고 생각합니다. ✔ 간결하고 명료하게 사람들을 이해 시키는 것을 목표로 합니다.

    티스토리툴바