2020. 9. 19. 20:33ㆍComputer 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 요청 위험을 완화한다.
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 |