ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Network/HTTP] HTTP란? HTTP의 동작 과정
    Network/HTTP 2024. 4. 10. 15:08

    HTTP(HyperText Transfer Protocol)란

    텍스트 기반의 통신 규약으로 인터넷에서 데이터를 주고받을 수 있는 프로토콜이다. 이렇게 규약을 정해두었기 때문에 모든 프로그램이 이 규약에 맞춰 개발해서 서로 정보를 교환할 수 있게 되었다.

     

    HTTP의 특징

    1. 클라이언트 서버 구조

    • Request Response의 구조
    • 클라이언트는 서버에 요청을 보내고, 서버가 요청에 대한 처리 후 응답한다. 
    • 클라이언트(UI)와 서버(데이터접근,, 비즈니스로직 처리)를 분리하는 것이 굉장히 중요하다. -> 클라이언트와 서버가 "독립적으로" 집중 가능. 

     

    2. 무상태 프로토콜(Stateless)

    • 서버가 클라이언트의 상태를 보존하지 않는다.
    • 장점: 서버의 확장성이 높음(스케일 아웃) <- 원래 쓰던 서버에서 요청을 처리하다가 다른 서버에서 이어받아 처리해야하는 경우에도 문제가 생기지 않는다. 
    • 단점: 클라이언트가 추가적인 데이터를 전송해야한다. 

     

    3. 비연결성

    장점
    • HTTP는 기본이 연결을 유지하지 않는 모델로 일반적으로 초 단위 이하의 빠른 속도로 응답을 한다. 
    • 그렇기 때문에 여러 클라이언트에서 한 서버에 요청을 보낼 때 클라이언트마다 요청을 처리 후 바로 연결을 끊어버린다. 
    • 서버 자원을 매우 효율적으로 사용할 수 있다. 
    단점
    • 요청마다 TCP/IP 연결을 새로 맺어야한다. - 3 way handshake 시간이 추가된다. 
    • 웹 브라우저로 사이트를 요청하면 HTML 뿐만 아니라 화면을 보여주는 데 필요한 자바스크립트, css, 이미지 등 "수많은 자원"이 함께 다운로드 된다. -> 현재는 HTTP 지속 연결(Persistent Connection)으로 문제를 해결하였고, HTTP/2, HTTP/3에서 더 많은 최적화가 이루어지고 있다. 
    • HTTP 지속 연결: 한 페이지를 띄우기 위한 모든 요청이 끝나기 전까지 연결을 끊지 않는다. 

     

    4. HTTP 메시지

    HTTP 메시지 구조 - 출처: https://deepwelloper.tistory.com/98

    HTTP 요청 메시지와 응답 메시지 모두 위와 같은 구조를 가진다. HTTP 요청 메시지도 body를 가질 수 있다. 

    1-1. Start Line("요청" 메시지)

    start-line = request-line  / status-line
    request-line = method SP(공백) request-target SP HTTP-version CSRF(엔터)
    GET /search?q=hello&hl=ko HTTP/1.1
    Host: www.google.com
    HTTP 메서드
    • 서버가 수행해야할 동작 지정
    • 종류: GET, POST, PUT, DELETE ...
    요청 대상
    • absolute-path[?query]
    • 절대 경로: "/"로 시작하는 경로
    HTTP 버전

    1-2. Start Line("응답" 메시지)

    start-line = request-line  / status-line
    status-line = HTTP-version SP status-code SP reason-phrase CRLF
    HTTP/1.1 200 OK
    Content-Type: text/html;charset=UTF-8
    Content-Length: 3423

    <html>
    <body>...</body>
    </html>
    HTTP 버전
    HTTP 상태 코드: 요청 성공, 실패를 나타냄.
    • 200: 성공
    • 400: 클라이언트 요청 오류
    • 500: 서버 내부의 오류
    이유 문구
    • 사람이 이해할 수 있는 짧은 상태 코드 설명 글

    2. HTTP 헤더

    • header-field = field-name ":" (띄어쓰기 허용) field value (띄어쓰기 허용)
    • filed-name은 대소문자 구분이 없다. 
    • 용도: HTTP 전송에 필요한 모든 세부 정보들이 다 들어있다. (ex. 바디의 내용, 크기, 클라이언트 정보, 서버 정보, ...)
    • 표준 헤더가 많지만 필요시 임의의 헤더 추가 가능. 
    요청 헤더
    Host: www.google.com
    응답 헤더
    Content-Type: text/html;charset=UTF-8
    Content-Length: 3423

    3. HTTP 메시지 바디

    • 실제로 전송할 데이터
    • HTML 문서, 이미지, 영상, JSON등등 byte로 표현할 수 있는 모든 데이터가 전송이 가능하다. 

     

    References

    인프런(김영한) - 모든 개발자를 위한 HTTP 웹 기본 지식(https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/dashboard)

    https://velog.io/@surim014/HTTP%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80

     

    HTTP란 무엇인가?

    HTTP (HyperText Transfer Protocol) 텍스트 기반의 통신 규약으로 인터넷에서 데이터를 주고받을 수 있는 프로토콜이다. 이렇게 규약을 정해두었기 때문에 모든 프로그램이 이 규약에 맞춰 개발해서 서

    velog.io

     

    'Network > HTTP' 카테고리의 다른 글

    [Network] 인터넷 네트워크(IP, TCP, UDP, PORT, DNS)  (0) 2024.04.10
Designed by Tistory.