CS

[네트워크] HTTPS 정의, HTTPS 요청/응답 방식

yeonlee 2022. 12. 27. 12:37

 

HTTP 란

HyperTest Transfer Protocol로 문서간에 링크를 전송하는 프로토콜.

HTML, 텍스트, 이미지, 음성, 영상, JSON 등 모든 형태의 데이터가 전송이 가능.

서버간의 데이터 전송에도 거의다 이거 씀.

HTTP/1.1, HTTP/2 는 TCP를 기반으로 하고 있다. 

 

하이퍼텍스트란

참조(하이퍼링크)를 통해 독자가 한 문서에서 다른 문서로 즉시 접근할 수 있게 하는 텍스트

 

HTTPS

HyperTest Transfer Protocol SSL(Secure Socket Layer)

HTTPS 는 HTTP에서 보안이 강화된 친구. 

HTTPS간에 전송되는 데이터는 추가적인 보안 계층이 존재. (TLS, 전송 보안 계층 프로토콜)

 

 

특징

 

클라이언트 서버구조

- request, response 구조

- 클라이언트가 서버에 요청을 보내고, 응답을 대기함.

- 서버가 요청에 대한 결과를 만들어 응답.

- 비즈니스 로직과 데이터는 모두 서버가 처리하고 UI등은 클라이언트가 처리.

- 클라이언트와 서버의 분리를 통해 클라이언트와 서버가 각각의 성장이 가능.

 

무상태(Stateless) 프로토콜

- 서버가 [클라이언트의 상태를 보존하기 않았기 때문에] 클라이언트는 이어지는 요청이라도 반복해서 보내야함. 

ex. 햄버거 주문 -> 햄버거 세트 주문 -> 햄버거세트 2개 주문 -> 햄버거세트 2개, 신용카드로 결제

ex. 복습형 공부방식. 1단원 공부 -> 1단원과 2단원 공부 -> 1단원과 2단원과 3단원 공부....

- 장점 : 데이터를 저장하지 않아도 되어 쉽게 바꿀수 있기에 서버의 확장성이 높다 

- 단점 : 데이터를 너무 많이 보내야 한다. 

 

만약에 상태유지(stateful) 프로토콜이라면?

- 간소하지만 진행중 오류가 발생시 처음부터 다시 요청해야함.

- 중간에 서버가 변경된다면 다른 서버에게 상태정보를 전달해야함. 

 

비연결성

- 기본적으로 [연결을 유지하지 않는 모델]

- 수천명이 서비스를 사용해도 실제 서버에서 동시에 처리하는 요청은 수십개 이하로 매우 적다. (사람들이 연속적으로 검색버튼을 누르지 않아서)

- 서버 지원을 효율적으로 사용가능.

- 요청마다 연결을 맺어야 해서 3way handshake 시간이 추가된다. 

- 현재는 [HTTPS 지속연결] 로 문제를 해결.

 

 

HTTP 요청 순서

 

서버가 클라이언트에게 요청하는 것

- request line (ex. Get /content/page1.html)

- header (ex. -Accept-Language:EN)

- empty line

- message body(optional)

 

클라이언트가 서버에게 응답하는 것

- HTTP status code (ex. HTTP/1.1 301 Moved Permanently) 

- Header (ex. Content-type: html)

- empty line.

- message body(optional)

 

모든 문장은 \r (맨 앞 이동), \n 으로 끝나야 함.

 

 

 

Header 종류

 

HTTP/1.x

  • header의 시작은 첫번째줄인 요청 혹은 응답줄 다음에 전송.
  • header의 끝은 빈 한줄로 인식 즉 헤더의 종료는 \n\n으로 표기됨.
  • 키 : 값 쌍으로 전송.
  • 모든 줄은 \r, \n으로 종료됨.

HTTP/2, HTTP/3

  •  이진 프로토콜 사용. 
    • 이진 프로토콜이란 아스키 엔코딩처럼 사람이 읽을 수 있게 해주는 문자 기반 프로토콜이 아니라 모든 값을 byte 로 표시한다. 
  • 헤더는 HPACK 혹은 QPACK을 사용하며 압축을 진행.
  • 여기서 HTTP/1에서 사용되는 요청은 : 로 시작하는 준 헤더 파일로 바뀌어서 사용됨.