HTTP 프로토콜

HTTP 프로토콜을 이해하고, HTTP 요청과 응답의 구조를 배웁니다. 또 MIME 타입에 대해서 알아봅니다.
HTTP, MIME 타입, 프로토콜


HTTP

HTTP 프로토콜을 이용하는 웹 서비스HTTP 프로토콜을 이용하는 웹 서비스

HTTP(Hyper Text Transfer Protocol)는 이전 강의에서 살펴본 TCP/IP 프로토콜 위에서 정의된 웹 서비스를 위한 프로토콜입니다. 쉽게 생각해서 TCP/IP로 전송하는 데이터를, 웹 브라우저와 웹 서버가 HTML 문서를 요청하고 응답하기 좋은 형태로 구조화한 데이터 구조 등에 대한 약속입니다. 웹 브라우저가 웹 서버와 통신하는 과정을 통해서 HTTP의 포맷에 대해서 알아보고, 이어지는 챕터에서 브라우저에서 요청을 보내는 방식, 웹 서버에서 요청을 처리해 응답하는 방식에 대해서 알아보겠습니다.

웹 브라우저의 통신 과정

  • URL 분석 및 접속
    웹 브라우저는 URL을 분석해 서버의 IP 주소와 포트(기본은 80)를 이용해 서버와 TCP/IP 연결을 요청합니다.

  • Request 헤더 전송
    브라우저에서 요청 파일명 등이 기술된 헤더를 전송합니다.

  • Request 바디 전송
    필요한 경우에, 로그인 폼에 입력한 데이터나 첨부 파일 등의 추가적인 데이터를 전송합니다.

  • Response 헤더 해석
    서버에서 헤더를 수신하고 응답 상태(404 등)를 확인하며, 바디의 Content-Type 등을 확인합니다.

  • Response 바디 해석
    바디가 있는 경우에, 서버에서 수신한 바디를 헤더에 기술된 Content-Type에 따라서, text/html인 경우에 HTML을 렌더링하고, image/jpeg인 경우에는 그림을 띄우는 등 적절히 해석합니다.

HTTPS(Hypertext Transfer Protocol over Secure Socket Layer)는 웹 서버와 주고 받는 HTTP 데이터를 SSL/TLS 프로토콜을 통해 암호화하여 보안성을 높힌 프로토콜입니다. 443번 포트를 사용합니다.

HTTP Request

HTTP RequestHTTP Request

Request Header

설명예시
-요청을 보내는 URL 및 메소드, 프로토콜 버전GET /some/path?page=1&anything=abc HTTP/1.1
Host요청을 보내는 Hostwww.google.co.kr
Content-Type요청에 바디가 있는 경우 그 파일 포맷Content-Type: application/x-www-form-urlencoded
Cookie웹 브라우저에 저장된 쿠키들Cookie: someID=1234512; anything=abcdefg;
User-Agent클라이언트의 정보User-Agent: Mozilla/ … Chrome/54.0.2840.71 Safari/537.36

HTTP Request 헤더의 필드 목록

Request Method

종류설명
GET주어진 URL에서 자원을 요청
POST주어진 URL로 자원의 생성을 요청
PUT주어진 URL로 자원의 대체를 요청
DELETE주어진 URL로 자원의 삭제를 요청
HEAD주어진 URL에서 자원의 헤더만을 요청
OPTIONS주어진 URL에서 처리 가능한 메소드의 목록을 요청

이외에도 PATCH, CONNECT, TRACE 등의 메소드가 있습니다. HTTP 규약에 메소드라는 것이 존재하는 이유는 보안적인 이슈도 있지만 동일한 URL에 다양한 요청과 응답을 구성하기 위해서입니다. 실제로 메소드의 정의대로 요청을 처리 할 지는 웹 서버를 개발하는 사람에게 달려있습니다.

Request Body

요청을 보낼 때 바디는 요청의 목적에 따라서 있을 수도 없을 수도 있습니다. HTTP는 단순한 약속이기 때문에 GET이나, HEAD 메소드의 요청에 바디를 포함에도 무관합니다. 하지만 일반적으로 데이터를 입력한다는 의미의 메소드인 POST나, PUT 메소드의 요청에 바디를 포함하기 마련입니다.

