[Network] HTTP - 헤더

2020. 9. 19. 20:33Computer Science/네트워크

정의

º HTTP 헤더는 클라이언트와 서버가 요청 또는 응답으로 부가적인 정보를 전송할 수 있도록 해준다.

º HTTP 헤더는 대소문자를 구분하지 않는 이름과 콜론 ':' 다음에 오는 값(줄 바꿈 없이)으로 이루어져 있다.

 

HTTP 공통(일반) 헤더

1. 개념 및 특징

 º 요청과 응답에 모두 사용되는 헤더

 º 요청/응답이 생성된 날짜 및 시간 등과 같은 HTTP 통신에 대한 일반적인 정보가 포함

 

2. 주요 항목들

 º Date

   - HTTP 메시지를 생성한 일시(RFC 1123에서 규정)

   - EX) date : Sat, 19 Sep 2020 10:40:36 GMT

 

 º Connection

   - 클라이언트와 서버 간 연결에 대한 옵션 설정

   - EX) Connection : close

        ▶ 현재 HTTP 메시지 직후에 TCP 접속을 끊는다는 것을 알린다.

   - EX) Connection : Keep-Alive

        ▶ 현재 TCP 커넥션을 유지.

   ※ HTTP/2에서는 사라짐

 

 º Cache-Control

   - 요청과 응답 모두에서의 캐싱 매커니즘을 명시하는 지시문

 

 º Pragma

   - 캐시제어(no-cache), HTTP/1.0에서 쓰던 것으로 HTTP/1.1에서는 Cache-Control이 쓰인다.

 

HTTP Entity 헤더

1. 개념 및 특징

 º HTTP 메세지 Body의 컨텐츠를 나타내는 헤더

 º HTTP Request, Response 모두에서 사용 가능한 Entity(콘텐츠, 본문, 리소스 등)에 대한 설명 헤더 항목

   - HTTP 메세지 내 포함된 선택적인 개체에 대한 구체적인 미디어 타입 등의 설명

   - HTTP 메세지는 이미지, 비디오, 오디오, HTML 문서, 전자메일 등의 개체들을 운반할수 있다.

 

2. 주요 항목들

 º Content-Type

  - 컨텐츠의 타입(MIME 미디어 타입) 및 문자 인코딩 방식(EUC-KR, UTF-8 등)을 지정한다.

  - 타입 및 서브타입(Type/SubType)으로 구성된다.

      - Type : 10개 정도 표준으로 지정됨(application, audio, font, image, multipart 등)

      - SubType : 각 타입별로 수십에서 수백개 정도

      - EX) Content-Type: text/html; charset=UTF-8

 

 º Content-Encoding

  - 미디어 타입(MIME Type)를 압축하기 위해서 사용

  - 클라이언트는 본문을 압축한 방식을 알 수 있다.

  - Ex) Content-Encoding : gzip 이외 compress, deflate 등 

 

 º Content-Language

  - 본문이 대상으로 하는 언어를 의미

 

 º Content-Length

  - 전달되는 해당 개체의 바이트 길이 또는 크기(10진수)

  - 응답 메세지 Body의 길이를 지정하거나 특정 지정된 개체의 길이를 지정

 

 º Content-Location

  - 해당 개체의 실제 위치를 알려준다.

 

HTTP 요청 헤더

1. 개념 및 특징

 º HTTP 헤더 내 요청 헤더 (Request Header) 항목

 º 요청 헤더는 HTTP 요청 메세지 내에서만 나타나며 가장 방대하다.

 

