HTTP란?

Junwon SEO·2022년 10월 11일
0

CS 스터디

목록 보기
1/4

0. 들어가며

Http에 대해 알아보기 앞서 웹의 구성에 대해 간략하게 알아보자.
일반적으로 웹은 클라이언트(Client)와 서버(Server)로 구성되어 있다.

클라이언트란 요청(Request)을 보내는 쪽을 의미하며 일반적으로 웹 관점에서는 브라우저를 의미한다. 그리고 서버는 요청에 응답(Response)하는 쪽을 의미하며 일반적으로 데이터를 보내주는 컴퓨터를 의미한다. 이렇게 클라이언트와 서버가 상호작용하는 과정으로 웹이 이루어진다.

1. HTTP 프로토콜이란?

HTTP란 Hyper Text Transfer Protocol의 약자이다.

여기서 Hyper Text란 무엇일까. 우리가 흔히들 말하는 하이퍼링크는 밑줄이 쳐져 있는 링크로 클릭하게 되면 해당 링크로 이동한다. 이는 자료가 연결되어 있는 참조 고리를 의미하며 이 링크를 통해 사진, 동영상 등 파일의 위치를 지정할 수 있다.
즉, 같은 의미로 HyperText란 하이퍼 링크를 통해 사용자가 한 문서에서 다른 문서로 이동할 수 있도록 하는 초월적인(Hyper) 글(Text)을 말한다.

그럼 Transfer Protocol은 무엇일까. 통신 프로토콜이란 컴퓨터 내부 또는 컴퓨터 사이에서 일어나는 데이터의 교환 방식을 정의하는 규칙 체계이다. 기기간 통신은 교환되는 데이터의 형식에 대해 상호 합의를 요구하는데 이를 정의하는 규칙의 집합을 프로토콜이라 한다.

쉽게 말해 HTTP란 웹에서 브라우저와 서버 간에 데이터를 주고받는 방식으로 조금 더 풀어보면 "나는 이렇게 줄테니 넌 이렇게 받고 난 너가 준거 그렇게 받을게" 정도가 된다.

2. HTTP 프로토콜의 특징

Http 프로토콜은 아래와 같이 여러가지 특징을 가지고 있다.

  • 일반적으로 TCP/IP 통신 프로토콜 위에서 동작하며 예외적으로 UDP 프로토콜도 사용한다.
  • TCP/IP 프로토콜을 이용하는 경우 80번 포트를 사용한다.
  • 상태가 없는(stateless) 프로토콜이다. 여기서 상태가 없다는 말은 데이터를 주고받기 위해 행해지는 각각의 데이터 요청이 서로 독립적으로 관리가 된다는 뜻이다. 쉽게 말해 이전 데이터 요청과 다음 데이터 요청이 서로 관련이 없다는 뜻이다.
  • 단방향성이다. 사용자의 하나의 요청에 하나의 응답을 하는 방식이기 때문에 서버가 먼저 응답하지 않는다.

3. HTTP 프로토콜의 문제점

  • HTTP는 평문 통신이기 때문에 도청이 가능하다.
  • 통신 상대를 확인하지 않기 때문에 위장이 가능하다.
  • HTTP는 따로 암호화 과정을 거치지 않기 때문에 중간에 패킷을 가로챌 수 있고, 수정할 수 있다. 따라서 보안에 취약하다.
  • 이를 보완하기 위해 등장한 것이 HTTPS 이다.

[HTTPS] HTTP 통신하는 소켓 부분을 인터넷 상에서 정보를 암호화하는 SSL(Secure Socket Layer)이라는 프로토콜로 대체한 것.

4. HTTP 요청 메서드

클라이언트가 서버에게 데이터를 요청하는 것은 식당에서 음식을 주문하기 위해 주문서를 작성하는 것과 같다. 웹에서는 요청하는 데이터에 특정 동작을 하기 위해서 요청 메서드(HTTP Request Method)를 이용한다.

