ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Network - HTTP
    Computer Science/Network 2021. 12. 13. 16:03

    HTTP

    HTTP란?

    ㆍ HTTP는 HyperText Transfer Protocol의 약자로 www 상에서 사용이 되는 프로토콜이다.

    ㆍ 1990년Tim Berners-Lee가 World Wide Web을 만들고, 하이퍼텍스트 문서들을 주고받기 위한 규약으로 만든 것이 HTTP이다.

    ㆍ 현재는 문서들 뿐만 아니라 이미지, 비디오, 음성 등 거의 모든 형식의 데이터를 전송하는 데 사용되고 있다.

    ㆍ HTTP는 서버와 클라이언트 사이에 요청과 응답을 주고받는 프로토콜로, 우리가 흔히 웹 브라우저 주소창에 입력하는 웹 주소인 URL을 통해 이루어진다.

    ㆍ 실제 전송은 TCP를 통해 이루어지며 포트는 80번을 이용한다.

     

    HTTP 버전

    ㆍ HTTP 초기에는 버전 표시가 없었고, 이후 업데이트가 되면서 버전 표시가 필요하게 되어 1991년 HTTP/0.9부터 시작하여 1996년 HTTP/1.0을 거쳐 1999년 HTTP/1.1까지 확장되었다. 이후로는 버전 업 없이 계속 사용되고 있다.

    ㆍ 하지만, 오늘날 웹 환경은 과거에 비해 더 많은 리소스를 사용하고, 동적인 부분이 많아지고, 보안이 중요해지는 등의 변화를 겪다 보니 HTTP/1.1에 한계를 많이 느끼게 된다.

    ㆍ 그래서 2015년 구글이 SPDY 프로토콜을 기반으로 만든 HTTP/2.0이 공식적으로 표준화되어 나왔다.

    ㆍ 아직까지 많은 사이트들에서 HTTP/1.1을 사용하지만 HTTP/2.0을 지원하는 사이트들이 늘어나고 있다.

     

        1. HTTP/0.9 : 단순한 구성으로 이루어졌으며, 요청 가능한 메서드는 GET이 유일했다. 또한, HTTP 헤더가 존재하지 않아 HTML 파일만 전송이 가능했다.

        2. HTTP/1.0 : HTTP 헤더 개념이 도입되어, 브라우저가 요청에 대한 성공과 실패를 알 수 있게 되었다. 데이터에 대한 정보를 담고 있는 메타데이터 전송이 허용되고, Content-Type의 추가는 HTML 외 다른 문서들도 전송 가능하게 하였다.

        3. HTTP/1.1 : HTTP의 표준 프로토콜이며, 많은 부분들이 개선되었다. 개선된 부분 중에는 커넥션 제어에 관한 두 가지 모델의 추가가 있다. 하나는 커넥션이 재사용될 수 있는 모델로 서버를 다루다 보면 보게 되는 Keep-Alive 옵션이다. 또 다른 하나는 파이프라이닝을 추가하여 요청에 대한 응답이 완전히 전송되기 이전에 두 번째 요청을 전송 가능하게 하여 네트워크 지연을 줄이는 모델이다.

        4. HTTP/2.0 : 구글이 만들었고, 네트워크 지연 시간을 줄이기 위한 성능에 목표를 둔 HTTP의 두 번째 버전이다. HTTP 헤더 데이터의 압축이나, 서버 푸시 기술 추가 등 많은 부분들이 보완되었다. 하지만, 중요한 점은 HTTP/2.0은 HTTP 표준을 대체하는 것이 아니라 확장한다는 점이다.

     

     

    HTTP 메시지 구조

     

    ㆍ HTTP 메시지는 ASCII로 인코딩 된 텍스트로 되어 있다. 기본적인 메시지 구조는 위 사진과 같다.

     

      요청(request) 응답(response)
    시작 라인 1. HTTP 메서드 (GET, POST, PUT 등)
    2. 요청 URL
    3. HTTP 버전
    1. HTTP 버전
    2. 상태 코드 (200, 404 등)
    3. 상태 텍스트 (Not Found 등)
    헤더 1. request 헤더 (Host, User-Agent, Accept 등)
    2. general 헤더 (Connection 등)
    3. entity 헤더 (Content-Type 등)
    1. response 헤더 (Server, Set-Cookie, Age 등)
    2. general 헤더 (Connection 등)
    3. entity 헤더 (Content-Type 등)
    공백 라인 메타 데이터 전송이 끝났음을 알리는 공백
    메시지 본문 서버에 전송하는 데이터 등 클라이언트에 전송하는 데이터 등

    ㆍ HTTP 메시지는 기본적으로 클라이언트가 요청하고 서버가 응답을 하는 구조이기 때문에, 메시지는 요청이냐 응답이냐에 따라 각 메시지의 구성 내용이 달라진다.

     

     

    HTTP 메서드

     

    메서드 설명
    GET 리소스 요청
    POST 서버에 데이터 전송
    HEAD 메세지 헤더 요청
    PUT 리소스 전체 수정 요청
    DELETE 리소스 제거 요청
    OPTIONS 서버에서 제공하는 메서드 목록 요청
    TRACE 요청 리소스가 수신되는 경로를 보여줌
    CONNECT 프록시 서버와 같은 중간 서버 경유
    PATCH 리소스 부분 수정 요청

    ㆍ HTTP 메서드는 클라이언트가 서버에 요청의 목적 및 종류를 알리는 수단이다. HTTP 요청 시에 메시지 시작 줄에 표시된다.

     

    HTTP 헤더

    ㆍ HTTP 메시지 구조를 보면 HTTP 헤더가 들어가는데 request/response 헤더, general 헤더, entity 헤더로 구분된다.

    ㆍ 헤더는 기본적으로 key-value 방식으로 표기되며, 헤더 안에 들어갈 수 있는 종류는 매우 많다.

     

    1. 요청(request) 헤더

     

    헤더 명 설명
    Host 요청하는 호스트에 대한 호스트 명 및 포트번호
    User-Agent 클라이언트 소프트웨어(웹 브라우저, 모바일)의 이름과 버전 등의 정보
    Accept 클라이언트가 원하는 미디어 타입 및 우선순위
    Accept-Language 클라이언트가 원하는 가능한 언어
    Accept-Encoding 클라이언트가 원하는 문자 인코딩 방식
    If-Modified-Since 제시한 일시 이후로 변경된 리소스 요청
    Cookie 서버에 의해 Set-Cookie로 클라이언트에 설정된 쿠키 정보
    Referer 특정 페이지에서 링크를 클릭하여 요청하였을 경우 직전에 머물렀던 링크 주소

     

    2. 응답(response) 헤더

     

    헤더 명 설명
    Server 서버 소프트웨어 정보
    Access-Control-Allow-Origin 요청을 보내는 프론트 주소와 받는 백엔드 주소가 다르면 CORS 에러 발생
    Set-Cookie 서버에서 클라이언트로 쿠키 생성
    Etag HTTP 컨텐츠가 바뀌었는지 검사하는 태그
    Allow 서버에서 지원가능한 HTTP 메서드 리스트

     

    3. general 헤더

     

    헤더 명 설명
    Date HTTP 메시지 생성 일시
    Connection 커넥션 정보 (keep-alive / token list)
    Cache-Control 캐싱 관련 옵션

     

    4. entity 헤더 (body가 없는 경우 전송되지 않음)

     

    헤더 명 설명
    Content-Type 미디어 타입 정보

     

    HTTP 상태 코드

     

    상태코드 설명
    1xx 정보성
    2xx 성공
    3xx 리다이렉션
    4xx 클라이언트 오류
    5xx 서버 오류

    ㆍ HTTP 상태 코드는 응답 메시지 중에서도 시작 라인에 표기되며, 요청에 대한 처리 결과를 알려주는 역할을 한다.

    ㆍ 상황에 따라 상태 코드는 3 자리 숫자로 표현하는데 100번대부터 500번대까지 있다.

    ㆍ 상태 코드별 값과 의미가 다양하지만 각 번호대의 대략적인 의미는 위와 같다.

     

    728x90

    'Computer Science > Network' 카테고리의 다른 글

    Network - HTTPS & SSL  (0) 2022.01.01
    Network - OSI 7 계층  (0) 2021.10.19

    댓글

Designed by Tistory.