Search

http 헤더 종류 및 의미

Tags
study
CVE
2022/01/07 12:51

HTTP 프로토콜

HTTP(Hypertext Transfer Protocol)는 인터넷상에서 데이터를 주고 받기 위한 서버/클라이언트 모델을 따르는 프로토콜.
HTTP 프로토콜의 포맷은 서버, 클라이언트 모두 동일함.
애플리케이션 레벨의 프로토콜로 TCP/IP 위에서 동작.
HTTP로 보낼 수 있는 데이터는 HTML문서, 이미지, 동영상, 오디오, 텍스트 문서 등 여러종류가 있음.

HTTP 메시지

HTTP 애플리케이션 간에 주고 받는 데이터를 뜻함. HTTP 메시지는 request, response 메시지로 나눌수 있는데, 둘다 동일한 포맷을 가지고 있다
start line
실행되어야할 요청, 또는 요청 수행에 대한 성공 및 실패가 기록되어 있으며 항상 한줄로 끝난다.
<method> <요청 URL> <버전> GET www.naver.com 1.1
Plain Text
복사
header
요청, 응답에 대한 설명 혹은 본문에 대한 설명이 들어감
body
요청, 응답에 대한 내용이 들어감. 본문의 존재 유무 및 크기는 start-line과 http 헤더에 명시됨
HTTP 1.1에서 헤더는 컨텍스트내용에 따라 세 부분으로 나눌 수 있다.
(general header, request/respone header, entity header)

HTTP request

1. start-line

http request는 서버가 특정 동작을 취하게끔 만들기 위해 클라이언트에서 전송하는 메시지. 총 3가지 요소로 구성되어있다
1) HTTP 메서드
get, put, post, head, options
2) URL, 프로토콜, 포트 , 도메인
요청 컨텍스트에 의해 특정지어짐. 요청 타켓 포맷은 HTTP 메소드에 따라 달라진다. 요청 타겟 포맷은 다음과 같음
origin 형식 : 끝에 '?' 와 쿼리 문자열이 붙는 절대 경로. 가장 일반적인 형식임
HEAD /test.html?query=alibaba HTTP/1.1
Plain Text
복사
absolute 형식 : 완전한 URL 형식. 프록시에 연결하는 경우 대부분 GET과 함께 사용됨
GET http://developer.mozilla.org/en-US/docs/Web/HTTP/Messages HTTP/1.1
Plain Text
복사
authority 형식 : 도메인 이름 및 옵션 포트(" : " 가 앞에 붙음)로 이루어진 URL의 authority component. HTTP 터널을 구축하는 경우에만 CONNECT와 함께 사용가능
CONNECT developer.mozilla.org:80 HTTP/1.1
Plain Text
복사
asterisk 형식 : OPTIONS와 함께 " * " 하나로 간단하게 서버 전체를 나타냄
OPTIONS * HTTP/1.1
Plain Text
복사
3) HTTP 버전
써야할 HTTP 버전을 알려주는 역할을 함

2. request Header

