Develop/CS

HTTP 헤더 - 일반 헤더

연로그 2021. 2. 4. 17:41
반응형

목차

1. HTTP 헤더 정의

2. HTTP 표준

3. 표현 헤더

4. 협상 헤더

5. 헤더 전송 방식

6. HTTP 헤더 종류

7. 출처


HTTP 헤더

  • HTTP 전송에 필요한 모든 부가 정보
  • 메시지 바디 내용, 메시지 바디 크기, 압축, 인증, ...
  • 표준 헤더 多

 


(구) HTTP 표준 (2014~)

  • General 헤더: 메시지 전체에 적용되는 정보
  • Request 헤더: 요청 정보
  • Response 헤더: 응답 정보
  • Entity 헤더: 엔티티 바디 정보
HTTP/1.1 200 OK
<!--**********엔티티 헤더**********-->
  Content-Type: text/html;charset-UTF-8	
  Content-Length: 3423	
<!--*******************************-->

<!--**********메시지 본문**********-->
  <!--**********엔티티 본문**********-->
  	<html> ... </html>		
  <!--*******************************-->
<!--*******************************-->
  • 메시지 본문은 엔티티 본문을 전달하는데 사용
  • 엔티티 본문: 요청이나 응답에서 전달할 실제 데이터
  • 엔티티 헤더: 엔티티 본문의 데이터를 해석할 수 있는 정보 제공 (데이터 유형, 길이 등)

 

(신) HTTP 표준

HTTP/1.1 200 OK
<!--**********표현 헤더**********-->
  Content-Type: text/html;charset-UTF-8	
  Content-Length: 3423	
<!--*****************************-->

<!--**********메시지 본문**********-->
  <!--**********표현 데이터**********-->
  	<html> ... </html>		
  <!--*******************************-->
<!--*******************************-->
  • Entity -> Representation
  • Representation = Representation Metadata + Representation Data
  • 메시지 본문(=페이로드)을 통해 표현 데이터 전달
  • 표현: 요청이나 응답에서 전달할 실제 데이터
  • 표현 헤더: 표현 데이터를 해석할 수 있는 정보 제공

 


표현 헤더

Content-Type

  • 표현 데이터 형식
  • 미디어 타입, 문자 인코딩 지정
  • ex: text/html, ...

 

Content-Encoding

  • 표현 데이터 압축 방식
  • 데이터 전달하는 곳에서 압축 후 인코딩 헤더 추가
  • 데이터 읽는  쪽에서 인코딩 헤더의 정보로 압축 해제
  • ex: gzip, deflate, ...

 

Content-Language

  • 표현 데이터의 자연 언어
  • ex: ko, en, en-US, ...

 

Content-Length

  • 표현 데이터의 길이
  • 바이트 단위
  • Transfer-Encoding(전송 코딩) 사용 시, 사용 불가

 


협상 헤더

  • Contents Negotiation
  • 클라이언트가 선호하는 표현 요청
  • 요청 시에만 사용

 

  • Accept: client가 선호하는 미디어 타입 전달
  • Accept-Charset: client가 선호하는 문자 인코딩
  • Accept-Encoding: client가 선호하는 압축 인코딩
  • Accept-Language: client가 선호하는 자연 언어

 

Accept-Language 적용 전/후

적용 전

-> 사용자는 /event로 접근하면 서버는 default 값인 영어로 메시지 'hello!'를 내려준다.

 

적용 후

-> 사용자는 /event로 접근하며 Language를 ko로 달라고 했다. 서버는 ko 값을 받고, 메시지 '안녕하세요'를 보내준다.

-> ko가 없을 경우를 대비해 ko 외의 언어도 우선순위를 지정할 수 있다.

  • ex: ko-KR,ko;q=0.9,en-US;q=0.8

 

우선순위

  • 1에 가까울수록 우선. (생략할 경우 1로 간주)
  • 구체적인 것이 우선이다.
  1. text/plain;format=flowed
  2. text/plain
  3. text/*
  4. */*

 


헤더 전송 방식

단순 전송

 

압축 전송

- Content-Encoding 추가

 

분할 전송

- Content-Length를 알 수 없으므로 제거

- Transfer-Encoding: chunked 추가

- 마지막에는 0byte를 줘서 마지막임을 알려줌

 

범위 전송

- Content-Range

 


HTTP Header

From

  • 유저 에이전트의 이메일 정보 (클라이언트 사용자 메일 주소)
  • 일반적으로 잘 사용되지 않음
  • 간혹 이 정보를 User-Agent에 두는 경우도 있다.
  • 주 사용: 검색 엔진

 

Referer

  • 바로 직전에 머무른 웹 페이지의 주소
  • A -> B로 이동하는 경우 B를 요청할 때 Referer:A를 포함해 요청
  • Referer를 사용해 유입 경로 분석 가능
  • 요청에서 사용

 

