브라우저 URL 입력 후 https로의 전환
http://www.example.com :80/path/to?key1=value1
- http = hyper text transfer protocol, html 와 같은 문서를 서버에 요청할때 쓰는 통신규약이다. 이 외에도 FTP,SSL 등의 다양한 규약이 있다
- https = secure이 추가. TCP 요청 데이터가 암호화가 되는 과정이 추가된다
- 데이터가 암호화가 되기 위해선, 비대칭키, 대칭키, CA의 연계관계를 통해서 이루어진다.
CA는 인증서라고 하는 신용받는 발급기관으로부터 지급받는 암호화된 문서
모든 브라우저는 이 CA에 대한 리스트가 이미 내부적으로 존재하기때문에 외부에터 받아오는 CA가 신용받을 수 있는지 대조가능
<출처 : [초보몽키](https://wayhome25.github.io/cs/2018/03/11/ssl-https/)>
위의 내용을 핵심부분만 간단정리하면
클라이언트가 랜덤 데이터를 보내고, 서버가 데이터를 받은 후 비밀키를 만든 뒤, 이걸로 랜덤데이터를 만들어 인증서에 담아 응답
클라이언트는 인증서 확인 후, 랜덤데이터를 조합하여 pre master key를 제작 후 인증서에 담아 서버로 보냄
pre master key는 서버의 비밀키로만 해독가능. 해독 후 이것으로 대칭키 만들고, 클라이언트도 동일하게 대칭키 제작
그 뒤 이 대칭키를 가지고 데이터 공유 후, 마치면 세션 종료.
실제 서버와 클라이언트의 응답과정
- 클라이언트의 요청을 받은 서버는 클라이언트에게 2진수로 이루어진 html의 바이트코드를 전달한다
- 이 바이트코드(기계어) 를 분석한 후, 서버의 응답 헤더에 있는 content-type과 char-set을 기준으로 plaintext 문자열로 변경한다
- 해당 문자열을 토큰형태로 재구성한다. 토큰이라 함은 html의 의미론적 단위로 객체화하는 것을 뜻한다
- 해당 토큰을 가지고 미리 가지고 있던 Node 생성자 함수를 이용하여 노드들을 만든다. 노드의 종류로는 html, meta,head,body 등이다.
이 노드들이 DOM을 구성하는 근본 부품들이 된다
- 토큰을 기준으로 만든 노드를 결합하여 DOM을 형성해나가는 과정 가운데 만약 와 관련된 노드를 만난다면 해당 html 파싱작업을 멈추고 링크로 요청을 보낸다. 이 행위를 통해 css와 같은 스타일 문서를 받을 수 있다
- 마찬가지로, css 파일을 동일한 형식으로 서버로부터 전달받으면, 이 내용을 가지고 CSSOM라는 객체 트리를 만들어낸다
- 그 후, 두 객체모델의 정보를 결합하여 랜더트리를 형성하고, 브라우저 화면에서 픽셀을 계산하여 랜더링을 하는 페인팅 처리를 진행한다
- 마지막으로, html을 파싱하던 도중
- 해당 전달받는 자바스크립트 역시 자바스크립트 엔진으로 파싱되는 과정에서 AST 를 만들어내고, 이 코드를 컴파일러가 이해할 수 있는 바이트 코드를 형성하여 콜스텍에 넣으며 실행되게 된다.
- 해당 실행 내용을 통해 DOM 객체가 변환이 될 경우, 리플로우(레이아웃과 관련된 계산을 재실행, 변경시 반영), 리페인팅(해당 재실행 내용을 픽셀단위로 반영) 을 실행하여 브라우저에 최종적으로 나타내게 된다.