HTTP

HyperText Transfer Protocol의 약자. 비순차적으로 연결된 하이퍼텍스트를 보다 빠르게 교환하기 위한 통신 규약이다. 즉, HTML을 포함한 JSON, XML, 이미지나 동영상과 같은 데이터를 서버와 클라이언트 사이에서 이루어질 요청 및 응답 방식을 정해둔 규칙이다. 프론트엔드 서버와 데이터베이스와 같은 백엔드 서버 간의 통신에도 사용된다. HTTP는 기본 포트로 80을 사용함.

http1 by Yurim Koo

HTTPSHTTP에 보안성을 더한 것으로 HTTPover Secure Socket Layer가 붙는다. SSL 또는 TLS와 같은 인증 및 데이터 암호화 송수신 프로토콜을 사용한 것으로 암호화되지 않은 HTTP 프로토콜이 탈취, 변조 등의 위험에 노출된 것에 비해 안전하므로 전자상거래 또는 로그인 등이 필요한 사이트에서 주로 이용된다. HTTPS 사용을 위해서는 인증 기관에서 인증서를 구입하여야 한다. 기본 포트로 443을 사용함.

HTTP/2HTTP/1.1이 발전되어 나온 차기 버전으로 무조건 TLS과 같은 보안 프로토콜을 요구한다. 기존 HTTP/1.1의 한계점을 보완하여 파일 병렬 전송, 중복 헤더 제거, 헤더 압축 등 여러 부분이 개선되었다. 현재는 HTTP/3가 개발, 선행 적용되고 있는 추세이다.

특징

  • 비연결성
    클라이언트의 요청에 대한 서버의 응답을 마치면 연결을 끊음. 불특정 다수와의 통신을 상정한 설계 때문으로, 리소스 관리 측면에 목적이 있다. 단, 모든 요청에 대해 새로운 연결의 시도/해제가 수반된다. 현재는 keep-alive를 통해 지속적인 통신을 연결의 해제 없이 가능하다.
  • 무상태성
    서버는 클라이언트를 식별할 수 없음. 요청이 어떤 클라이언트에게서 왔는지, 그 이전 요청을 구분하지 못하며 이전의 요청이 현재에 영향을 미치지 않음. 서버 확장성에 그 목적이 있으며 필요시 상태 관리는 쿠키 또는 세션을 사용하여 이루어진다.

HTTP Request

HTTP 프로토콜은 크게 요청과 응답으로 나누어진다. 각각 헤더와 본문에 들어가는 내용이 다르며, 요청의 경우 여러가지 HTTP 메소드를 통해 서버에 요청을 보내기 때문에 어떤 메소드를 사용하냐에 따라 헤더와 본문이 달라지게 된다.

HTTP Method

여러 메소드가 있으며 목적에 맞게 사용한다.

  • GET : 서버에게 URL에 해당하는 자료의 전송을 요청 (Read)
  • HEAD : GET 요청과 동일하게 자료의 전송을 요청하지만, 단순한 검색, 상태 코드 확인 등을 위해 Body를 제외한 Header만 요청
  • POST : 유저 등록, 게시글 작성 등 서버에서 처리해야 할 자료를 전송 (Create)
  • PATCH : 지정한 URL의 데이터의 일부를 수정할 것을 요청 (Update)
  • PUT : 지정한 URL의 데이터를 수정/덮어쓰도록 요청 (Update)
  • DELETE : 지정한 URL의 데이터를 삭제할 것을 요청 (Delete)
  • TRACE : 서버 측에 송신한 요청의 내용을 반환 이 외에도 Option, Connect 등의 메소드가 있다.

구성 요소

  • Start Line
    해당 Request의 HTTP Method + 요청 타겟(주로 URL 또는 포트, 도메인의 절대 경로 등) + HTTP 버전
  • Header
    요청에 대한 설명. 다양한 요청 헤더가 있으며, 다음과 같이 몇몇 그룹으로 분류됨.
    • General : 메세지 전체에 적용되는 헤더.
    • Request : 요청의 내용을 보다 구체화 시키거나, 컨텍스를 제공하거나, 조건에 따른 제약을 가하는 등의 요청 내용 수정.
    • Entity : Content-length와 같은 요청 본문에 적용되는 헤더. 본문이 없을 경우 제외됨.
  • Body
    요청의 마지막 부분에 들어가며, 모든 요청에 존재하는 것은 아님. GET, DELETE, HEAD 등 리소스를 가져오는 요청은 일반적으로 본문이 필요 없으며, POST와 같이 업데이트 등의 목적으로 서버에 데이터를 전송할 때에는 본문이 포함됨.

HTTP Response

상태 코드

요청 작업에 대한 수행 결과를 보내주는 응답에서는 HTTP 상태 코드를 사용하여 작업의 성공/실패 여부와 실패의 이유를 전달한다. 이러한 상태 코드는 각 상황마다 정해진 표준이 있으며, 잘못 설정될 경우 심각한 오기능을 유발할 수 있기 때문에 준수해야 한다.

  • 1xx : 서버가 요청을 받았으며 프로세스를 계속 진행함.
  • 2xx : 요청을 성공적으로 수신/인식/수용하였음.
  • 3xx : 요청 완료를 위해 추가 작업 조치가 필요함(리다이렉션).
  • 4xx : 요청의 문법이 잘못되었거나 요청을 처리할 수 없음(클라이언트 오류).
  • 5xx : 서버가 명백히 유효한 요청에 대해 충족을 실패하였음(서버 오류).

구성 요소

  • Status Line
    HTTP 버전 + 상태 코드 + 상태 텍스트
  • Header
    요청에 대한 설명. 다양한 요청 헤더가 있으며, 다음과 같이 몇몇 그룹으로 분류됨.
    • General : 메세지 전체에 적용되는 헤더.
    • Request : 요청의 내용을 보다 구체화 시키거나, 컨텍스를 제공하거나, 조건에 따른 제약을 가하는 등의 요청 내용 수정.
    • Entity : Content-length와 같은 요청 본문에 적용되는 헤더. 본문이 없을 경우 제외됨.
  • Body
    응답의 마지막 부분에 들어가며, 모든 응답에 존재하지는 않음. 상태 코드 201, 204 등 데이터 전송이 필요없는 요청이 완료되었을 경우 제외된다.