imredzZ

[Dreamhack] Background: HTTP/HTTPS 본문

[Web]/개념 정리

[Dreamhack] Background: HTTP/HTTPS

hhaye_ 2024. 7. 3. 01:24

1. 인코딩

  • 컴퓨터의 모든 데이터는 0과 1로 구성됨
  • 인코딩 (Encoding) : 0과 1로 문자를 표현하는 일종의 약속
  • ASCII : 7비트 데이터에 대한 인코딩 표준. 이를 이용해서 알파벳과 특수 문자 등을 표현할 수 있음
    • ex) ASCII 에서 1000001이라는 데이터는 A를 의미함
  • 영어권에서는 아스키, 한글은 CP-949, EUC-KR 등을 사용함
  • but 호환성 측면에서 국제 소프트 웨어를 개발하려는 회사에서 큰 부담이 됨 ▷이러한 어려움을 해결하기 위해 유니코드라는 새로운 표준이 만들어지게 됨
  • 유니코드 (UniCode) : 모든 언어의 문자를 하나의 표준에 담겠다는 목표로 제정됨
    • 한 문자는 최대 32개의 비트로 표현됨
    • 32비트로 표현 가능한 정보의 가짓수는 2^(32), 대략 42억개
  • 인코딩을 이용해서 우리의 문장을 컴퓨터에 저장하고 표현할 수 있게 됨
  • 네트워크를 이용하면 인코딩한 정보를 다르 사람들과 쉽게 교환할 수도 있게 됨

 

2. 통신 프로토콜

  • 웹 서버에 있는 리소스를 클라이언트가 받아 보려면, 클라이언트는 웹에게 특성 리소스를 지정해서 제공해달라고 요청해야 함
  • 그러면 서버가 해당 요청을 이해하고, 대응되는 동작을 통해서 클라이언트에게 리소스를 반환함
  • 클라이언트의 행위를 요청(Request), 서버의 행위를 응답(Response)라고 함
  • 프로토콜 : 규격화된 상호 작용에 적용되는 약속
  • 현재까지 제정된 표준 통신 프로토콜에는 TCP/IP, HTTP, FTP 등이 있음

 

3. HTTP

  • HTTP (Hyper Text Transfer Protocol) : 클라이언트와 서버의 데이터 교환을 요청과 응답 형식으로 정의한 프로토콜
  • 기본 매커니즘 : 클라이언트가 서버에게 요청하면, 서버가 응답
  • 웹 서버는 HTTP 서버를 HTTP 서비스 포트에 대기 시킴 → 이때의 포트는 일반적으로 TCP/80 or TCP/8080
  • 클라이언트가 서비스 포트에 HTTP 요청을 전송하면, 이를 해석해서 적절한 응답을 반환함

(1) HTTP 메시지

  • HTTP 메시지에는 클라이언트가 전송하는 HTTP 요청, 서버가 반환한흔 HTTP 응답으로 구성됨

(2) HTTP 헤드

  • CRLF로 구분되며, 첫 줄은 시작 줄, 나머지 줄은 헤더라고 부르게  됨
  • 헤더는 필드와 값으로 구성되며 HTTP 메시지 또는 바디의 속성을 나타냄
  • 하나의 HTTP 메시지에는 0개 이상의 헤더가 있을 수 있음

(3) HTTP 바디

  • HTTP 바디는 헤드의 끝을 나타내는 CRLF 뒤, 모든 줄을 의미함
  • 클라이언트나 서버에게 전송하려는 데이터가 바디에 담기게 

(4) HTTP 요청

  • HTTP 요청 : 서버에게 특정 동작을 요구하는 메시지
  • 서버는 해당 동작이 실현 가능한지, 클라이언트가 그러한 동작을 요청할 권한이 있는지 등을 검토하고, 적절할 때만 이를 처리하게 됨

1. 시작줄

  • HTTP 요청의 시작 줄 : Method + 요청 URI + HTTP 버전 (띄어쓰기로 구분됨)
  • Method : URI가 가리키는 리소스를 대상으로 서버가 수행하길 바라는 동작을 나타냄 (GET, POST)
    • GET method : 리소스를 가져오라는 메소드. 이용자가 브라우저에 웹 서버의 주소를 입력하거나 하이퍼링크를 클릭하면, 새로운 페이지를 렌더링하기 위해 리소스가 필요함. 이때 브라우저는 GET 요청을 서버에 전송해서 리소르를 받아오게 됨
    • POST method : 리소스로 데이터를 보내라는 메소드. 전송할 데이터는 보통 HTTP 바디에 포함됨. 로그인할 때 입력하는 ID랑 비밀번호, 게시판에 작성하는 글 등이 POST로 서버에 보내지게 됨

