[Network/네트워크] HTTP & HTTPS - 정의, 특징, 흐름

·2021년 7월 27일
0

Network

목록 보기
6/7

1. HTTP(HyperText Transfer Protocol)란?

1-1. 정의

하이퍼텍스트 문서를 교환하기위한 Application Layer 프로토콜.
즉, 웹 서버와 클라이언트 간의 데이터를 주고받기 위해 만들어놓은 통신 규약이다.


1-2. 특징

  • 초기에는 HTML과 같은 하이퍼미디어 문서를 주로 전송했지만, 최근에는 Plain text, JSON, XML 등 다양한 형태의 정보도 전송한다.
  • 초기에는 웹 브라우저와 웹 서버 간의 커뮤니케이션을 위해 디자인되었지만, 최근에는 모바일 애플리케이션 및 IoT 등과의 커뮤니케이션과 같이 다른 목적으로도 사용되고 있다.
  • 클라이언트가 요청을 생성하기 위한 연결을 연 다음 응답을 받을 때까지 대기하는 클라이언트-서버 모델을 따른다.
  • 무상태(Stateless) 프로토콜 = 서버가 두 요청 간에 어떠한 상태나 데이터를 유지하지 않음 (상태를 유지하기 위한 노력으로 CookieSession을 사용한다.)
  • 일반적으로 안정적인 TCP/IP 레이어를 기반으로 사용한다.
  • port번호 : 80

1-3. 보안 이슈

암호화가 되지 않은 텍스트를 전송하는 프로토콜이므로, 누군가 네트워크에서 신호를 가로채면 내용이 노출되는 보안 이슈가 존재한다.
--> 이걸 해결하기 위한 프로토콜이 HTTPS!



2.HTTP 동작 방식

2-1. 흐름

  • 클라이언트 : 서버에게 요청을 보내는 리소스 사용자
    ex) 웹 브라우저, 모바일 애플리케이션, IoT 등

  • 서버 : 클라이언트에게 요청에 대한 응답을 제공하는 리소스 관리자

클라이언트(웹 브라우저, 모바일 등)가 브라우저를 통해서 어떠한 서비스를 URI를 통해 서버에 요청(Request)하면 서버에서는 해당 요청에 대한 결과를 응답(Response)하는 형태


1) TCP connection

TCP 연결은 요청을 보내거나 응답을 받는데 사용된다. 클라이언트는 새 연결을 열거나, 기존 연결을 재사용하거나, 서버에 대한 여러 TCP 연결을 열 수 있다.

2) HTTP 메시지를 전송

GET / HTTP/1.1
Host: developer.mozilla.org
Accept-Language: fr

3) 서버에 의해 전송된 응답을 읽음

HTTP/1.1 200 OK
Date: Sat, 09 Oct 2010 14:28:02 GMT
Server: Apache
Last-Modified: Tue, 01 Dec 2009 20:18:22 GMT
ETag: "51142bc1-7449-479b075b2891b"
Accept-Ranges: bytes
Content-Length: 29769
Content-Type: text/html

<!DOCTYPE html... (here comes the 29769 bytes of the requested web page)

4) TCP connections을 close 하거나 다른 요청들을 위해 재사용


2-2. HTTP 메시지

요청

  • 1번 줄: HTTP 요청 메서드, path, 프로토콜의 종류와 버전
  • 2번 줄~ : HTTP Request Headers
  • 2번 줄: 리소스를 요청하는 경로. 즉, 요청하고자 하는 서버의 도메인을 적는다. 위의 예시에서 포트 번호가 생략된 것은 80번 포트(HTTP의 기본 포트)이기 때문이다. (developer.mozilla.org)

응답

  • 1번 줄 : 프로토콜의 종류와 버전, HTTP 상태 코드, HTTP 상태 메시지
  • 2번 줄~ : HTTP Reponse Headers

HTTP 요청 메서드

1) GET : 클라이언트가 서버에 리소스를 요청할 때 사용 (CRUD에서 Read)
2) POST : 클라이언트가 서버의 리소스를 새로 만들 때 사용 (CRUD 에서 Create)
3) PUT : 클라이언트가 서버의 리소스를 수정 할 때 사용 (CRUD에서 Update: 전체 수정)
4) DELETE: 클라이언트가 서버의 리소스를 삭제 할 때 사용 (CRUD에서 Delete)
그 외) PATCH, HEAD, OPTIONS, CONNECT, TRACE 등...

HTTP 상태 코드 정보

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

3. HTTPS (HyperText Transfer Protocol Secure)

3-1. 정의

HTTP에 데이터 암호화가 추가된 프로토콜
인터넷 상에서 정보를 암호화하는 SSL 프로토콜을 사용하여 클라이언트와 서버가 자원을 주고 받을 때 사용하는 통신 규약


3-2. 특징

  • HTTP에 Secure Socket가 추가된 형태로, 기존의 HTTP 통신에 SSL 혹은 TLS 프로토콜를 조합하여 세션 데이터를 암호화한다.
  • 공개키 암호화 방식 사용
  • port 번호 : 433

3-3. HTTPS 통신 흐름

공개키 암호화 방식을 SSL통신 절차에 적용을 하면 흐름은 다음과 같다.

  1. 클라이언트는 서버에 접속하면, 서버인증서(CA)를 받는다.
  2. 서버인증서 신뢰 여부 체크 후, 공개키를 추출한다.
  3. 클라이언트는 서버와 통신하는 동안만 사용할 대칭키를 임의로 만들고, 해당 대칭키를 공개키로 암호화 후 전송 한다.
  4. 서버는 개인키로 클라이언트가 보낸 메시지를 복호화하여 대칭키를 추출하고, 해당 대칭키를 이용하여 클라이언트와 통신한다.

출처

https://developer.mozilla.org/ko/docs/Web/HTTP (HTTP)
https://surprisecomputer.tistory.com/54 (HTTP)
https://www.whatap.io/ko/blog/40/ (HTTP 상태 코드)
https://programmer93.tistory.com/38 (HTTP 메소드)
https://kingjakeu.github.io/study/2020/08/11/HTTP-HTTPS/ (HTTPS)

profile
당근먹고 자라나는 개발자

0개의 댓글