1. HTTP 요청 흐름 (웹브라우저에서의 요청)
1) 브라우저
- URL 에 적힌 값을 파싱하여 HTTP 요청 메세지를 만듬
- 만든 메세지를 웹 서버로 전송하는데 이때 웹 브라우저 직접 전송을 하는 것이 아니라 OS에 보내주세요 하고 의뢰함
- OS 는 DNS 서버를 조회하여 Host 이름을 보내야 할 IP 주소로 변환
2) 프로토콜 스택(운영체제에 내장된 네트워크 제어용 소프트웨어 TCP / IP 계층) 과 LAN 어댑터
- 브라우저로부터 메세지를 받아 패킷 속에 저장
- 수신 주소를 제어정보에 덧붙인 다음 패킷은 LAN 어댑터에 넘김
- LAN 어댑터는 패킷을 전기신호로 변환시켜 LAN 케이블에 송출
3) 허브, 스위치, 라우터
- LAN 어댑터로부터 송신한 패킷 수신
- 라우터는 패킷을 ISP 에 전달 인터넷으로 들어가게함
* 액세스 회선, ISP : 액세스 회선은 인터넷의 입구에 있는 통신회선으로 통신사용 라우터(POP, Point Of Presence)
까지 운반
POP 를 거쳐 인터넷의 핵심부로 들어가게됨, 고속 라우터들 사이로 목적지까지 패킷이 흘러감
* 방화벽, 캐시서버 : 인터넷 핵심부를 통과한 패킷은 목적지의 LAN 에 도착
방화벽이 먼저 패킷을 검사한 후 캐시 서버로 보내서 웹 서버까지 갈 필요가 있는지 검사
* 웹 서버 : 패킷이 물리적 웹 서버에 도착하면, 웹 서버의 프로토콜 스택이 패킷을 추출하여 메시지를 복원하고
웹서버 어플리케이션에 넘김
애플리케이션은 요청에 대한 응답 데이터를 넣어 클라이언트로 회송, 온방식 그대로 전송함
2. HTTP 와 HTTPS 의 차이
1) HTTP
- 평문통신이다
- TCP / IP 특성상 도청이 가능하며 통신상대를 확인하지 않기 때문에 위장이 가능
예) IP 가 A 인 사람에게 보내고 싶은데 해커가 내가 IP A 라고 말해도 검증할 방법이 없음
- 완전성을 증명할 수 없기 때문에 변조가 가능
- 보안 방법은 통신 자체를 암호화(SSL, TLS) 하거나 콘텐츠 자체를(HTTP 메시지 컨텐츠를) 암호화 하는것
- 위의 문제들을 해결하기 위해 HTTPS 가 나옴
2) HTTPS
- 새로운 프로토콜이 아닌 HTTP 에서 SSL 개념을 더한 프로토콜
- HTTP 와 TCP 사이에 SSL, TLS 가 끼워져 있는것
- HTTP 는 SSL 과 통신하고 SSL 은 TCP 와 통신함
(1) SSL 의 원리
- 대칭키와 공개키 방식 두 암호화 방식을 사용함
- 클라이언트가 서버에게 메시지를 보내면 서버 암호화 된 인증서와 랜덤데이터를 넘겨주고 메세지를
보내는 과정에서 어떤 암호화 프로토콜을 사용할 것인지 협상
- 클라이언트는 받은 인증서를 CA 리스트에서 조회 후 CA 공개키를 사용해 인증서를 복호화 함
- 복호화에 성공하면 이 서버는 신뢰할 수 있는 서버
- 서버가 보낸 랜덤 데이터와 클라이언트의 랜덤 데이터를 조합해서 대칭키를 생성
- 서버로부터 받은 공개키(인증서)를 사용해 대칭키를 암호화 후에 서버에게 보냄
- 서버는 암호화된 대칭키를 받고 비밀키로 복호화 함으로써 서버와 클라이언트가 서로 대칭키를 가지게 되고
이 대칭키로 통신을 암호화 함
3. TCP / UDP 등 로우레벨 통신 지식
1) TCP
- 3-way hand shake, 4-way hand shake 방식
- 흐름제어, 오류제어를 통한 연결 지향성, 순서 중요함, 오류시 재전송, 전이중과 점대점
(각 연결이 정확히 2개의 종단점을 가지고 있음) 방식
2) UDP
- 비연결형 프로토콜, 상대방이 받든지 말든지 그냥 보냄
- 손상된 세그먼트에 대해 재전송 하지 않음
- 만약 클라이언트 timeout 이 발생하면 다시 보내면 그만
4 CORS
- Cross Origin Resource Sharing 의 약제로 도메인간의 자원공유
- 헤더를 통하여 Cross-Domain 간 사용 가능한 자원을 헤더를 통해 알려줌
1) Preflight Request
- 실제 요청을 보내도 안전한지 판단하기 위해 브라우저에서 먼저 보내보는 Request
- Option 메서드로 전송해 CORS 를 허용하는지 확인함
- CORS 를 지원하는 웹서버라면 사용 가능한 리소스를 헤더에 담아 응답
HTTP Header | Description |
Access-Control-Allow-Origin | 접근 가능한 URL 설정 |
Access-Control-Allow-Credentials | 접근 가능한 쿠키 설정(true, fals) |
Access-Control-Allow-Headers | 접근 가능한 헤더 설정 |
Access-Control-Allow-Methods | 접근 가능한 메서드 설정 |
'CS 전공지식' 카테고리의 다른 글
24.02.22 Spring IoC 컨테이너 (Inversion of Control) (0) | 2024.02.22 |
---|---|
24.02.20 백엔드 관련 (0) | 2024.02.20 |
24.02.15 Spring 및 웹개발 (0) | 2024.02.15 |
24.02.14 웹, 네트워크 관련 (0) | 2024.02.14 |
24.02.13 Java 관련 4 (1) | 2024.02.13 |