2 minute read

HTTP (HyperText Transfer Protocol)

  • 웹 상에서 웹 서버와 웹 브라우저(클라이언트) 상호간 데이터 전송을 위한 응용계층 프로토콜이다.
  • tcp 기반이다.
  • 연결 상태를 유지하지 않는(stateless) 비연결성 프로토콜으로, 이를 해결하기 위해 쿠키와 세션이 등장하였다.
  • 80번 포트 사용

  • 가독성 : 사람이 읽고 이해할 수 있다.
  • 확장성 : 하이퍼텍스트 문서 뿐만 아니라 이미지, 비디오, HTML form result와 같은 내용은 POST하기 위해서도 사용할 수 있다.
  • Stateless : 상태를 저장하지 않고, 동일한 상태 및 컨텍스트를 유지하기 위해 세션 혹은 쿠키를 사용한다.

동작

  • 사용자(클라이언트)가 브라우저를 통해서 요청
  • 서버에서 요청 결과 찰아서 사용자에게 응답
  • 클라이언트와 서버 간 http 메세지를 주고받으며 통신한다.
    • 요청 메시지
    • 응답 메시지
    • 헤더

HTTP status code(상태 코드)

  • HTTP 요청 후 서버에서 반환되는 상태 코드
  • 요청 처리 상태를 클라이언트로 전달
  • 3자리 숫자로 구성되며, 첫 번째 자리는 상태 코드의 분류를 의미한다.

  • 1xx (Informational, 조건부 응답) : 요청을 받았으며, 처리 중임을 나타낸다.
  • 2xx (Successful, 성공) : 요청이 성공적으로 처리되었음을 나타낸다.
  • 3xx (Redirection, 리다이렉션 완료) : 요청을 완료하려면 추가 작업이 필요함을 나타낸다.
  • 4xx (Client Error) : 클라이언트 오류로 요청이 실패함을 나타낸다.
  • 5xx (Server Error, 서버 오류) : 서버 오류로 요청을 처리할 수 없음을 나타낸다

HTTP Request method

목적에 따라 종류가 다양하며, 요청은 다음과 같은 요소로 구성된다.

  • 메소드
    • GET : 서버로부터 정보를 조회하기 위한 메소드
    • POST : 서버에 정보를 제출하기 위한 메소드 (최초 제출)
    • PUT : 서버에 정보를 업데이트하기 위한 메소드 (수정할때 사용)
    • PATCH : 서버 정보를 일부 수정하기 위한 메소드 - 리소스의 부분만을 수정 -
    • DELETE : 서버에 정보를 삭제하기 위한 메소드
  • 리소스 경로
  • HTTP 프로토콜 버전
  • headers
  • body : POST 와 같은 메소드를 사용하는 경우…

HTTP 1.1 VS HTTP 2.0

  HTTP/1.1 HTTP/2
프로토콜 형태 텍스트 형태 프로토콜 이진 형태 프로토콜
메시지 캡슐화 프로토콜 데이터 단위(PDU)에 HTTP 헤더와 바디 포함 이진 프레이밍 레이어(binary framing layer)를 사용하여 이진 형태로 캡슐화
멀티플렉싱 지원하지 않음 여러 요청과 응답을 동시에 처리할 수 있는 멀티플렉싱(다중 전송)
헤더 압축 지원하지 않음 HPACK 알고리즘을 이용한 헤더 압축
서버 푸시 지원하지 않음 서버가 클라이언트의 요청 없이 데이터를 전송할 수 있는 서버 푸시 기능 제공
  • HTTP/1.1은 모든 요청과 응답을 평문으로 전송하고 다중 연결을 지원하지 않아 새로운 TCP 연결마다 별도의 플로우 제어 메커니즘이 필요하다.

HTTPS

  • HTTPS(Hypertext Transfer Protocol Secure)는 HTTP 프로토콜에 SSL(Secure Socket Layer)이나 TLS(Transport Layer Security) 프로토콜을 추가한 것이다.
  • 데이터 암호화를 통해 보안성을 강화하였다.(공개키 암호화)
  • 인터넷 뱅킹, 온라인 쇼핑몰, 소셜 미디어 등 개인정보가 중요한 웹사이트에서 사용한다.
  • 구글, 페이스북, 트위터 등 대형 인터넷 서비스에서 사용한다.
  • 443 포트를 사용한다.
  • 최근 웹 브라우저에서는 HTTP에서 HTTPS로 전환을 강제하거나, HTTPS 사이트를 더욱 강조하는 등 HTTPS 사용을 유도하고 있다.

작동 과정

  1. 클라이언트가 HTTPS로 액세스하려는 서버에 접속한다.
  2. 서버는 공개키와 서버 인증서를 클라이언트에게 제공한다.
  3. 클라이언트는 서버 인증서의 유효성을 확인한다.
  4. 클라이언트는 공개키를 사용하여 세션 키를 암호화하여 서버로 전송한다.
  5. 서버는 자신의 비밀키를 사용하여 세션 키를 복호화한다.
  6. 이후 클라이언트와 서버 간에 전송되는 모든 데이터는 세션 키를 사용하여 암호화한다.

장점

  • 데이터의 기밀성 보호: HTTPS를 사용하면 전송되는 데이터가 암호화되므로 제3자가 데이터를 조회하는 것을 방지할 수 있다.
  • 무결성 보호: HTTPS는 데이터가 수정되지 않았음을 보장하므로, 데이터가 악의적으로 변경되는 것을 방지할 수 있다.
  • 신뢰성 보장: HTTPS는 서버 인증서를 사용하여 서버의 신원을 확인하므로, 중간자 공격을 방지할 수 있다.

단점

  • 암호화 및 복호화의 추가 작업으로 일부 성능 저하가 일어날 수 있다.
  • 사용을 위해 인증서를 발급받아야 하며, 이에 따른 추가 비용이 발생할 수 있다.

SSL handshake

출처

  • https://www.cloudflare.com/ko-kr/learning/ssl/what-is-ssl/
  • https://www.cloudflare.com/ko-kr/learning/ssl/what-happens-in-a-tls-handshake/
  • https://developer.mozilla.org/ko/docs/Web/HTTP/Overview

Leave a comment