(5) HTTP 응답

  • 요청에 대한 결과를 반환하는 메시지. 요청을 수행했는지, 하지 않았는지, 안 했다면 그 이유는 무엇인지와 같은 상태 정보, 그리고 클라이언트에게 전송할 리소스가 응답에 포함되게 됨

1. 시작줄

  • HTTP 응답의 시작 줄 : HTTP 버전 + 상태 코드 + 처리 사유로 구성됨 (띄어쓰기로 구분됨)
  • 상태 코드 : 요청에 대한 처리 결과를 세 자릿수로 나타냄. (*HTTP의 표준인 RFC 2616은 대략 40여개의 상태 코드를 정의하고 있는데, 각각은 첫 번째 자릿수에 따라 5개의 클래스로 분류됨)
  • 처리 사유 : 상태 코드가 발생한 이유를 짧게 기술한 것
상태 코드 설명 대표 예시
1xx 요청을 제대로 받았고, 처리가 진행 중임  
2xx 요청이 제대로 처리됨 200(OK) : 성공
3xx 요청을 처리하려면, 클라이언트가 추가 동작을 취해야 함 302(Found) : 다른 URL로 갈 
4xx 클라이언트가 잘못된 요청을 보내어 처리에 실패했습니다. 400(Bad Request): 요청이 문법에 맞지 않음

401(Unauthorized): 클라이언트가 요청한 리소스에 대한 인증이 실패함

403(Forbidden): 클라이언트가 리소스에 요청할 권한이 없음

404(Not Found): 리소스가 없음
5xx 클라이언트의 요청은 유효하지만, 서버에 에러가 발생해서 처리에 실패했습니다. 500(Internal Server Error): 서버가 요청을 처리하다가 에러가 발생함

503(Service Unavailable): 서버가 과부하로 인해 요청을 처리할 수 없음

 

 

4. 네트워크 포트와 서비스 포트 

  • 네트워크 포트
    • 네트워크에서 서버와 클라이언트가 정보를 교환하는 추상화된 장소를 의미
  • 서비스 포트
    • 네트워크 포트 중에서 특정 서비스가 점유하고 있는 포트를 의미함
      • 예를 들어, HTTP가 80번 포트를 점유하고 있다면 HTTP의 서비스 포트는 80번 포트인 것임
  • 전송 계층 : 포트로 데이터를 교환하는 방식은 전송 계층의 프로토콜을 따르게 되어 있음 (대표적인 예시 : TCP와 UDP)
    • TCP로 데이터에 전송하려는 서비스에 UDP 클라이언트가 접근하게 되면 데이터가 교환되지 않게 됨
  • 포트의 개수 : 운영 체제에서 정의하기 나름! 그러나 현대의 윈도우나 리눅스, 맥 운영체제는 0번부터 65535번까지, 총 65536개의 같은 수의 네트워크 포트를 사용하게 됨

 

5. HTTPS

  • HTTP의 응답과 요청은 평문으로 전달됨
  • 만약, 누군가가 이를 가로챈다면 중요한 정보가 유출될 수 있음
  • 예를 들어, 로그인할 때 전송한 POST 요청에는 대개 이용자의 ID와 비밀번호가 포함됨
  • 공격자가 중간에 이를 가로채면 이용자의 계정이 탈취당할 수 있게 됨
  • HTTPS (HTTP over Secure Socket Layer) : TLS(Transport Layer Security) 프로토콜을 도입해서 위 문제점을 해결하게 됨
  • TLS : 서버와 클라이언트 사이에 오가는 모든 HTPT 메시지를 암호화 함
    • 공격자가 중간에서 메시지를 탈취하더라도 이를 해석하는 것은 불가능하며 결과적으로 HTTP 통신이 도청과 변조로부터 보호

HTTP와 HTTPS의 차이점 (와이어 샤크로 봤을 떄)

'[Web] > 개념 정리' 카테고리의 다른 글

[Dreamhack] Background : Cookie & Session  (0) 2024.07.03
Background : Web  (0) 2024.07.02