HTTP 개요
HTTP 간략하게 보기
[1] HTTP (Hypertext Transfer Protocol)
- HTTP는 문자 그대로 HTML 문서와 같은 하이퍼미디어 문서를 전송하기 위한 프로토콜이다.
- HTTP의 확장성 덕분에 오늘날에는 하이퍼텍스트 문서 뿐만 아니라 이미지, 비디오, HTML 폼 결과를 전송할 수도 있다.
[2] HTTP 특징
HTTP는 클라이언트-서버 프로토콜이다.
- 클라이언트와 서버가 개별적인 메시지 교환에 의해 통신한다.
- 요청(requests): 클라이언트에 의해 전송되는 메시지
- 응답(responses): 서버에서 응답으로 전송되는 메시지
HTTP는 무상태 프로토콜이다.
- 상태(데이터)를 저장하지 않는다.
- 사용자와 페이지 사이에 상호작용(예: 쇼핑몰 장바구니)이 필요하다면 HTTP 쿠키를 사용해 세션을 만들어 데이터를 저장할 수 있다.
HTTP는 간단하다.
- 사람이 읽기 쉽다.
- HTTP 메시지를 프레임별로 캡슐화하여 간결하게 표현한다.
HTTP는 확장가능하다.
- HTTP 헤더는 HTTP를 확장하기 쉽게 해준다.
[2] HTTP 기반 시스템의 구성요소
클라이언트
- 사용자를 대신하여 동작하는 모든 도구로, 주로 브라우저에 의해 수행된다.
- 브라우저는 항상 요청을 보낸다.
웹 서버
- 서버는 클라이언트의 요청에 대한 문서를 제공한다.
프록시
- 웹 브라우저와 서버 사이에서는 수많은 컴퓨터와 기계가 HTTP 메시지를 이어 받고 전달한다.
- 프록시는 어플리케이션 계층에서 동작하는 중간 단계의 컴퓨터 혹은 기계를 의미한다.
- 프록시를 통해 요청이 변경될 수도 있고 변경되지 않는 경우도 있다.
- 프록시는 다양한 기능을 수행할 수 있다.
- 캐싱 (예: 브라우저 캐시)
- 필터링 (예: 바이러스 필터링, 유해 컨텐츠 필터링)
- 로드 밸런싱: 여러 서버들이 서로 다른 요청을 처리하도록 허용
- 인증: 접근 제어
- 로깅 : 이력 정보 저장
[3] HTTP로 제어할 수 있는 것
캐싱(Caching)
- 서버는 프록시와 클라이언트에게 캐시 대상과 기간을 지시할 수 있다.
- 클라이언트는 프록시에게 저장된 문서를 무시하라고 지시할 수 있다.
인증(Authentication)
- HTTP WWW-Authenticate 헤더나 HTTP 쿠키를 사용하여 구현할 수 있다.
세션(Session)
- HTTP 쿠키를 사용하여 서버 상태와 요청을 연결할 수 있다.
Origin 제약 완화
- 브라우저는 보안상의 이유로 동일한 origin으로부터 온 페이지만이 웹 페이지의 전체 정보에 접근할 수 있도록 한다.
- HTTP 헤더를 사용하여 페이지가 동일 origin에서 온 것인지 확인하는 부담을 줄일 수 있다.
프록시(Proxy)와 터널링(Tunneling)
- HTTP 요청이 네트워크 장벽을 넘기 위해 프록시를 통해 나간다.
[4] HTTP 흐름
- TCP 연결을 연다.
- HTTP 메시지를 전송한다.
- 서버에 의해 전송된 응답을 읽는다.
- 연결을 닫거나 다른 요청에 재사용한다.
[5] HTTP 메시지 구조
요청 메시지
>
1
2
3
GET / HTTP/1.1
Host: developer.mozilla.org
Accept-Language: fr
- 라인 1의
GET
: HTTP 메서드로 클라이언트가 수행하고자 동작을 알 수 있다. - 라인 1의
/
: 리소스의 경로 - 라인 1의
HTTP/1.1
: HTTP 프로토콜 버전 - 라인 2-3 전체: HTTP 헤더로 서버에 대한 추가 정보를 나타낸다.
응답 메시지
>1
2
3
4
5
6
7
8
HTTP/1.1 200 OK
Date: Sat, 09 Oct 2010 14:28:02 GMT
Server: Apache
Last-Modified: Tue, 01 Dec 2009 20:18:22 GMT
ETag: "51142bc1-7449-479b075b2891b"
Accept-Ranges: bytes
Content-Length: 29769
Content-Type: text/html
- 라인 1의
HTTP/1.1
: HTTP 프로토콜 버전 - 라인 1의
200
: 상태 코드 - 라인 1의
OK
: 상태 코드 설명 - 라인 2-8 전체: HTTP 헤더들
참고
This post is licensed under CC BY 4.0 by the author.Trending Tags