이때 웹 브라우저는 기본적으로 폼 데이터(로그인 폼, 게시판 글쓰기 폼 등)를 전송할 때는 Content-Type을 application/x-www-form-urlencoded으로 또 동영상, 이미지, 파일 등 바이너리 파일을 전송할 때는 Content-Type이 multipart/form-data로 바디를 인코딩해서 요청을 보냅니다.

HTTP Response

HTTP ResponseHTTP Response

Response Header

설명예시
-서버의 응답 상태 (1xx~5xx)HTTP/1.1 200 OK
Set-Cookie웹 브라우저에게 쿠키 생성을 요청Set-Cookie: UserID=SonSon; Max-Age=3600; Version=1
Content-Type응답에 바디가 있는 경우 그 포맷Content-Type: text/html; charset=utf-8
Location웹 브라우저에게 다른 URL로 요청을 다시 보내길 요청(리디렉션)
(Status 3xx와 같이 쓰임)
Location: http://www.google.co.kr

HTTP 응답 상태 코드들은 번호에 따라서 각각 1xx (조건부 응답), 2xx (성공), 3xx (리다이렉션), 4xx (요청 오류), 5xx (서버 오류)의 의미가 있습니다.

HTTP Response 헤더의 필드 목록
HTTP Response Status Code 목록

Response body

바디는 응답의 목적에 따라서 있을 수도 없을 수도 있습니다. 응답 역시도 헤더에 Content-Type을 명시하고, 바디에 그 포맷에 맞는 데이터를 담습니다. HTML 문서는 html/text, JPG 이미지는 image/jpeg의 Content-Type을 가집니다. JSON 문서를 전송한다면 application/json이 Content-Type될 것 입니다.

MIME 타입

HTTP 헤더의 Content-Type 필드는 MIME 타입에 해당하는 값을 가질 수 있습니다.

MIME이란 Multipurpose Internet Mail Extensions의 약어로 메시지 컨텐트 형식을 정의하기 위한 인터넷 표준을 말합니다. MIME 메시지는 텍스트, 이미지, 오디오, 비디오, 및 기타 애플리케이션의 특정 데이터를 포함할 수 있으며 일반적으로 홈페이지 상에 표현되는 멀티미디어 데이타에 대한 형식을 말합니다…
공식 MIME 타입의 전체 목록

타입설명
text/plain텍스트 파일
text/cssCSS 텍스트
text/htmlHTML 텍스트
image/jpegJPG 이미지
image/gifGIF 이미지
image/pngPNG 이미지
image/x-iconICO 이미지
video/mpegMPG 비디오
audio/oggOGG 오디오
application/pdfPDF 파일
application/javascriptJavaScript 텍스트
application/jsonJSON 텍스트
application/octet-stream알려지지 않은 파일, 기타 바이너리

HTTP는 꼭 웹 브라우저와?

본래 HTTP가 웹 브라우저를 위해 개발된 프로토콜이지만, HTTP 프로토콜과 웹 서비스의 생태계는 인터넷의 아주 큰 부분을 차지하고 있습니다. 그렇다 보니 HTTP 프로토콜을 기반으로 어떠한 용도의 서버를 개발하더라도, (꼭 웹 브라우저가 아닌) 클라이언트 플랫폼(Windows, Android, iOS 등)에서도 생산성 높은 개발을 할 수가 있습니다. 실제로도 모바일 게임 등의 경우에는 HTTP를 이용해 게임 서버를 구축하는 경우가 많습니다. HTTP는 웹 브라우저만을 위한 프로토콜이 아닙니다!

이 강의를 포함한 커리큘럼
저자

김동욱

개발 경력 약 10년, 전문 분야는 웹 및 각종 응용 소프트웨어 플랫폼입니다. Codeflow를 운영하고 있습니다.

2018년 04월 10일 업데이트

지원되지 않는 웹 브라우저거나 예기치 않은 오류가 발생했습니다.