서버-클라이언트 모델을 따라 데이터를 주고 받기 위한 프로토콜
TPC, UDP 80번 포트 사용
접속 도중에 끊기더라도 다시 시작할 필요가 없어 시간 낭비X
상태를 가지고 있지 않는 Stateless 프로토콜
GET /xyz.html HTTP/1.1
Host: www.xyz.com
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)
Accept: text/html; */*
Cookie: name = value
Referer: http://www.abc.com/abc.html
첫번째 줄은 요청 라인 -> method URI HTTPversion
get method로 /디렉토리의 xyz.html을 요청하는데 사용하는 프토콜의 버전이 1.1이다.
첫번째 줄 다음에 나오는 부분이 요청 헤더에 해당
각각 name : value의 형태로 규정
method 이름은 반드시 대문자
요청 헤더는 대소문자 구분 X, 공백도 자동으로 제거
HTTP/1.1 200 Found
Date: Mon, 10 Feb 1997 23:48:22 GMT
Server: Apache/1.3.9
Connection: close
Content-type: text/html; charset=utf-8
Date: Mon, 18 Jul 2019 16:06:00 GMT
Last-Modified: Tues, 11 Feb 2000 22:45:55 GMT
첫번째 줄은 상태 정보를 담고 있는 응답 라인
클라이언트가 요청한 주소가 웹 서버에 있으면 "200 Found", 없으면 "404 Not Found"
첫번째 줄 이후부터 응답 헤더의 각 필드와 값
사용자가 웹 브라우저에 URL 주소 입력(호스트명과 포트번호를 얻는다)
DNS 서버에 웹 서버의 호스트명을 IP 주소로 변경 요청
웹 서버와 TCP 연결(3 way Handshake)
웹 브라우저는 서버에게 HTTP 요청 전송
서버는 웹 브라우저에게 HTTP 응답 전송
서버-클라이언트 연결 해제(4 way Handshake)
웹 브라우저가 웹 문서 출력
암호화가 되지 않은 평문 데이터를 전송하는 프로토콜
-> 중간에서 정보를 가로챌 수 있는 위험성 존재
이러한 문제를 해결하기 위해 HTTPS 등장
HyperText Transfer Protocol over Secure Socket Layer, HTTP over TLS, HTTP over SSL, HTTP Secure
HTTP에 데이터 암호화가 추가된 프로토콜
소켓 통신에서 일반 텍스트를 이용하는 대신 SSL, TLS 프로토콜을 통해 세션 데이터를 암호화
공개키 방식으로 대칭키를 전달하고, 서로 공유된 대칭키를 가지고 통신
TCP/IP 443번 포트 사용
보안 단계로 인한 서버 부하증가로 인한 처리속도는 최근 네트워크/서버 장비 성능의 증가에 따라 체감할 정도 X
TLS(Transport Layer Security)는 과거 SSL(Secure Socker Layer)에서 이름이 변경 된 것. 아직도 SSL 명칭 많이 사용
SSL 방식을 적용하기 위해서 인증서를 발급받아 서버에 적용시켜야한다.
인증서는 사용자가 접속한 서버가 의도한 서버가 맞는지 보장하는 역할을 해야함.
이러한 인증서를 발급하는 기관을 CA(Certificate Authority)라고 부른다.
인터넷 사이트는 자신의 정보와 공개키를 CA에 제출(인증서 발급 요청)
CA는 검증 절차를 거쳐 개인키로 사이트에 제출한 정보를 암호화(인증서 발급)
CA는 웹 브라우저에게 공개키를 제공
(웹 브라우저는 CA 리스트와 각 공개키를 알고 있음)
사용자가 사이트에 접속 -> 자신의 인증서를 웹 브라우저에게 보낸다.
웹 브라우저는 미리 받았던 CA의 공개키로 인증서 복호화하여 검증
(사이트의 정보와 공개키를 알 수 있게된다)
얻은 사이트 공개키로 대칭키를 암호화해서 다시 사이트에 보냄
사이트는 개인키로 복호화하여 대칭키를 얻게 되고 대칭키로 데이터를 주고받는다.