grape

HTTP란 ? 본문

웹 프로그래밍/Web

HTTP란 ?

grape-story 2021. 4. 23. 00:53

HTTP(Hyper Text Transfer Protocol)

HTTP는 텍스트 기반의 통신 규약으로 인터넷에서 데이터를 주고받을 수 있는 프로토콜이다. 프로토콜은 규칙이라고 생각하면 되는데 이렇게 규칙을 정해두었기 때문에, 모든 프로그램이 이 규칙에 맞춰 개발해서 서로 정보를 교환할 수 있게 된 것이다. 또한 HTTP는 TCP/IP 위에서 동작한다. 즉, 우리가 웹을 이용하려면 웹 서버와 웹 클라이언트는 각각 TCP/IP 동작에 필수적인 IP주소를 가져야 한다는 의미이다. 

 

HTTP란 이름대로라면 하이퍼텍스트(Hypertext) 전송용 프로토콜이지만, 실제로는 HTML, XML과 같은 하이퍼 텍스트뿐만 아니라 이미지, 음성, 동영상, JavaScript, PDF와 각종 오피스 도큐먼트 파일 등 컴퓨터에서 다룰 수 있는 데이터라면 무엇이든 전송할 수 있다. 

 

HTTP 동작

클라이언트 즉, 사용자가 브러우저를 통해서 어떠한 서비스를 url을 통하거나 다른 것을 통해서 요청(request)을 하면 서버에서는 해당 요청사항에 맞는 결과를 찾아서 사용자에게 응답(response)하는 형태로 동작한다. 

 

  • 요청: Client => Server
  • 응답: Server => Client

ex) - 예를 들어 웹 브라우저의 주소창에 "http://www.naver.com"을 입력하고 Enter를 누르면 웹 클라이언트와 웹 서버 사이에 HTTP 연결이 맺어지고, 웹 클라이언트는 웹 서버에 HTTP 요청(request) 메시지를 보내게 된다. 

웹 서버는 요청에 따른 처리를 진행한 후에 그 결과를 웹 클라이언트에게 HTTP 응답(response)메시지로 보낸다.

이런 방식으로 요청 메시지와 응답 메시지가 반복적으로 오가면서 웹을 사용하게 되는 것이다.

 

앞서 말했던 것 처럼 HTML 문서만이 HTTP 통신을 위한 유일한 정보 문서는 아니다. Plain text로부터 JSON 데이터 및 XML과 같은 형태의 정보도 주고받을 수 있으며, 보통은 클라이언트가 어떤 정보를 HTML 형태로 받고 싶은지, JSON 형태로 받고 싶은지 명시해주는 경우가 많다. 

 

HTTP 특징

  • HTTP 메시지는 HTTP 서버와 HTTP 클라이언트에 의해 해석이 된다. 
  • TCP / IP를 이용하는 응용 프로토콜이다. 
  • 컴퓨터와 컴퓨터간에 데이터를 전송할 수 있도록 하는 장치로 인터넷이라는 거대한 통신망을 통해 원하는 정보(데이터)를 주고받는 기능을 이용하는 응용 프로토콜이다.
  • HTTP는 연결 상태를 유지하지 않는 비연결성 프로토콜이다.
  • 이러한 단점을 해결하기 위해 Cookie와 Session이 등장하였다.
  • HTTP는 연결을 유지하지 않는 프로토콜이기 때문에 요청/응답 방식으로 동작한다. 

HTTP의 방식

  • 서버(Server): 어떠한 자료에 대한 접근을 관리하는 네트워크 상의 시스템
  • 클라이언트(Client): 자료에 접근할 수 있는 프로그램 

ex)

서버(Server) - 클라이언트(Client)에서 보낸 요청에 대한 응답을 보내준다. 

클라이언트(Client) - 웹 브라우저, 핸드폰 어플리케이션 등등 

 

HTTP Method(HTTP 메소드 종류)

메소드 이름  의미 CRUD와 매핑되는 역할
GET  리소스 취득
(자료를 요청할 때 사용)
Read(조회)
POST 리소스 생성, 리소스 데이터 추가 
(자료의 생성을 요청할 때 사용)
Create(생성)
PUT 리소스 변경
(자료의 수정을 요청할 때 사용)
Update(변경)
DELETE 리소스 삭제
(자료의 삭제를 요청할 때 사용)
Delete(삭제)
HEAD 리소스의 헤더(메타데이터) 취득
OPTIONS 리소스가 서포트하는 메소드 취득
TRACE 루프백 시험에 사용
CONNECT 프록시 동작의 터널 접속으로 변경

 

HTTP 메시지의 구조

