티스토리 뷰

반응형

HTTP 프로토콜

HTTP(Hyper-Text Transfer Protocol) 은 웹 브라우저와 웹 서버 간의 통신 프로토콜이다.

 

HTTP 프로토콜은 단순히 HTML 페이지나 이미지 파일 전송을 넘어서 원격 컴퓨터에 로딩되어 있는 함수나 객체의 메서드를 호출할 때도 사용된다.

 

HTTP 프로토콜을 응용하거나 확장한 다양한 기술들이 있는데 여기서는 종류만 살짝 살펴보고 넘어가자.

 

RESTful(REpresentational State Transfer), SOAP (Simple Object Access Protocol)

클라이언트와 서버 사이에 서비스를 요청하고 응답을 하는 방식을 나타내는데, 두 가지 모두 HTTP 프로토콜을 응용하거나 확장한 기술이다. (관련한 내용은 추후에 정리해봐야겠다.)

 

WebDAV (World Wide Web DIstributed Authoring and Versioning)

웹 상에서 여러 사람이 문서나 파일을 더 쉽게 편집하고 다룰 수 있게 협업을 도와주는 기술이다.

 

CalDAV (Calendaring Extensions to WebDAV)

캘린더의 정보를 주고받기 위한 프로토콜이다. 기본적으로 HTTP를 기반으로 iCalendar 포맷을 통해 데이터를 주고받는다.

WebDAV를 응용한 CalDAV 기술은 캘린더 데이터를 보다 쉽게 편집하고 공유할 수 있는 기술이다.

이러한 기술들을 정확하게 이해하기 위해서는 기본이 되는 HTTP 프로토콜에 대해서 이해하는 것이 필수이다.

이번 포스팅에서는 HTTP 요청, 응답의 형태를 확인해보자.

 

HTTP 요청

HTTP 요청 메시지 형태


