웹의 핵심 기술 HTTP 프로토콜

유지원·2022년 5월 18일
1

(인프런) 반드시 알고 넘어가야 할 웹 기술 기초편 을 보고 정리한 내용입니다.

GITHUB로 보고싶다면?


HTTP (HyperText Transfer Protocol)

  • 팀 버너스 리 박사에 의해 개발됨.
  • 하이퍼 텍스트 문서(HTML)를 전송하기 위해 사용되는 프로토콜.
  • 통신 규약으로 웹의 핵심 기술.

버전

  • HTTP/0.9
    • 최초로 웹이 만들어졌을 때 오직 HTML을 받아오기 위해 만들어짐.
    • 버전 번호, 명세서가 없고 정식 사양이 아니였음.
    • 이후 HTTP/1.0부터 정식 사양으로 되면서 이전이란 의미로 HTTP/0.9라는 버전이 붙여짐.
    • GET 메소드만 지원하며, 특별한 기능은 없음.
  • HTTP/1.0
    • HTTP의 정식 사양으로 처음으로 널리 사용하기 시작한 버전. RFC1945가 발생됨.
    • POST, HEAD 메소드, 헤더 지원.
    • 요청의 결과를 알 수 있는 상태코드 추가.
    • HTML 파일들 외 다른 파일들도 전송 가능.
    • 각 요청마다 새로운 연결을 맺고 끊고 다시 새로운 연결을 맺는 비효율적인 비 연결지향(Connectionless) 방식으로 성능이 떨어짐.
  • HTTP/1.0+
    • 비효율적인 연결에 대한 문제가 있었음.
    • "Keep-Alive 커넥션"을 지원함으로써 여러 번 커넥션을 맺는 설계상의 문제를 해결함.
  • HTTP/1.1
    • HTTP의 설계상 문제들을 해결하고 성능을 최적화함.
    • Keep-Alive는 명세에서 빠지고 기본으로 지속 연결이 활성화 됨.
    • 모든 요청이 끝나면 "Connection: closes" 헤더를 통해 연결 종료를 알림.
    • 기존의 GET, POST, HEAD 3가지 뿐이었던 메소드가 OPTIONS, PUT, DELETE 등 많은 메소드가 추가됨.
  • HTTP/2.0
    • HTTP의 성능 문제는 여전히 문젯거리로 존재.
    • 요즘 웹의 경우 하나의 웹 페이지를 보기 위해서 수십개의 요청을 보내야 정상적으로 페이지를 볼 수 있음. 때문에 이런 문제를 해결할 수 있는 HTTP/2.0이 등장함.
    • 성능 향상에 초점을 둔 프로토콜로 멀티플렉싱 스트림, 헤더 압축, 서버 푸시 등의 기능이 추가됨.
  • HTTP/3.0

OSI 7 Layer에서 바라 본 HTTP 프로토콜

  • OSI 계층 모델은 각 기능별 모듈화 된 기능을 계층별로 총 7계층으로 구성되어 있음.
  • 실제로는 TCP/IP 계층 모델을 표준으로 하고 있음.
  • 웹에서 사용되는 HTTP, HTTPS 프로토콜은 응용 계층에 해당됨.
        OSI 계층 모델         TCP/IP 계층 모델             계층별 프로토콜
 
        -----------          ---------------         
         응용 계층           
     Application Layer
        -----------       
         표현 계층                응용 계층                 HTTP, HTTPS, SMTP,
     Presentation Layer      Application Layer           FTP, TELNET, SSH, DNS, ...
        -----------
         세션 계층
       Session Layer    
        -----------          ---------------
         전송 계층                전송 계층                    TCP, UDP, ...
      Transport Layer        Transport Layer
        -----------          ---------------
         네트워크 계층            인터넷 계층                 IP, ICMP, ARP, ...
        Network Layer         Internet Layer
        -----------          ---------------
         데이터링크 계층
       Data-Link Layer
        -----------          네트워크 액세스 계층                MAC, ...
          물리 계층          Network Access Layer
        Physical Layer
        -----------          ---------------

TCP/IP 통신에 대한 이해

  • 인터넷을 이용하기 위해 TCP/IP 기반의 통신을 함.
  • 대부분의 네트워크 통신은 TCP/IP 기반 통신을 근간으로 함.
  • 통신을 하기 위한 중요한 정보.
    • IP(Internet Protocol) : 물리적 호스트 대상을 찾음.
    • port : 논리적 대상을 찾음.