HTTP 메시지는 클라이언트에서 서버로 보내는 요청 메시지와 서버에서 클라이언트로 보내는 응답 메시지 2가지가 있다. 

  • 스타트라인(Start Line) ------ 요청라인 또는 상태 라인
  • 헤더(Header) ---------------- 헤더는 생략 가능
  • 빈 줄(Blank Line) ------------ 헤더의 끝을 빈 줄로 식별
  • 바디(Body) ------------------- 바디는 생략 가능

위 메시지 구조에서 스타트라인은 요청 메시지일 때 요청 라인(request line)이라고 하고, 응답 메시지일 때 상태 라인(status line)이라고 한다. 스타트라인에 이어 헤더는 각 행의 끝에 줄 바꿈 문자인 CRLF가 있으며, 헤더와 바디는 빈 줄로 구분한다. 헤더와 바디는 생략할 수 있고, 바디에는 텍스트뿐만 아니라 바이너리 데이터도 들어갈 수 있다. 

 

 

 

Request(요청)

클라이언트가 서버에게 연락하는 것을 요청이라고 하며 요청을 보낼 때는 요청에 대한 정보를 담아 서버로 보내게 된다. 

 

Request의 예시

서버가 클라이언트에서 보낸 주문서를 받아 클라이언트가 어떤 것을 원하는지 파악할 수 있게 한다.

이처럼 요청은 식당에서 주문서를 작성하는 것과 비슷한 개념이다. 

 

Request HTTP 메시지 예시

GET http://www.grape-story.com HTTP/1.1 <= 시작줄
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) <= 헤더
Upgrade-Insecure-Requests: 1

시작 줄(Start Line) 

첫 줄은 시작 줄(요청 라인)로 요청 방식(Method), 요청 URL, 프로토콜 버전으로 구성된다. 즉, 요청 메시지의 시작 줄은 메서드 주소 버전으로 구성된 것이다. 

GET : HTTP Method

http://www.grape-story.com: 요청 URL 주소 

HTTP/1.1 : HTTP 버전

 

두 번째 줄 (Header)

두번째 줄부터는 헤더이며 요청에 대한 정보를 담고 있다. 여기서 User-Agent, Upgrade-Insecure-Requests

등등이 헤더에 해당되며 헤더의 종류는 다양하다. 

 

본문(Body)

헤더에서 한 줄 띄고 본문이 시작된다. 본문은 요청을 할 때 함께 보낼 데이터를 담는 부분으로 현재 예시에는 단순히 주소로만 요청을 보내고 있고 따로 데이터를 담아 보내지 않기 때문에 본문이 비어있다.

 

 

Response(응답)

서버가 Client에서 온 요청(Request)에 대한 과정을 수행한 후 Client에게 보내는 것을 응답(Response)라고 한다.

 

Status Code(상태 코드)

메소드명 의미 CRUD와 매핑되는 역할
1xx 조건부 응답, 정보 제공 임시적인 응답으로, 현재 클라이언트의 요청까지 처리되었으니 계속 진행하라는 의미이다. HTTP 1.1 버전부터 추가되었다.
2xx 성공 클라이언트의 요청이 서버에서 성공적으로 처리되었다는 의미 이다.
3xx 리다이렉션 완전한 처리를 위해서 추가적인 동작을 필요로 하는 경우이다. 
4xx 클라이언트 에러 (요청 오류) 없는 페이지를 요청하는 것처럼 클라이언트의 요청 메시지 내용이 잘못된 경우 이다.
5xx 서버 에러 서버 측 사정에 의해서 메시지 처리에 문자가 발생한 경우이다. 
서버의 부하, DB 처리과정 오류, 서버에서 익셉션이 발생하는 경우가 이에 해당한다.

 

Response HTTP 메시지 예시

HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 19162
Content-Type: text/html; charset=utf-8


<!DOCTYPE html><html lang="ko" data-reactroot=""><head><title...

Request HTTP 메시지와 마찬가지로 시작 줄, 헤더, 본문으로 구성되어 있다. 

 

시작 줄(Start Line) 

첫 줄은 버전, 상태 코드, 상태 메시지로 구성되어 있다.  HTTP/1.1 버전에 200은 상태 코드로 성공적인 요청이었다는 뜻이다.

 

두 번째 줄 (Header)

두번째 줄부터는 헤더로 응답에 대한 정보를 담고 있다.

 

본문(Body)

응답에는 보통 본문이 있다. 보통 데이터를 요청하고, 응답 메시지에는 요청한 데이터를 담아서 보내주는 것이다. 

응답 메시지에 HTML이 담겨 있는데 이 HTML을 받아 브라우저가 화면에 렌더링을 한다. 

'웹 프로그래밍 > Web' 카테고리의 다른 글

URI, URL 이란?  (0) 2021.05.09
REST, REST API, RESTful 이란 ?  (0) 2021.05.04
URL 설계  (0) 2021.04.23
Comments