GET /url HTTP/1.1	# Request Line
Host : www.tistory.com	# Request Header
User-Agent : Mozilla/5.0 (Macint ...	# Request Header

{ "data" : 1 }	# Message Body

HTTP 요청은 Request-Line, Request Header로 이루어져 있으며 필요한 경우 Message Body가 추가된다.

 

Request-Line (요청 라인)

요청 메시지의 첫 라인은 메서드, 요청하는 자원 그리고 프로토콜 버전으로 구성된다.

 

Request-Line의 형식

GET / HTTP/1.1 <CR><LF>

(윈도우에서는 <CR><LF> 를 붙이고, 리눅스 맥 OS 등 유닉스 계열에서는 <LF> 만 사용해서 개행을 표시)

 

메서드 - 요청하는 자원에 대해 웹 서버에게 내리는 명령

종류: GET, POST, HEAD, PUT, DELETE, TRACE, CONNECT, PATCH, OPTIONS 등이 있다.

요청 자원(URI) - 요청하는 자원의 식별자

HTML, 이미지, 동영상 애플리케이션 등이 있는 가상의 경로, 웹 서버는 이 (URI)식별자를 이용해서 관련 자원을 찾는다.

HTTP 버전 - 요청 정보가 어떤 버전인지 웹 서버에게 알려주기 위한 정보

 

Request Header (요청 헤더)

서버에서 요청을 처리할 때 클라이언트에서 알려주는 정보를 참고하는데 이를 헤더라고 한다.

Request Header 형식

헤더 이름 : 헤더 값


Host : www.tistory.com
User-Agent : Mozilla/5.0 (Macint ... <CR><LF>

헤더 이름과 값을 : 구분자를 사용해서 표현한다.

헤더의 종류

일반 헤더(General-header) - 요청이나 응답 모두에 적용할 수 있다.

요청 헤더 또는 응답 헤더(Request, Response header) - 요청 또는 응답 둘 중 하나에만 적용할 수 있는 헤더.

엔티티 헤더(Entity-header) - 보내거나 받는 본문 데이터를 설명하는 헤더.

헤더 종류는 HTTP 표준 문서에 정의되어 있다. (Request Header 표준 정의)

 

요청 헤더 중 User-Agent 는 클라이언트의 정보를 서버에게 알려주는 헤더이기 때문에 중요하다. 웹 서버에서는 이 헤더를 분석해서 요청자의 OS와 브라우저를 구분한다.

 

HTTP 요청 내용 중 마지막 라인은 요청 헤더의 끝을 표시하는 공백 라인이다. GET 요청의 경우 공백 라인으로 끝나고, POST 요청의 경우 공백 라인 다음에 서버에 보낼 데이터 Message Body 가 온다.

 

HTTP 응답

HTTP 응답 메시지 형태


HTTP/1.1 200 OK		# Status-Line
Content-Type : text/html;charset=UTF-8	# Response Header
Content-Language : ko-KR	# Response Header
Content-Length : 1011	# Response Header

<!DOCTYPE html>		# Message Body
<html lang="ko">
<head>
...

HTTP 응답 메시지는 Status-Line, Response Header 그리고 Message Body 로 구성된다.

 

Status-Line (상태 라인)

첫 라인에 상태 정보를 나타내며 프로토콜 버전과 상태 코드, 설명으로 구성된다.

HTTP 응답 상태 코드 - 상태 코드의 첫 번째 숫자는 응답의 종류를 구분하는 역할을 한다.

  • 1XX: 요청을 받았고 처리중이라는 정보를 알려주는 상태 코드 들이다.
  • 2XX: 성공, 요청을 성공적으로 받았고 잘 처리했다는 의미이다.
  • 3XX: 요청에 대한 응답을 처리 완료 하기 위해서 추가 동작이 필요하다는 의미로 리다이렉션 하며, 브라우저는 해당 응답을 받으면 재요청을 한다.
  • 4XX: Client Error 로 요청이 잘못 되었거나 실행될 수 없는 경우에 해당된다. (유효하지 않은 요청)
  • 5XX: Server Error 로 유효한 요청을 받았으나 서버에서 처리되지 못한 경우다.

 

Response Header (응답 헤더)

응답 데이터를 처리할 때 참고하도록 서버에서 웹 브라우저에게 알려주는 정보다. 특히 Content-Type 헤더는 서버가 웹 브라우저에게 보내는 데이터의 형식을 나타내며, 웹 브라우저는 Content-Type 값을 보고 HTML 페이지를 출력할지, Json 형태의 데이터를 출력할지, 다운로드 창을 띄울지 아니면 외부 프로그램을 실행할지 등등을 결정한다. 추가로 Content-Length는 웹 브라우저에게 보내는 데이터 Message-Body의 크기(Byte)이다.

마찬가지로 Response Header의 경우도 표준 문서에서 확인 가능하다. (Response Header 종류)

 

Message Body

Response HeaderMessage Body를 구분하기 위해 HTTP 요청 메시지와 동일하게 Response Header 뒤에 공백 라인이 오고 그 뒤에 Message Body 가 시작된다.

 

기본적인 HTTP 프로토콜의 요청과 응답 메시지들을 살펴 봤는데, 메시지의 정확한 규칙을 한번 짚고 넘어가는 좋은 계기가 되었다. 이후에는 HTTP Request의 Method 들에서 하나씩 살펴보고자 한다.

 

참고문헌

  • 엄진영 지음 / 열혈강의 자바 웹 개발 워크북 (1장 웹 애플리케이션의 이해) / 프리렉 / 초판 6쇄 2018년 08월 09일
  • rfc7231

http://www.kyobobook.co.kr/product/detailViewKor.laf?mallGb=KOR&ejkGb=KOR&barcode=9788965400677

 

자바 웹 개발 워크북 - 교보문고

MVC 아키텍처, 마이바티스, 스프링으로 만드는 실무형 개발자 로드맵 | 더 자바답게, 원리로 이해하는 자바 웹 개발 워크북이 책은 자바 웹 개발 기초에서 프레임워크를 사용하는 실무 내용까지

www.kyobobook.co.kr

 

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/02   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
글 보관함