[ 2022.12.05 TIL-HTTP와 HTTPS ]

HTTP
✏️ HTTP란?
- HyperText Transfer Protocol의 약자로 하이퍼텍스트 문서를 교환하기 위해 사용된 통신규약
- 웹 서버와 클라이언트 간의 통신을 위한 통신규약
- 웹에서만 사용하는 프로토콜로 TCP/IP 기반으로 한 지점에서 다른 지점으로 요청과 응답을 전송
✏️ HTTP 역사

- HTTP/0.9 : GET 메서드만 지원, HTTP 헤더 없음
- HTTP/1.0 : 메서드, 헤더 추가(⇒ HTML 이외 다른 파일 전송 가능)
- HTTP/1.1 : 현재 HTTP/1.1 주로 사용, 우리에게 가장 중요한 버전
- HTTP/2 : 성능 개선
- HTTP/3 : 진행중, TCP 대신에 UDP 사용, 성능 개선
- HTTP/1.1, HTTP/2는 TCP 기반이며 HTTP/3는 UDP 기반 프로토콜이다.
✏️ HTTP 특징
- 서버와 클라이언트 구조
- 클라이언트가 서버에 요청을 보내면 서버는 그에 대한 응답을 보냄
- 무상태 프로토콜 (Stateless)
- 서버가 클라이언트 상태를 보존하지 않음
- 장점 : 서버 확장성이 높음
- 단점 : 클라이언트가 추가 데이터 전송
- 비연결성 프로토콜 (쿠키와 세션을 통해 단점 해결)
- 실제 요청을 주고 받을 때만 연결을 유지, 응답하고 나면 연결을 끊음
- 최소한의 자원으로 서버 유지 가능
- 요청/응답 방식으로 동작

✏️ HTTP 약점
- 평문 통신이기 때문에 도청 가능
- 통신 상대를 확인하지 않기 때문에 위장 가능
- 완전성을 증명할 수 없기 때문에 변조 가능
✏️ HTTP Request
- Request란?
- 클라이언트가 서버에게 연락하는 것
- 요청에 대한 정보를 담아 서버로 전달
- Request 메소드 종류
- GET : 서버에게 데이터를 달라는 요청을 할 때 사용
- HEAD : GET과 동일, 응답할 때 Header만 리턴
- POST : 서버에게 데이터를 전송하는 요청할 때 사용
- PUT : 서버에서 요청 URI의 데이터를 수정하거나 새로 추가하도록 요청할 때 사용
- PATCH : 서버의 데이터를 일부 수정할 때 사용
- DELETE : 서버에서 요청 URI의 데이터를 삭제하도록 요청할 때 사용
- TRACE : 클라이언트로부터 수신한 요청을 응답에 포함시켜서 전달
- OPTIONS : 서버에서 특정 데이터가 어던 Method를 지원하는지 알아볼때 사용
- HTTP Request 구조

- Start Line
- [HTTP Method][Request target(주소)] [HTTP version]
- HTTP Method : GET,POST 등과 같은 HTTP Method
- Request target : HTTP Request가 전송되는 목표 주소
- HTTP version : version에 따라 Request 메시지 구조나 데이터가 다를 수 있어서 version을 명시
- Headers
- 해당 Request에 대한 추가 정보를 담고 있는 부분
- 참고
- Body
- HTTP Request가 전송하는 데이터를 담고있는 부분
- 데이터가 없으면 비어있음
- POST 요청일 경우, HTML 폼 데이터가 포함
✏️ HTTP Response
- Response란?
- 서버가 요청에 대한 답변을 클라이언트에게 보냄
- HTTP 상태 코드
- 1XX - 정보 응답
- 100 Continue : 현재 요청이 진행중이며 문제없다는 것을 의미
- 2XX - 성공 응답
- 200 OK : 요청이 성공적으로 완료되었음을 의미
- 201 Created : 요청이 성공적으로 완료, 새로운 리소스가 생성되었음을 의미, POST/PUT 요청 뒤에 따라옴
- 3XX - 리다이렉션 메시지
- 300 Multiple Choice : 요청에 대해 하나 이상의 응답이 가능함을 의미
- 301 Moved Permanently : 요청한 리소스의 URI가 변경되었음을 의미
- 4XX - 클라이언트 에러 응답
- 400 Bad Request : 잘못된 문법으로 인해 서버가 요청을 이해하지 못했음을 의미
- 401 Unauthorized : 요청을 보낸 클라이언트가 인증되지 않았음을 의미
- 403 Forbidden : 요청을 보낸 클라이언트가 리소스에 접근할 권리가 없음을 의미
- 404 Not Found : 서버가 요청받은 리소스를 찾을 수 없음을 의미
- 408 Request Timeout : 요청 중 시간이 초과되었음을 의미
- 5XX - 서버 에러 응답
- 500 Internal Server Error : 서버에 문제가 있지만 서버가 해당 문제를 처리할 줄 모름을 의미
- 502 Bad Gateway : 서버가 게이트웨이로부터 잘못된 응답을 받았음을 의미
- 503 Service Temporarily Unavailable : 일시적으로 서버를 이용할 수 없음을 의미, 보통 유지보수를 위해 서버를 잠시 중단시켰거나 과부하로 인한 다운이 원인
- 504 Gateway Timeout : 서버가 게이트웨이 역할을 하고 있으며 다른 서버로부터 적시에 응답을 받지 못했음을 의미
- HTTP Response 구조

- Status Line
- [HTTP version][Status Code] [Status Text]
- Headers
- Body
- Response의 body와 일반적으로 동일
- Request와 마찬가지로 모든 response가 body가 있지는 않음
- 데이터를 전송할 필요가 없을경우 body가 비어있게 됨
HTTPS
✏️ HTTPS란?
- HTTP의 치명적인 단점
- 브라우저와 웹서버가 통신함에 있어서 주고 받는 데이터가 암호화 되지 않고 생 날것 그대로 전송 되어진다는 점
- 데이터가 암호화 되지 않는 HTTP의 단점을 극복하고자 HTTP에 SSL이라는 기술을 더한 것
- 인터넷 상에서 정보를 암호화하는 SSL(Secure Socket Layer)프로토콜을 이용하여 웹브라우저(클라이언트)와 서버가 데이터를 주고 받는 통신 규약
✏️ HTTPS 특징
- HTTP에 Secure Socket가 추가된 형태
- 기존의 HTTP 통신이 SSL 혹은 TLS 프로토콜을 조합하여 세션 데이터를 암호화
- 공개키 암호화 방식 사용
✏️ HTTPS 동작과정
- 클라이언트는 서버에 접속하면, 서버인증서(CA)를 받는다.
- 서버인증서 신뢰 여부 체크 후, 공개키를 추출한다.
- 클라이언트는 서버와 통신하는 동안만 사용할 대칭키를 임의로 만들고, 해당 대칭키를 공개키로 암호화 후 전송 한다.
- 서버는 개인키로 클라이언트가 보낸 메시지를 복호화하여 대칭키를 추출하고, 해당 대칭키를 이용하여 클라이언트와 통신한다.
- 위 동작과정을 이용하면 서로 각자 통신 대상이 누구인지 확인 가능, 정보의 정확성과 안정성이 높아짐
- HTTP -> SSL -> TCP 순서로 통신
HTTP와 HTTPS
✏️ HTTP와 HTTPS 차이점

- 웹 페이지를 통해 전송되는 모든 데이터는 추가적인 보안 계층이 존재
- 모든 유형의 데이터는 변경되거나 손상될 수 없는 HTTPS 사이트를 통해 전달되며 제3자로부터 보호
참고