연결 관리 방식

  • 비 지속 연결(Non-Persistent Connection)
    • HTTP/0.9, HTTP/1.0
    • 초기 HTTP에서 사용하던 방식.
    • 초기의 웹은 단순히 문서를 전달하는 방식으로 지속 연결이 필요하지 않음.
    • 한번의 요청과 응답 과정을 거치면 바로 연결을 끊어 버림.
    • 오늘날의 웹 문서의 경우 인터페이스를 구성하기 위해 많은 리소스가 필요한데 리소스 요청 시 3-Way HandShake를 수행해야 하기 때문에 오늘날의 웹과는 부적합한 연결 방식.
  • 지속 연결(Persistent Connection)
    • HTTP/1.0+, HTTP/1.1, HTTP/2.0
    • HTTP/1.0+에서 Keep-Alive 연결을 지원. 헤더에 "Connection: Keep-Alive" 란 것이 명시가 되어 있으면 지속 연결을 사용한다는 것.
    • HTTP/1.1부터는 "Connection: Keep-Alive" 헤더 필요 없이 기본으로 지속 연결을 하게 됨.
    • 단 한번의 3-Way HandShake 과정으로 여러 번의 요청과 응답 과정을 거치며, 비 지속 연결에 비해 시간이 확연히 단축됨.
  • HTTP/1.0+에서 Keep-Alive 커넥션을 통해 지속 연결을 지원하며, HTTP/1.1부터는 명세에서 빠지고 지속 연결을 기본으로 함. 즉, Keep-Alive 사용없이 모든 연결을 지속 연결로 함.

HTTP 메시지

  • 메시지 구조.
    • 시작줄, 메시지 헤더, 메시지 바디. 각 행은 개행 문자(\r\n)를 기준으로 분류함.
  • 개행 문자.
    • 텍스트의 한 줄이 끝남을 표시하는 문자 또는 문자열.
    • 새 줄 문자 혹은 줄 바꿈 문자라고도 함.
    • OS 또는 프로토콜마다 개행 문자의 ASCII 값이 다름.
    • HTTP와 같은 인터넷 프로토콜의 경우 ASCII의 CR + LF를 개행 문자로 사용하도록 규정함.
      • CR(Carriage Return).
        • 문자: \r
        • Hex: 0x0D
      • LF(Line Feed).
        • 문자: \n
        • Hex: 0x0A
    • HTTP 통신 상에서 개행 문자로 라인을 구분하여 데이터 식별 함.
       시작줄                  메시지 헤더(1)                        메시지 헤더(2)                             메시지 바디
______________________     ___________________    ______________________________________________        _________________
POST/login.php HTTP/1.1\r\nHOST:www.test.co.kr\r\nContent-Type:application/x-www-form-urlencoded\r\n\r\nid=test&pw=test123
                       ----                   ----                                              --------
                    개행 문자를 기준으로 각 행을 구분. 
  • 요청 메시지(Request Message).
    • 웹 브라우저가 요청할 때 보내는 메시지.
    • 시작줄 : 요청라인으로 메소드, 요청 URL, 버전이 들어감.
    • 메시지 헤더 : 요청의 속성과 추가 정보들이 포함되어 있음.
    • 메시지 바디 : 엔티티 바디가 들어가며, 메시지의 데이터가 들어가는 부분. 데이터 수송을 목적으로 설계. 엔티티 바디는 메소드에 따라 존재 유/무가 결정되는 선택적인 부분.
  • 응답 메시지(Response Message).
    • 서버가 HTTP 요청 메시지를 받고 응답할 때 보내는 메시지.
    • 시작줄 : 상태 라인으로, 버전, 상태 코드, 응답 문구가 들어감.
    • 메시지 헤더 : 응답의 속성과 추가 정보들이 포함되어 있음.
    • 메시지 바디 : 엔티티 바디가 들어가며, 메시지의 데이터가 들어가는 부분. 데이터 수송을 목적으로 설계. 엔티티 바디는 메소드에 따라 존재 유/무가 결정되는 선택적인 부분.

HTTP 메소드

  • GET, POST, PUT, DELETE, PATCH

HTTP 상태 코드 (Status Code)

  • 클라이언트가 요청을 할 경우 서버는 요청에 대한 상세 결과를 알려줌.
  • 3자리 숫자로 구성되어 있으며, 뒤에 응답 문구가 붙음. (응답 문구는 상태 코드에 대한 설명)
profile
👋 https://github.com/ujw0712

0개의 댓글