Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
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 29 30 31
Archives
Today
Total
관리 메뉴

develog

HTTP란? 본문

CS

HTTP란?

LineGu 2022. 1. 22. 20:48

HTTP를 알아보기 전에 먼저 알아야할 개념부터 살펴보자.

프로토콜과 TCP에 대해서 모른다면 아래 글을 먼저 읽는 것을 추천한다.

프로토콜과 TCP 간단하게 알아보기

HTTP

HTTP 는 Hyper Text Transfer Protocol 의 줄임말이다.

Server와 Client간의 데이터 통신을 위한 프로토콜이다.

HTTP의 특징은 아래와 같다.

  • 애플리케이션 레벨의 프로토콜로 TCP/IP 위에서 작동한다.
  • 상태를 가지고 있지 않은 Stateless 프로토콜이다.
  • 디폴트 포트는 80포트이다.
  • Method, Path, Version, Headers, Body로 이루어져있다.
  • 클라이언트-서버 구조이다.
  • 비연결성(connectionless) -> 현재는 지속 연결
  • 단순함, 확장 가능

HTTP는 암호화가 되지 않은 평문 데이터를 전송하는 프로토콜이므로, HTTP로 비밀번호나 주민등록번호 등을 주고 받으면 제3자가 정보를 조회할 수 있다.

따라서 현재는 대부분 HTTPS를 사용하고 있다.

Stateless와 Stateful, 비연결성, 지속 연결이 궁금하다면 이 글을 모두 읽고, 아래 글을 읽는 것을 추천한다.

Stateless, Stateful, 비연결성, 지속 연결 알아보기

HTTP 요청 및 응답 구조

HTTP는 Method, Path, Version, Headers, Body로 이루어져있는데 아래와 같이 작성된다.

위 사진은 요청 시 구조이다.

응답인 경우엔, 아래와 같이 HTTP version, 상태 코드, 상태 메세지 순으로 이루어져있다.

HTTP/1.1 200 OK

METHOD

Method로는 GET, POST, PUT, PATCH, DELETE 가 있다. OPTIONS, HEAD, CONNECT, TRACE도 있지만, 이는 우리가 자주 접하게 될 Method는 아니다.

예를 들어, OPTIONS는 프리플라이트(사전 전달)로 서버에게 우리가 이런 요청을 보내도 되는지 물어보기 위한 Method이다. 이는 브라우저에서 자동으로 해주기 때문에 우리가 직접 컨트롤하게 될 Method는 아니다.

GET, POST, PUT, PATCH, DELETE는 정말 단어 그대로이다.

GET은 가져오다, POST는 게시하다, PUT은 집어넣다, PATCH는 고치다, DELETE는 지우다.

위 뜻대로 행동한다.

우리가 평소에 특정 웹사이트에 들어갈 때에, 우리도 모르게 이런 Method를 쓰고 있었다.

www.tistory.com 에 들어가면, 우리는 웹 사이트의 HTML을 달라는 GET요청을 날리는 것이고, 서버가 그에 대한 응답을 해주어 웹 사이트를 볼 수 있는 것이다.

이렇게 동사로 이루어진 Method, 명사로 이루어진 주소를 이용해 무엇을 하고자 하는지 명확하게 하는 개발 방식이 REST이다.

PATH

path는 요청을 어디로 보낼지 적힌 주소이다. 여기에 쿼리스트링을 이용해 데이터를 담아 요청을 보낼 수 있다.

구조는 아래와 같다.

VERSION

Version은 HTTP의 버전이다. 현재는 HTTP/3를 개발 중에 있다.
버전별 차이는 2.0, 3.0에서 지속 연결이 최적화 되고 있다는 사실 외에 나도 딱히 아는 것은 없다.

HEADERS

Header는 HTTP에 대한 설정이나, 연결 시간, USer-Agent 등등 많은 정보를 담고 있다.

요청 헤더, 응답 헤더, 공통 헤더 등등 종류도 다양하고 그만큼 수도 많아 여기에 적기 어렵다.
이는 HTTP Method와 함께 따로 글을 작성하려고 한다.

BODY

여기서 Body를 작성하고 싶다면, Headers 아래에 한 칸을 띄우고 작성하면 된다.

Body는 서버로 보내고 싶은 특정 데이터를 담을 때 사용한다.

Body를 사용하지 않고, 쿼리스트링으로 데이터를 보낼 수 있다.

Body는 비어있을 수 있다.


HTTP 상태코드

HTTP 상태코드란, 요청을 보낸 후 그 요청을 수행한 결과에 대한 응답에 담겨오는 HTTP 상태를 나타내는 코드이다.

  • 2xx - 성공

200대의 코드는 성공을 의미한다.

200 : GET 요청에 대한 성공
204 : No Content. 성공했으나 응답 본문에 데이터가 없음
205 : Reset Content. 성공했으나 클라이언트의 화면을 새로 고침하도록 권고
206 : Partial Conent. 성공했으나 일부 범위의 데이터만 반환
  • 3xx - 리다이렉션

300번대의 상태 코드는 대부분 Client가 이전 주소로 데이터를 요청하여 서버에서 새 URL로 리다이렉트 되도록 유도하기 위해 발생한다.

301 : Moved Permanently, 요청한 자원이 새 URL에 존재
303 : See Other, 요청한 자원이 임시 주소에 존재
304 : Not Modified, 요청한 자원이 변경되지 않았으므로 클라이언트에서 캐싱된 자원을 사용하도록 권고. ETag와 같은 정보를 활용하여 변경 여부를 확인
  • 4xx - 클라이언트 에러

400번대 상태 코드는 Client의 잘못으로 발생한 코드다. 없는 자원을 요청하던가, 유효하지 않은 방식으로 요청을 보낼 때 발생한다.

400 : Bad Request, 잘못된 요청
401 : Unauthorized, 권한 없이 요청. Authorization 헤더가 잘못된 경우
403 : Forbidden, 해당 자원에 대해 접근 금지
404 : Not Found, 없는 자원에 대해 접근하려는 경우
405 : Method Not Allowed, 허용되지 않은 요청 메서드
429 : Too Many Requests, 짧은 시간동안 너무 많은 요청을 보내는 경우
  • 5xx - 서버 에러

500번대 상태 코드는 Server에서 오류가 난 경우이다.

501 : Not Implemented, 요청한 동작에 대해 서버가 수행할 수 없는 경우
503 : Service Unavailable, 서버가 과부하 또는 유지 보수로 내려간 경우
504 : Gateway Time-out, Upstream과의 통신에서 시간이 오래 걸린 경우이다. 프록시 서버나 nginx에서 자주 발생한다.

HTTP를 간단하게 알아보았다. 사실 HTTP는 이보다 더 복잡하고 알아야할 것이 많다.

궁금하다면 다음 포스팅을 참고하자.

HTTP/0.9 부터 HTTP/3까지. QUIC이란?

Comments