GET : 존재하는 자원에 대한 요청 (Read)
POST : 새로운 자원을 생성 (Create)
PUT : 존재하는 자원에 대한 변경 (Update)
DELETE : 존재하는 자원에 대한 삭제 (Dlete)
HEAD : 서버 헤더 정보를 획득. GET과 비슷하지만 Response Body 반환 X
OPTIONS : 서버 옵션들을 확인하기 위한 요청. CORS에서 사용

5. HTTP 메시지

클라이언트가 원하는 데이터에 대한 주문서를 적어서 서버에 보내듯이, 서버도 응답에 대한 정보를 담아 클라이언트로 보내는데, 이런 정보가 담긴 메시지를 HTTP 메시지라고 부른다. HTTP 메시지는 클라의이언트의 요청에 대한 HTTP 메시지와 데이터 요청에 대한 응답 HTTP 메시지가 있다.

(요청 Request)

1번줄: 바로 위에서 설명한 HTTP 요청 메서드를 맨 앞에 적고 그 뒤에는 path, 그 뒤에는 프로토콜의 종류와 버전을 적는다. (GET / HTTP/1.1)
2번 줄: 리소스를 요청하는 경로. 즉, 요청하고자 하는 서버의 도메인을 적는다. 위의 예시에서 포트 번호가 생략된 것은 80번 포트(HTTP의 기본 포트)이기 때문이다.
2번 줄 이후: HTTP Request Headers 부분이다.

(응답 Response)

1번 줄: 프로토콜의 종류와 버전, HTTP 상태 코드, HTTP 상태 메시지를 적는다. (GET / HTTP/1.1)
2번 줄 이후: HTTP Reponse Headers 부분이다.

6. HTTP 상태코드

HTTP 상태 코드(HTTP Status Code)는 클라이언트의 요청에 대한 서버의 응답(Response) 정보이다.

상태 코드를 통해 에러의 정보를 알 수 있으므로 주요한 상태 코드를 외워두면 에러 핸들링에 도움이 된다.

[ 200번대: 성공 ]

  • 200 : GET 요청에 대한 성공
  • 201: 정상적으로 생성이 되었다는걸 서버에서 알려줌 (회원가입 등에서 사용)
  • 204 : No Content. 성공했으나 응답 본문에 데이터가 없음
  • 205 : Reset Content. 성공했으나 클라이언트의 화면을 새로 고침하도록 권고
  • 206 : Partial Conent. 성공했으나 일부 범위의 데이터만 반환

[ 300번대: 리다이렉션 ]

300번대의 상태 코드는 대부분 클라이언트가 이전 주소로 데이터를 요청하여 서버에서 새 URL로 리다이렉트를 유도하는 경우이다.

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

[ 400번대: 클라이언트 에러 ]

400번대 상태 코드는 대부분 클라이언트의 코드가 잘못된 경우이다. 유효하지 않은 자원을 요청했거나 요청이나 권한이 잘못된 경우 발생하는데, 가장 익숙한 상태 코드는 404 코드이다. 요청한 자원이 서버에 없다는 의미를 말한다.

  • 400 : Bad Request, 잘못된 요청
  • 401 : Unauthorized, 권한 없이 요청. Authorization 헤더가 잘못된 경우
  • 403 : Forbidden, 서버에서 해당 자원에 대해 접근 금지
  • 404 : Not Found, 요청한 자원이 서버에 존재하지 않음. 없는 url 혹은 존재하지 않는 api를 가지고 요청했을때
  • 405 : Method Not Allowed, 허용되지 않은 요청 메서드
  • 409 : Conflict, 최신 자원이 아닌데 업데이트하는 경우.
    ex) 파일 업로드 시 버전 충돌

[ 500번대: 서버 에러 ]

  • 501 : Not Implemented, 요청한 동작에 대해 서버가 수행할 수 없는 경우
  • 503 : Service Unavailable, 서버가 과부하 또는 유지 보수로 내려간 경우

Reference

https://developer.mozilla.org/ko/docs/Web/HTTP
https://developer.mozilla.org/ko/docs/Web/HTTP/Methods
https://developer.mozilla.org/ko/docs/Web/HTTP/Overview
이미지 및 설명 1
이미지 및 설명 2

0개의 댓글