2. 주요 항목들

 º Host

   - 서버의 도메인명과 포트를 지정

   - HTTP/1.1 이후부터 Host 필드는 필수 항목(웹브라우저에서 반드시 포함)

   - Host 필드에 도메인명 및 호스트명 모두를 포함한 전체 URI 지정이 필요

     ▶ 동일 IP주소를 갖는 단일 서버에 여러 사이트 구축이 가능

 

 º User-Agent

   - 클라이언트 소프트웨어(OS, 브라우저) 명칭 및 버전정보 포함

   - EX) user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36

 

 º Referer

   - 현재 주소로 접근할 수 있었던 이전 주소의 정보를 포함

 

 º Accept

   - 클라이언트가 이해할 수 있는 미디어 타입(MIME Type)에 대한 정보를 포함

     ▶ 텍스트(text/html, text/plain 등), 이미지(image/jpeg 등)

   - EX) Accept : */*

     ▶ 어떤 미디어 타입도 가능

   - EX) Accept : image/*

     ▶ 모든 이미지 유형이 가능

 º Accept-Charset

   - 클라이언트가 이해할 수 있는 Character 셋에 대한 정보를 포함

 º Accept-Language

   - 클라이언트가 어떤 언어를 이해할 수 있는지, 그리고 locale중 어떤 것이 선호되는지에 대한 정보를 포함

   - EX) accept-language : ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7

 º Accept-Encoding

   - 클라이언트가 이해 가능한 컨텐츠 인코딩 방법에 대한 정보를 포함

   - EX) accept-encoding : gzip, deflate, br

 

 º Authorization

   - 인증 토큰(JWT/Bearer 토큰)을 서버로 보낼 때 사용하는 헤더

   - "토큰의 종류(Basic, Bearer 등) + 실제 토큰 문자"를 전송

 

 º Origin

   - 서버로 POST요청을 보낼 때, 요청이 어느 주소에서 시작되었는지 나타낸다.

   - 요청을 보낸 주소와 받는 주소가 다르면 CORS 에러가 발생

   - 응답 헤더의 Access-Control-Allow-Origin과 관련

 

 º Cookie

   - Set-Cookie 헤더와 함께 서버에 의해 이전에 전송되어 저장된 쿠키를 포함

 

HTTP 응답 헤더

1. 개념 및 특징

 º HTTP 헤더 내 응답 헤더 (Response Header) 항목

 º 특정 유형의 HTTP 요청이나 특정 HTTP 헤더를 수신했을 때 이에 응답한다.

 

2. 주요 항목들

 º Server

   - 요청을 처리하는 서버의 소프트웨어 정보를 포함

     ex) Apache, nginx 등

 º Last-Modified

   - 서버가 알고 있는 가장 마지막 수정된 날짜와 시각을 표시

 

 º ETag

   - 특정 리소스를 식별하는 식별자

   - HTTP 컨텐츠가 바뀌었는지를 검사할 수 있는 태그

 

 º Set-Cookie

   - 서버에서 사용자 브라우저에 쿠키를 전송하기 위해 사용

 

 º Location

   - Redirect 될 주소에 대한 정보를 포함

   - Status Code가 3xx 혹은 201일 경우에 볼 수 있다.

 

 º Age

   - max-age 시간 내에서 얼마나 흘렀는지 초 단위로 알려준다.

 

 º Allow

   - 해당 엔터티에 대해 서버 측에서 지원 가능한 HTTP 메소드의 리스트를 나타낸다.

   - HTTP 요청 메세지의 HTTP 메소드 OPTIONS에 대한 응답용 항목으로 사용

     ▶ OPTIONS: 웹서버측 제공 HTTP 메소드에 대한 질의

   - EX) allow : GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, PATCH

     ▶ 웹 서버에서 제공 가능한 HTTP 메서드는 GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, PATCH

 

 º Access-Control-Allow-Origin

   - 요청을 보내는 프론트 주소와 받는 백엔드 주소가 다르면 CORS 에러가 발생

     ▶ 서버에서 이 헤더에 프론트 주소를 적어주어야 에러가 나지 않는다.

   - EX) access-control-allow-origin : https://son-programmar.tistory.com

     ▶ 프로토콜, 서브도메인, 도메인, 포트 중 하나만 달라도 CORS 에러 발생

 

※ CORS(Cross-Origin Resource Sharing)

1. 개념

 º 도메인 또는 포트가 다른 서버의 자원을 요청하는 매커니즘

 º 요청을 할때 cross-origin HTTP에 의해 요청된다.

 

2. 교차 출처 요청 예시

 º  https://domain-a.com를 JavaScript코드가 가 XMLHttpRequest를 사용하여 https://domain-b.com/data.json을 요청

 

3. 동작 방식 및 보안

 º 보안 상의 이유로 브라우저는 스크립트에서 시작한 교차 출처  HTTP 요청을 제한한다.  

 º XMLHttpRequest와 FetchAPI는 same-origin policy을 따른다.

     ▶ 즉, API를 사용하는 웹 애플리케이션은 자신의 출처와 동일한 리소스만 불러올 수 있다.

     ▶ 다른 출처의 리소스를 불러오려면 그 출처에서 올바른 CORS 헤더를 포함한 응답을 반환해야 한다.

 º CORS 체제는 브라우저와 서버 간의 안전한 교차 출처 요청 및 데이터 전송을 지원한다.

 º 최신 브라우저에서는 XMLHttpRequest 또는 Fetch API에서 CORS를 사용하여 교차 출처 HTTP 요청 위험을 완화한다.

이미지 출처 : https://developer.mozilla.org/ko/docs/Web/HTTP/CORS

Reference

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

- velog.io/@zeros0623/HTTP-header

- developer.mozilla.org/ko/docs/Web/HTTP/CORS

 

 

 

 

 

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

[NetWork] Cookie  (0) 2021.01.24
[Network] Router, Routing ?  (0) 2021.01.10
[NetWork] imap? POP3?  (0) 2020.06.03
TCP UDP 란?  (0) 2020.04.05
로드밸런싱 이란?  (0) 2020.03.08