User-Agent

  • user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 ...
  • 클라이언트의 애플리케이션 정보 (웹 브라우저 정보 등)
  • 통계 정보를 뽑기 좋음 (어떤 종류의 브라우저에서 사용하는지 파악 가능하므로)
  • 요청에서 사용

 

Server

  • server: Apache/2.2.22 (Debian)
  • 요청을 처리하는 ORIGIN 서버의 소프트웨어 정보
  • 응답에서 사용

 

Date

  • Date: Tue, 15 Nov 1994 08:13:31 GMT
  • HTTP 메시지가 발생(생성)한 날짜와 시간
  • 응답에서 사용

 

Host (★)

  • 요청한 호스트 정보 (도메인)
  • 하나의 서버가 여러 도메인을 처리해야 할 때
  • 하나의 IP 주소에 여러 도메인이 적용되어 있을 때
  • 요청에서 사용

- 서버는 가상 호스트를 통해 여러 도메인을 한번에 처리할 수 잇다.

- 실제 애플리케이션이 여러개 구동될 수 있다.

- client가 Host 헤더를 포함시켜 server에 전송한다.

- server는 Host 헤더를 통해 aaa.com임을 알고 aaa.com을 이용한다.

 

Location

  • 3xx 응답에 Location 헤더가 있으면 Location 위치로 자동 이동
  • 201 (Created): Location 값 = 요청에 의해 생성된 리소스 URI
  • 3xx (Redirection): Location 값 = 요청을 자동으로 리디렉션하기 위한 대상 리소스

 

Allow

  • Allow: GET, HEAD, PUT
  • 지원 가능한 HTTP 메소드 리스트
  • 405 (Method Not Allowed)에서 응답에 포함해야 한다.

 

Retry-After

  • Retry-After: 120 // 초단위 표기
  • Retry-After: Fri, 31 Dex 1999 23:32:32 GMT //  날짜 표기
  • 유저 에이전트가 다음 요청을 하기까지 기다려야 하는 시간
  • 503 (Service Unavailable): 서비스가 언제까지 불능인지 알려줄 수 있다.

 

Authorization

  • Authorization: Basic xxxxxxxxxxxxx
  • 클라이언트 인증 정보를 서버에 전달
  • value에 들어가는 값은 인증 방식에 따라 다르다.

 

 WWW-Authenticate

  • WWW-Authenticate:Newauth realm="apps", type=1, title, ....
  • 리소스 접근 시 필요한 인증 방법 정의
  • 401 Unauthorized 응답과 함꼐 사용

 

Set-Cookie (★)

  • set-cookie: sessionId=id; expires=쿠키 만료 날짜(생략시 브라우저 종료까지만 유지); path=/; domain=.google.com; Secure
  • server->client 쿠키 전달
  • 사용자 로그인 세션 관리 및 광고 정보 트래킹
  • 쿠키 정보는 항상 서버에 전송
  • -> 네트워크 트래픽 추가 유발.
  • -> 최소한의 정보만 사용 or 웹 스토리지를 이용해 웹 브라우저 내부에 데이터 저장

 

  • 여러가지 옵션들
  • expires=만료일
  • max-age=30 (30초 후 삭제. 0 이하 수는 쿠키 삭제)
  • domain=example.org (명시한 문서 기준 도메인+ 서브 도메인 포함 쿠키 접근 o)
  • path=/home (이 경로를 포함한 하위 경로 페이지만 쿠키 접근)
  • Secure (https인 경우에만 쿠키 전송)
  • HttpOnly (XSS 공격 방지. javascript에서 접근 불가. HTTP 전송에만 사용)
  • SameSite (XSRF 공격 방지. 요청 도메인과 쿠키에 설정된 도메인이 같은 경우에만 쿠키 전송)

 

Cookie (★)

  • 클라이언트가 서버에서 받은 쿠키를 저장하고, HTTP 요청시 서버로 전달
  • 서버에 의해 Set-Cookie로 client에게 설정된 쿠키 정보
  • 서버는 이 쿠키 헤더를 파싱해서 사용함

본 글은 김영한님의 유료 강의를 들으며 요약, 정리를 목적으로 작성한 것으로 홍보나 금전적 목적이 없습니다.

제 방식으로 정리한 것으로 강의 내용을 추가/삭제/변경된 부분이 많으며 자세한 설명은 강의 구매를 추천 드립니다.

 

출처

1. 모든 개발자를 위한 HTTP 웹 기본 지식 / 김영한 / inflearn

inf.run/PHpy

 

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

실무에 꼭 필요한 HTTP 핵심 기능과 올바른 HTTP API 설계 방법을 학습합니다. 초급 웹 개발 기타 네트워크 웹 개발 Back-End 온라인 강의 프론트엔드/백엔드, 웹/모바일 앱 개발 등 웹 기술을 사용하는

www.inflearn.com

2. gmlwjd9405.github.io/2019/01/28/http-header-types.html

반응형