ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Web] HTTP 에 대한 고찰
    Computer Science/네트워크 2022. 2. 23. 02:25

    졸업 프로젝트로 웹 어플리케이션을 만들려고 한다.

    웹 개발을 하기 위해서는 웹에 관련된 지식들이 필요하다.

    오늘은 그 중에서 HTTP 에 대해서 공부해보았다.

    1. HTTP 란 무엇인가?

    HTTP 의 정의

    HTTP는 정보를 주고받기 위해 만들어진 데이터 전송 규칙이다.

    HTTP를 위키피디아에서 검색해보면 다음과 같다.

    HTTP(Hyper Text Transfer Protocl)는 인터넷 상에서 정보를 주고받을 수 있는 프로토콜이다.

    여기서 Hyper Text 란, HTML 문서를 말한다.

    인터넷 상에서, 즉 "클라이언트와 서버" 사이에서 웹페이지(HTML)나 여러 정보를 주고 받기 위해 만든 통신 규약이라고 할 수 있다.

     

    과거 HTTP 라는 프로토콜이 처음 만들어졌을 때는 GET이라는 메소드만 존재했고, HTTP의 응답은 무조건 HTML 이었다고 한다.

    이것이 점점 발전하여 HTML 뿐만 아니라 Plain Text, JSON, 이미지, 파일 등 다양한 유형의 정보를 주고 받을 수 있게된 것이다.

     

    통신 프로토콜로서의 HTTP

    HTTP 는 Transfer Protocol, 즉 응용 계층의 "통신 프로토콜"이다.

    통신 프로토콜은 멀리 떨어져 있는 컴퓨터 사이에서 메시지를 주고받는 양식과 규칙 체계이다.

     

    인터넷에서 컴퓨터들이 정보를 주고 받기 위해서도 통신 프로토콜이 필요한데, 이를 인터넷 프로토콜 스위트(Internet Protocol Suite)라고 한다.

    현재 가장 많이 사용되는 인터넷 프로토콜 스위트는 TCP/IP 이다.

    TCP/IP 는 5개의 계층으로 이루어져 있는데, HTTP는 TCP/IP 스택 중 "응용 계층"의 프로토콜이다.

    인터넷 프로토콜 스택의 계층 구조

    HTTP는 비연결지향적 프로토콜이다.

    클라이언트가 요청을 하고 응답을 받으면, 서버는 클라이언트와의 연결을 유지하지 않고 끊어버린다.

    이를 통해 클라이언트와의 연결을 위한 리소스를 줄일 수 있어서 더 많은 클라이언트가 서버에 접속할 수 있다는 장점이 있다.

     

    하지만, 서버가 클라이언트를 기억하고 있지 않으므로(무상태: stateless) 동일한 클라이언트의 요청에 대해 매번 새로운 연결과 해제 시도가 발생한다.

    이에 따라 동일한 클라이언트가 서버에 계속해서 요청할 시 연결/해제에 대한 오버헤드가 발생할 수 있다는 단점이 있다.

     

    이러한 단점을 보완하기 위해 서버가 클라이언트를 기억할 수 있는 방법이 생겨났는데 이것이 바로 쿠키와 세션이다.

     

     

    2. HTTP 의 작동 방법

    HTTP 메시지

    HTTP는 서버와 클라이언트 간에 HTTP 메시지를 통해 데이터를 교환하는 방식으로 작동된다.

    HTTP 메시지 타입은 요청응답 두 가지가 있다.

    • 요청(request) : 클라이언트가 서버로 전달해서 서버의 액션이 일어나게끔 하는 메시지
    • 응답(response) : 클라이언트의 요청에 대한 서버의 응답 메시지

    HTTP 메시지는 ASCII 로 인코딩된 텍스트 정보이다.

    하지만 웹 개발자가 직접 HTTP 메시지를 작성하지는 않고, 보통 웹 서버나 웹 브라우저와 같은 소프트웨어가 대신해서 작성해준다.

     

    HTTP 요청과 응답은 거의 비슷한 구조로 되어있다.

    보통 HTTP 메시지의 시작 줄과 HTTP 헤더를 요청 헤드(head) 라고 부르며, 나머지 부분은 바디(body)라고 부른다.

    헤드와 바디 사이에는 둘을 구분하기 위한 공백 라인이 들어간다.

     

    HTTP 요청

    HTTP 요청은 서버에게 특정한 동작을 하도록 요청하기 위해 클라이언트에서 보내는 메시지이다.

    시작 줄(start line)

    시작줄은 'HTTP 메서드', '요청 타겟', 'HTTP 버전' 3가지 요소로 이루어져 있다.

    • HTTP 메서드 : GET, PUT, POST 등의 서버가 수행해야 할 동작을 나타낸다.
      • GET -> 클라이언트가 리소스를 가져오고자 할 때 사용
      • POST -> HTML 폼의 데이터를 전송하고자 할 때 사용
    • 요청 타겟 : URL, 프로토콜, 포트, 도메인 등의 절대 경로로 나타낼 수 있다. 요청 컨텍스트에 의해 특정된다.
    • HTTP 버전 : 응답 메시지에서 사용해야 할 HTTP 버전을 알려주는 역할이다.

    헤더(headers)

    서버에 대한 추가 정보를 전달하기 위해 사용한다.

    대소문자 구분 없는 문자열 다음에 콜론(:)이 붙은 '값'으로 이루어져 있다.

    다양한 종류의 헤더가 있을 수 있으며, 선택적이다.

     

    본문(body)

    요청의 가장 마지막 부분에 들어간다.

    GET과 같이 리소스를 가져오는 요청의 경우에는 본문이 필요하지 않다.

    POST와 같이 서버에 데이터를 전송하는 요청일 경우에 사용한다.

    보통 HTML 폼 데이터 전송과 관련이 있다.

     

    HTTP 응답

    상태 줄(status line)

    HTTP 응답 메시지의 시작 줄은 "상태 줄"이라고 불리며 다음과 같은 정보를 가지고 있다.

    • 프로토콜 버전 : 보통 HTTP/1.1 이다
    • 상태 코드 : 요청의 성공 여부를 나타내는 코드이다. 200, 404, 302 등이 있다.
    • 상태 텍스트 : 상태 코드에 대한 설명을 짧은 글로 표현한 것이다.

    헤더(headers)

    요청 메시지의 헤더와 비슷하다.

    요청 메시지 헤더와 마찬가지로 서버에 대한 추가 정보들을 전달한다.

    대소문자 구분 없는 문자열 다음에 콜론(:)이 붙은 '값'으로 이루어져 있다.

     

    본문

    응답의 가장 마지막 부분에 들어가며, 모든 응답에 본문이 들어가지는 않는다.

    예를 들어 201, 204와 같은 상태 코드를 가진 본문에는 응답이 없다.

    'Computer Science > 네트워크' 카테고리의 다른 글

    네트워크 프로토콜이란?  (0) 2021.02.18
    네트워크란 무엇인가?  (0) 2021.02.18
Designed by Tistory.