HTTP란

개요

HTTP(Hyper Text Transfer Protocol)란? 웹에서 이뤄지는 모든 데이터를 교환하기 위한 프로토콜의 일종으로, 클라이언트와 서버 사이에서 어떻게 메시지를 교환할지 정해놓은 규칙이다.

프로토콜이란 어느 시스템이 원활하게 통신할 수 있도록 해주는 통신규약이다. 다양한 규격의 디바이스가 있고 주고받는 데이터가 다양하다. 규격이 다르면 통신이 원활하지 못하기 때문에 규약을 정해놓는다.

HTTP의 구조는 요청(Request)과 응답(Response)으로 구성되어 있다. 클라이언트와 서버들은 개별적인 메시지 교환에 의해 통신한다.

● '클라이언트 → 서버' 방향의 메시지를 "요청"이라고 부른다.

● '서버 → 클라이언트' 방향의 메시지를 "응답"이라고 부른다.

ex) 클라이언트가 웹 브라우저에서 링크가 걸려있는 텍스트를 클릭(요청)하면 링크를 타고 새로운 페이지로 넘어간다.(응답)

우리가 사용하는 웹 브라우저에서 인터넷 주소 맨 앞에 들어가는 http://는 바로 이 프로토콜을 사용해서 정보를 교환하겠다는 표시이다.

특징

  • 비연결성

    HTTP는 클라이언트가 서버에 정보를 요청하면, 서버는 응답 코드와 내용을 전송하고 클라이언트와 연결을 종료한다.

  • 무상태성

    (비연결성 때문에) 이전의 정보나 현재 통신의 상태가 남아있지 않다. HTTP는 상태를 저장하지 않는다. 동일한 연결 상에서 연속하여 전달된 두 개의 요청 사이에는 연결고리가 없다.

    자원의 낭비를 줄일 수 있지만, 클라이언트의 상태를 유지시켜 줄 수 없다.

    이를 위해 세션과 쿠키가 존재한다.

HTTP의 메시지 구조

HTTP 메시지는 단순한 줄 단위의 문자열이다. 이진 형식이 아닌 일반 텍스트기 때문에 사람이 읽고 쓰기 쉽다.

HTTP 요청과 응답 메시지의 구조는 서로 닮았으며, 그 구조는 다음과 같다.

  1. 시작 줄(start-line)에는 실행되어야 할 요청 메서드 / 응답에 대한 상태코드가 기록되어 있다.
  2. 옵션으로 HTTP 헤더 세트가 들어간다. 여기에는 요청에 대한 설명, 혹은 메시지 본문에 대한 설명이 들어간다.
  3. HTTP 헤더 메타정보가 전송되었음을 알리는 빈 줄(empty line)이 삽입된다.
  4. 요청과 관련된 내용(HTML 폼 컨텐츠 등)이 옵션으로 들어가거나, 응답과 관련된 문서(document)가 들어간다. 본문의 존재 유무 및 크기는 첫 줄과 HTTP 헤더에 명시된다.

HTTP 메시지의 시작 줄과 HTTP 헤더를 묶어서 요청 헤드(head)라고 부르며, 이와 반대로 HTTP 메시지의 페이로드는 본문(body)이라고 한다.


요청(Request)

클라이언트가 서버에게 요청하는 것이다. 마치 음식점에서 주문서를 작성하는 것과 비슷하다. 요청에 들어가는 메서드만 간략히 알아본다.

메서드

서버가 수행해야할 동작을 나타낸다. 아래는 자주 사용하는 HTTP 메서드다.

  • GET : 클라이언트가 서버에게 URL에 해당하는 자료의 전송을 요청한다.
  • POST : 클라이언트가 서버에서 처리할 수 있는 자료를 보낸다. ex) 게시판에 글을 작성 시, 클라이언트의 문서가 서버로 전송돼야 한다.
  • PUT : 클라이언트가 서버에게 지정한 URL의 데이터를 저장할 것을 요청한다.
  • PATCH : 클라이언트가 서버에게 지정한 URL의 데이터를 부분적으로 수정할 것을 요청한다.
  • DELETE : 클라이언트가 서버에게 지정한 URL의 정보를 제거할 것을 요청한다.

이외에도 HEAD, CONNECT, TRACE, OPTIONS 가 존재한다.

응답(Response)

클라이언트의 요청에 대한 서버의 응답이다. 상태코드 및 메시지 그리고 요청한 정보가 클라이언트에게 되돌아간다. 응답에 들어가는 상태코드만 간략히 알아본다.

상태코드

HTTP 상태 코드로, 요청의 성공이나, 실패했다면 그 이유를 알려준다. 100부터 500번대까지 존재한다.

  • 1xx : 요청을 받았고, 아직 작업이 진행 중이다.
  • 2xx : v성공v
  • 3xx : 이 요청을 완료하기 위해서는 리다이렉션이 이뤄져야 한다는 의미이다.
  • 4xx : 요청오류이다. 클라이언트 측에서 문제가 있어서 서버가 요청을 이해하지 못했을 경우 발생한다.
  • 5xx : 서버오류이다. 요청은 올바르지만 서버가 처리하지 못했을 경우 발생한다.

HTTP와 HTTPS의 차이

보안의 차이라고 보면 된다. HTTP에서 보안이 추가되면 HTTPS가 된다.

참고문헌

HTTP 개요 / MDN

HTTP 메시지 / MDN

Leave a comment