다양한 종류의 요청 헤더가 있는데, 이들은 다음과 같이 몇몇 그룹으로 나눌수 있다.
1.
General 헤더
request 헤더와 response 헤더에 공통으로 들어가는 header이다. 가장 흔한 general 헤더 필드는 다음과 같다
Data : 현재 시간
Cache-Control : 캐시제어
Via : 이용한 프록시 이름
Connection: 클라-서버가 커넥션에 대한 옵션을 정할수 있게 알려줌
2.
Request 헤더
메시지의 컨텐트와는 관련이 없는 헤더이다. 서버에게 클라이언트가 요청하는 데이터 타입이 무엇인지, 와 같은 부가적인 정보를 제공한다.
ex) Accept : */* - 이는 서버로부터 모든 미디어 타입의 데이터를 받을수 있다는 표시
request header에 들어가는 내용들은 다음과 같다
Host : 서버의 도메인명과 서버의 포트를 지정합니다.
User-Agent : 클라이언트 정보를 포함합니다(예:브라우저 정보)
Referer : 현재 주소로 접근할 수 있었던 이전 주소의 정보를 포함합니다.
Accept : 클라이언트가 이해할 수있는 미디어 타입에 대한 정보를 포함합니다.
Accept-Charset : 클라이언트가 이해할 수 있는 캐릭터 셋에 대한 정보를 포함합니다.
Accept-Language : 클라이언트가 어떤 언어를 이해할 수 있는지, 그리고 locale중 어떤 것이 선호되는지에 대한 정보를 포함합니다.
Accept-Encoding : 클라이언트가 이해 가능한 컨텐츠 인코딩 방법에 대한 정보를 포함합니다.
Authorization : 클라이언트의 자격증명을 포함합니다.
Originfetch를 요청한 원래의 주소의 정보를 포함합니다. 경로 정보는 포함하지 않습니다.
Cookie Set-Cookie헤더와 함께 서버에 의해 이전에 전송되어 저장된 쿠키를 포함합니다.

3. Body

메시지의 실제 정보를 담고 있다.

HTTP response

1. start-line

HTTP response은 다음과 같은 정보를 가지고 있다
프로토콜 버전 : ex) HTTP/1.1
상태 코드 : 요청의 성공 여부를 타나냄
상태 텍스트 : 상태 코드에 대한 간단한 설명이 들어감
ex) HTTP/1.1 404 Not Found.
Plain Text
복사

2. Response Header

다양한 종류의 response 헤더가 있는데, 이들은 다음과 같이 몇몇 그룹으로 나눌수 있다.
1.
General 헤더
request 헤더와 response 헤더에 공통으로 들어가는 header이다. 가장 흔한 general 헤더 필드는 다음과 같다
Data : 현재 시간
Cache-Control : 캐시제어
Via : 이용한 프록시 이름
Connection: 클라-서버가 커넥션에 대한 옵션을 정할수 있게 알려줌
2.
Response header
서버에서 응답을 위해 처리한 여러 정보들을 알려주는 내용이 들어가 있다. 다음과 같은 필드들을 가지고 있다.
Transfer-Encoding : body 내용 자체 압축 방식 지정
Expires : 응답의 유효기간을 설정
Last-Modified : 서버가 알고 있는 가장 마지막 수정 된 날짜와 시각을 표시합니다.
ETag : 특정 리소스를 식별하는 식별자. 컨텐츠가 변경되었는지 알 수 있습니다.
Set-Cookie : 서버에서 사용자 브라우저에 쿠키를 전송하기 위해 사용됩니다.
Location : 리다이렉트 될 주소에 대한 정보를 포함합니다. Status Code가 3xx 혹은 201일 경우에 볼 수 있다.
Server : 요청을 처리하는 서버의 소프트웨어 정보를 포함합니다.
Age Max-Age의 시간 내에서 얼마나 흘렀는지에 대한 정보를 포함합니다.

3. Body

메시지의 실제 정보를 담고 있다.

Entity header

메시지 본문의 컨텐트에 대한 정보를 담고 있다. Entity header는 HTTP request, response 에서 모두 사용 된다. Entity header는 다음과 같은 필드로 구성되어 있다.
Content-Encoding : 미디어 타입을 압축하기 위해서 사용됩니다. 클라이언트는 본문을 압축한 방식을 알 수 있습니다.
Content-Type : 본문의 미디어 타입을 나타내기위해 사용됩니다.
Content-Length : 본문의 길이를 나타냅니다.
Content-Language : 본문이 대상으로 하는 언어를 의미합니다.
Content-Location : 컨텐츠에 접근할 수 있는 위치를 나타냅니다.
Allow : 리소스가 지원하는 메소드의 집합을 의미합니다.

Request, Response, Entity header 정리

1.
request 메시지에 포함되는 헤더들
General 헤더, Entity 헤더도 같이 포함되어 있는 것을 확인 할 수 있다
2.
response 메시지에 포함되는 헤더들
response 메시지에도 역시 General 헤더, Entity 헤더가 포함되는 것을 확인 할 수 있다.

프록시 처리방식에 따른 헤더 종류

(캐시 및 비 캐싱 프록시의 동작을 정의하기 위한 HTTP 헤더의 두 가지 범주)

1. end-to-end header

해당 헤더는 반드시 메시지의 최종 수신자에게 전송되어야 합니다. 즉, 요청에 대해서는 서버, 응답에 대해서는 클라이언트입니다. 중간 프록시는 반드시 종단 간 헤더를 수정되지 않은 상태로 재전송해야하며 캐시는 이를 반드시 저장해야합니다.

2. hop by hop header

현재 요청을 처리하는 프록시가 처리하고 사용하도록 설계된 헤더이다. 프록시가 사용되면 일반 헤더는 추가 정보를 삽입하여 hop 별로 처리할 사용자 정의 헤더 세트를 정의할 수 있다.