HTTP(HyperText Transfer Protocol)
우리는 웹 브라우저의 주소창에 웹 사이트 주소를 입력할 때, http://it-ing.tistory.com/과 같이 입력한다.
가장 앞에 위치한 http가 바로 응용계층에서 사용되는 대표적인 통신 프로토콜 중 하나다.
초기에는 하이퍼텍스트(Hypertext) 문서 중심의 데이터 전송을 목적으로 했으나,
오늘 날에는 각종 멀티미디어를 지원하고 있다.
HTTP의 가장 큰 특징은 상태를 유지하는 기능이 없다는 점이다.
구조
(이미지 출처 : 정보통신기술용어해설)
HTTP는 크게 일반적인 구조(일반, 엔티티)와 요청 및 응답에 대한 메시지를 담은 구조로 나누어 볼 수 있다.
이미지를 보면 헤더 뒤에 항상 공간(Space, Blank line)이 존재하는데, 이는 헤더의 끝을 나타낸다.
실제로는 굉장히 많은 내용들이 포함되기 때문에 본 블로그에서는 주요 필드만 살펴볼 것이다.
그러므로 보다 자세한 내용은 링크를 통해 직접 확인하자.
1) 일반헤더(General Header)
일반헤더는 클라이언트와 서버 구분없이 이용할 수 있는 헤더를 말한다.
명칭 | 예시 값 | 설명 | ||
Date | Wed, 8 June 2016 10:10:00 GMT | 현재 날짜와 요일, 시각 등을 표시한다. | ||
Connection | close | 본 메시지 이후 연결을 끊겠다는 것을 알린다. | ||
Pragma | no-cache | 프록시 서버에 대한 명령을 담고, 목적 서버에선 무시된다. | ||
Cache-Control | max-age=10 | 캐시에 관련된 여러 명령어를 사용할 수 있다. max-age의 경우, 해당 시간(초)을 초과하면 응답하지 않게 된다. | ||
Upgrade | SHTTP/1.3 | 우선시하는 프로토콜을 지정한다. | ||
Via | HTTP/1.1 Proxy1, HTTP/1.1 Proxy2 | 트랜잭션을 처리하는 프로토콜 및 호스트를 나타낸다. | ||
Transfer-Encoding | chunked | 원활한 전송을 위해 사용된 인코딩 방식을 나타낸다. |
2) 엔티티헤더(Entity Header)
일반헤더와 마찬가지로 요청메시지나 응답메시지 모두에 사용될 수 있다.
대체적으로 페이지 본문에 대한 정보를 담는다.
명칭 | 예시 값 | 설명 | ||
Allow | GET, HEAD | 지정한 URI에서 허용하는 메소드 값들을 가진다. | ||
Content-Encoding | gzip | 개체 데이터의 압축 방식을 담는다. | ||
Content-Type | text/html | 개체에 포함되는 미디어 타입정보를 가진다. | ||
Content-Language | ko | 개체와 부합하는 적절한 언어정보를 표기한다. | ||
Content-Length | 1004 | 문서의 길이를 바이트 단위로 표기한다. | ||
Expires | Wed, 8 June 2016 10:10:00 GMT | 문서가 변경될 수 있는 시간이나 유효하지 않을 시간을 표기한다. |
3) 요청헤더(Request Header)
요청메시지에 담는 헤더로, 내용이 가장 많이 담길 수 있다.
명칭 | 예시 값 | 설명 | ||
From | isbin0303@gmail.com | 클라이언트 사용자의 메일 주소다. | ||
Accept | text/html, image/* | 클라이언트가 이해가능한 미디어 타입과 우선순위를 표시한다. | ||
Authorization | BASIC qWiasdkQWJsjahSDkq== | 사용자의 인증정보를 Base64로 인코딩한다. | ||
Cookie | name = value | 서버에 의해 설정된 클라이언트의 쿠키정보를 나타낸다. | ||
Host | www.it-ing.tistory.com | 호스트명과 포트번호를 표시한다. | ||
User-Agent | Mozilla/5.0 (Windows NT 6.1) ... | 클라이언트의 소프트웨어 명칭 및 버전 정보를 가진다. |
4) 응답헤더(Response Header)
응답메시지에 담는 헤더로, 응답메시지에서만 사용된다.
명칭 | 예시 값 | 설명 | ||
Server | Microsoft-IIS/5.0 | 서버의 소프트웨어 정보를 나타낸다. | ||
Age | 2147483648(2^31) | 문서의 나이를 나타낸다. | ||
Set-Cookie | name=value[; option] | 클라이언트에게 서버측이 쿠키를 설정한다. | ||
Location | http://localhost/main.asp | 리다이렉트 또는 새로 생성된 리소스 주소를 나타낸다. | ||
Allow | GET, HEAD | 리소스가 지원가능한 HTTP 메소드 리스트를 나타낸다. | ||
Last-Modified | Tye, 06 Mon 2016 11:11:11 GMT | 마지막 수정일자 및 시각정보를 담는다. | ||
Vary | Date | 지정된 헤더가 다중 자원으로 인해 상황에 따라 변할 수 있음을 나타낸다. | ||
Proxy-authenticate | [challenge] | 서버가 프록시 서버일 경우 사용자 인증을 요구하기 위한 헤더다. |
메소드(Method)
서버와 클라이언트 간 통신에서 메소드를 통해 어떤 요청이 이뤄지는지 서버에 알려주게 된다.
메소드는 많지 않고, 실제 사용되는건 HEAD, GET, POST, OPTIONS 정도이다.
1) HEAD : GET과 동일하나, 자료에 대한 헤더정보만 받는다.
2) GET : URL에 해당하는 자료의 전송을 요청한다.
3) POST : 서버가 처리할 수 있는 자료를 제출한다.
4) PUT : 해당 URL에 자료를 저장한다. 파일전송이 가능하다.
5) DELETE : 해당 URL에 존재하는 자료를 삭제한다.
6) TRACE : 요청을 그대로 반환한다.
7) OPTIONS : 웹서버가 지원하는 메소드 종류를 요청한다.
8) CONNECT : 프록시와 같은 중간 서버를 경유할 때만 드믈게 사용한다.
마치며
HTTP는 응용계층에서 이뤄지는 프로토콜이기 때문에,
사용자가 스니핑도구를 통해 얼마든지 직접 헤더정보를 확인할 수도 있다.
조만간 스니핑도구를 소개할 때 링크를 추가하도록 하겠다.
끝.
참고문서
MSDN / coffeenix / joinc / 정보통신기술용어해설 / 인생을즐기자 / 위키
'IT > 네트워크' 카테고리의 다른 글
[네트워크] TCP와 UDP 헤더구조 (1) | 2016.06.13 |
---|---|
[네트워크] OSI 7 계층(OSI 7 Layers)과 TCP/IP 모델 (0) | 2016.04.23 |
네트워크 :: 쿠키와 세션의 개념 (0) | 2016.03.29 |