HTTP

박정훈·2022년 1월 19일
0

Computer Science

목록 보기
3/3

HTTP
CS 모음집

HTTP가 뭐지?

HTTP 는 HyperText Transfer Protocol의 약자로 특정 기기간에 데이터를 주고받기 위해 정의되었다.

“나는 이렇게 줄 테니 넌 이렇게 받고 난 너가 준거 그렇게 받을께”
캡틴판교

HTTP 프로토콜 특징

HTTP 프로토콜은 상태가 없는(stateless) 프로토콜이다. 상태가 없다는 말은 데이터를 주고 받기 위한 각각의 데이터 요청이 서로 독립적으로 관리 된다는 말이다. 즉, 이전 데이터 요청과 다음 데이터 요청이 서로 관련이 없다는 것이다. 이러한 특징 덕분에 서버는 세션과 같이 별도의 추가 정보를 관리하지 않아도 되고, 다수의 요청 처리 및 서버의 부하를 줄일 수 있는 성능 상의 이점이 생긴다.(현실적으로는 데이터 유지가 필요한 경우가 많다. 여기서 쿠키와 세션이 등장한다.) 일반적으로 TCP/IP 통신 위에서 동작하며 기본 포트는 80번이다.

URL

서버에 자원을 요청하기 위해 입력하는 영문 주소다. 숫자로 되어 있는 IP주소는 사람이 외우기엔 좀...

브라우저에서는 이렇게 url로 된 HTTP 요청을 DNS를 통해 host에 해당하는 실제 IP주소로 변환하여 서버에 요청을 보낸다.

HTTP/1.1 과 HTTP/2.0의 차이는?

HTTP/1.1

기본적으로 커넥션 당 하나의 요청과 응답만 처리한다.
여러 개의 요청을 한 번에 전송할 수 없고 응답 또한 마찬가지다.
HTML 문서 내에 포함된 여러개의 리소스 요청인 link, img, script 등의 태그에 의한 리소스 요청이 개별적으로 전송, 응답 된다.
이러한 특징때문에 리소스의 개수에 비례해서 응답시간도 증가한다.

HTTP/2.0

커넥션당 여러개의 요청과 응답, 다중 요청/응답이 가능하다.
HTTP/1.1에 비해 페이지 로드 속도가 약 50% 빠르다고 한다.

HTTPS와 HTTP는 뭐가 다른가요?

S는 Secure를 뜻한다. HTTPS를 통해 전달되는 데이터들은 암호화 되서 전달되는데, HTTP와 다르게 443번 포트를 사용하며, 네트워크 상에서 제 3자가 훔쳐보지 못하도록 공개키 암호화를 지원한다. HTTP는 반대로 입력한 형태 그대로 보내지게 될 것이다.
또한 응답을 해주는 서버가 검증된 사이트인지 확인 해 주는 역할도 한다.

공개키(비대칭키)?

HTTPS는 공개키/개인키 암호화 방식을 이용해 데이터를 암호화 한다.
공개키
모두에게 공개된, 공개가 가능한 키를 의미한다.
개인키
나만 가지고 있어야 하는 키를 의미한다.
공개키와 개인키로 암호화하면 다음과 같은 효과를 얻는다.
공개키 암호화
공개키로 암호화하면 개인키로만 복호화 할 수 있다.
개인키 암호화
개인키로 암호화하면 공개키로만 복호화 할 수 있다.

인증하는 과정을 살펴보면,
클라이언트와 서버는 핸드쉐이킹 과정을 거쳐서 서로에게 무작위의 데이터를 보낸다. 클라이언트는 추가로 인증서를 받게 되는게 이 인증서는 인증된 기간 CA(Certificate Authority)에서 인증받은 인증서다.
아무튼 클라이언트는 아직 인증서를 신뢰할 수 없으므로 이 인증서가 진짜인지 알아봐야 한다. 이때 브라우저에 내장된 CA들의 정보를 통해 확인한다.

해당 인증서는 CA의 개인키로 암호화 되어있기 때문에 이게 진짜 인증된 인증서라면! CA의 공개키로 복호화 할 수 있어야 한다(아따.. 복잡허고 신기혀라).

성공적으로 복호화 된 인증서에는! 서버의 공개키가 포함이 되어있다.
이제 앞으로 주고 받아질 데이터는 대칭키와 비대칭키 방식이 혼합되어져 사용된다. 비대칭키로 메시지를 매번, 일일이 암호,복호화 하는건 상당히 큰 부담이 되기 때문에 대칭키로 데이터를 암호화 하고, 그 대칭키를 공유할 때 비대칭 키를 사용한다.

핸드쉐이킹 과정에서 생성된 무작위 데이터(클라이언트에서 보낸것과 서버에서 받은것)를 혼합해서 임시키를 만든다. 해당 임시키는 서버의 공개키로 암호화되고 서버로 보내지고, 클라이언트와 서버에서 해당 임시키로 대칭키를 만들어 낸다. 이제 클라이언트와 서버는 서로간의 유일한 대칭키를 가지게 되었다. 이제 제 3자가 데이터를 알아볼 걱정은 NO!

profile
그냥 개인적으로 공부한 글들에 불과

0개의 댓글