참고자료: HTTP 완벽 가이드(저자: 데이빗 고을리)
웹이 어떻게 동작하는가.. 궁금한 것이 너무 많아, 다람쥐 책을 펼쳤다..
헷갈리는 것, 기억하고 싶은 부분을 기록했다.. 뭉뚱그려 큼지막한 용어 정리부터 더 궁금한 파트까지..
알차게 적어보았다.
하지만, 이 책을 뜨문뜨문 읽은 죄로 다람쥐로 변해버렸담... 🐿
표현한 이모지
⭐️ : 큰 키워드
✨: 세부 용어 정리
📚 : 파트, 소제목
✅ : 소제목 안의 키워드 및 설명
💡 : 예시 설명
⭐️ URI
- 정보 리소스를 고유하게 식별하고 위치를 지정하는 역할.
- 리소스에 대한 고유한 식별자
📚 종류
✨ 1. URL
- 특정 서버의 한 리소스에 대한 구체적인 위치
- URL의 첫 번재 부분을 스킴(scheme), 리소스에 접근하기 위해 사용되는 프로토콜. (💡 : http://)
- 두번째 부분이 인터넷 주소
- 세번째 부분이 웹 서버의 리소스
✅ 문법:
<스킴>://<사용자 이름>:<비밀번호>@<호스트>:<포트>/<경로>;<파라미터>?<질의>#<프래그먼트>
✨ 2. URN
- 리소스의 위치에 대한 영향을 받지 않는 유일무이한 이름을 역할
- 리소스를 여기저기 옮기더라도 동작
- 리소스가 그 이름을 변하지 않게 유지하는 한, 여러 종류의 네트워크 접속 프로토콜로 접근해도 문제 없음
- 현재 실험 중인 상태고 널리 채택 되진 않은 상태(책 기준, 현재는 모르겠음) -> 그래서 URI나 URL이나 같은 의미로 사용해도 ㄱㅊ
⭐️ TCP
- 전송 제어 프로토콜 (http는 애플리케이션 계층 프로토콜)
- TCP는 오류없는 데이터 전송, 순서에 맞는 전달, 조각나지 않는 데이터 스트림(어떤 크기로도 보낼 수 있음)
- TCP/IP는 패킷 교환 네트워크 프로토콜의 집합
- TCP 커넥션을 맺으면, 클라이언트와 서버 컴퓨터 간에 교환되는 메시지가 없어지거나, 손상되거나, 순서가 바뀌어 수신되는 일이 없음.
✨TCP 커넥션
- <발신지 IP주소, 발신지 포트, 수신지 IP 주소, 수신지 포트> 로 커넥션 생성
📚 네트워크 프로토콜 스택
http(애플리케이션 계층) > TCP(전송 계층) > IP(네트워크 계층) > 네트워크를 위한 링크 인터페이스(데이터링크 계층) > 물리계층
📚 접속
- TCP에서는 서버 컴퓨터에 대한 IP주소와 실행 중인 프로그램이 사용 중인 포트번호가 필요하다.
- URL로 IP주소를 알아낼 수 있음.
-DNS(도메인 이름 서비스 - IP로 변환 가능)으로 IP주소 알아낼 수 있음.
- 포트번호가 없다면, 기본값으로 80으로 가정
✨ TCP세그먼트의 전달
- IP 패킷 헤더(발신지의 목적지 IP주소, 기타 플래그)
-TCP 세그먼트 헤더(TCP 포트번호, TCP 재어 플래그, 데이터의 순서와 무결성 검사하기 위해 사용되는 숫자 값)
⭐️ 웹의 구성 요소
✨ 프록시
- 클라이언트와 서버 사이의 http 중개자
- 주로 보안을 위해 사용
- 요청과 응답을 필터링
✨ 캐시
- 클라이언트 가까이에 보관하는 http 창고
- 문서들 중 자주 찾는 것의 사본을 저장해두는, 특별한 종류의 프록시 서버
✨ 게이트웨이
- 다른 애플리케이션과 연결된 특별한 웹 서버
- 다른 서버의 중개자로 동작하는 특별한 서버
- 주로 http 트래픽을 다른 프로토콜로 변환하기 위해 사용
- 언제나 스스로가 리소스를 갖고 있는 진짜 서버인 것처럼 요청을 다룸. 클라이언트는 자신이 게이트웨이와 통신하고 있음을 알아채지 못할 것임
✨ 터널
- 단순히 http 통신을 전달하기만 하는 특별한 프록시
- 비 http데이터를 하나 이상의 http 연결을 통해 그대로 전송해주기 위해 사용
⭐️ 프록시
- 웹 서버이기도 하고, 웹 클라이언트이기도 함(중개자 역할)
- http 클라이언트의 요청을 받아 마치 웹 서버처럼 요청과 커넥션을 적절히 다루고 응답을 돌려줘야 함
- 동시에 프록시는 요청을 서버에 보내기도 하므로 요청을 보내고 응답을 받는 올바른 http 클라이언트처럼 동작해야 한다.
- 하나의 클라이언트만을 위하면 개인 프록시, 여러 클라이언트가 함께 사용되면 공용 프록시
📚 프록시 대 게이트웨이
- 프록시는 같은 프로토콜을 사용하는 둘 이상의 애플리케이션을 연결하고, 게이트웨이는 서로 다른 프로토콜을 사용하는 둘 이상을 연결.
💡:
프록시- 클라이언트와 서버 양쪽 모두에게 http로 말함
게이트웨이-http프론트엔드에 매여서 pop 이메일 백엔드를 향하고 있으므로 http/pop 게이트웨이
📚왜 사용하는가
- 어린이 필터: 교육사이트에서 제공하면서 동시에 성인 콘텐츠는 차단할 경우
- 문서 접근 제어자: 웹 서버들과 웹 리소스에 대한 단일한 접근 제어 전략을 구현하고 감사 추적을 하기 위해 사용
💡 : 한 회사 클라이언트에서 뉴스 페이지 접근 허가, 인터넷 컨텐츠에 접근할 수 있는 권한 부여, 서버 B에 접근하기 전에 먼저 비밀번호 요구
- 보안 방화벽: 바이러스 제거하는 웹이나 이메일 프록시가 사용할 수 있는, 트래픽을 살펴볼 수 있는 훅 제공
- 웹 캐시: 사본 관리, 문서 요청을 빠르게 제공, 비싼 인터넷 커뮤니케이션을 줄임
- 대리 프록시: 웹 서버인 것처럼 위장. 요청 받은 컨텐츠의 위치를 찾아내기 위해 가른 서버와 커뮤니케이션 시작
- 콘텐츠 라우터: 여러 서비스를 구현하는데 사용. 사용자가 필터링 서비스에 가입했다면 http 요청이 필터링 프록시를 통과하도록.
- 트랜스 코더: 서버가 클라이언트에 전달하기 전에 본문 포맷을 수정할 수 있도록. 데이터 표현방식을 자연스럽게 변환
- 익명화 프록시: 시원을 식별하는 특성들을 적극적으로 제거하며 개인정보 보호와 익명성 보장에 기여
📚어디에 있는가
- 출구 프록시
- 접근(입구) 프록시
-대리 프록시: 웹 서버의 이름과 IP주소로 스스로 가장하기 때문에, 모든 요청은 서버가 아닌 이 프록시로 가게 됨.
- 네트워크 교환 프록시
📚 어떻게 트래픽을 처리하는가
- 클라이언트 수정
- 네트워크 수정: 네트워크 인프라를 가로채서 웹 트래픽을 프록시로 가도록 조정하는 기법
- DNS 이름 공간 수정: DNS이름 테이블을 수동으로 편집하거나 서버를 계산해주는 동적 DNS 서버 사용 가능
- 웹 서버 수정
📚설정 방법
- 수동설정
- 브라우저 기본 설정
- 프록시 자동설정(PAC)
- WPAD 프록시 발견: 대부분의 브라우저는 자동 설정 파일을 다운받을 수 있는 '설정 서버'를 자동으로 찾아주는, 웹 프록시 자동발견 프로토콜을 제공한다.
⭐️게이트웨이
- 리소스와 애플리케이션을 연결하는 역할
- 애플리케이션은 게이트웨이에게 요청을 처리해달라고 할 수 있고, 게이트웨이는 그에 응답할 수 있다.
- 요청을 받고 응답을 보내는 포털 같이 동작하는데, 동적인 컨텐츠를 생성하거나 데이터베이스에 질의를 보낼 수 있음.
💡 : http 클라이언트 - 게이트웨이 - ftp 서버 , https 클라이언트 - 게이트웨이 - 웹서버
즉, 웹 게이트웨이라면, 한쪽에서는 http 통신, 다른 한쪽에서는 http가 아닌 다른 프로토콜과의 통신이 가능
⭐️터널
- http 프로토콜을 지원하지 않는 애플리케이션에 http 애플리케이션을 사용해 접근하는 방식을 제공
📚SSL 터널링
- 웹 터널은 원래 방화벽을 통해서 암호화되나 SSL 트래픽을 전달하려고 개발됨.
- SSL와 같이 암호화된 프로토콜은 정보가 암호화되어 있기 때문에 낡은 방식의 프록시에서는 처리되지 않음.
- 터널을 사용하면 SSL 트래픽을 HTTP 커넥션으로 전송하여 80포트의 HTTP만을 허용하는 방화벽을 통과시킬 수 있음.
-SSL 트래픽이 기존 프록시 방화벽을 통과할 수 있도록 HTTP 터널링 기능이 추가됨. 이 터널링 기능은 HTTP 메시지에 암호화된 날 데이터를 담고 일반 HTTP 채널을 통해 데이터를 전송함.
- 다시 말해, 터널은 http가 아닌 트래픽이 포트를 제한하는 방화벽을 통과할 수 있게 해준다. 이는 보안 SSL 트래픽이 방화벽을 통과하는데 유용하게 사용될 수 있다.
⭐️ 쿠키
- 사용자를 식별하고 세션을 유지하는 방식
- 새로운 http 헤더를 정의
- 캐시와 충돌할 수 있어서, 대부분의 캐시나 브라우저는 쿠키에 있는 내용물을 캐싱하지 않음.
📚쿠키 타입
✨ 세션 쿠키
- 설정과 선호 사항을 저장하는 임시쿠키
- 사용자가 브라우저를 닫으면 삭제
✨지속쿠키
- 디스크에 저장되어, 삭제되지 않고 더 길게 유지 가능. 컴퓨터를 재시작하더라도 남아있음
✅ 둘의 차이는 파싱되는 시점 뿐
✅ 서버가 사용자를 추적하는 용도로 생성하는 유일한 단순 식별 번호만 포함하기도 함.
💡 : id=3333인 쿠키가 사용자에게 할당되면 서버는 이 쿠키값으로 데이터베이스에서 사용자의 정보를 찾는데 사용
⭐️ 다이제스트 인증
- 다이제스트 인증의 좌우명은 "절대로 비밀번호를 네트워크를 통해 보내지 않는다"
- 비밀번호를 비가역적(이전 상태로 돌아갈 수 없는 상황)으로 뒤섞은 '지문' 혹은 '요약'을 보냄
✨요약(단어임):
- 정보 본문의 압축
- 단반향 함수로 동작, 128비트 요약으로 변환
- MD5(다이제스트 알고리즘 시리즈 중 하나, '메시지 다이제스트'의 약어)라는 요약함수 사용
- 단방향 요약으로 비밀번호를 그대로 전송해야 할 필요성에서 해방. 우리는 그 대신 그냥 비밀번호에 대한 요약을 보내주고, 악의적인 집단이 쉽게 요약에서 원래 비밀번호를 해독할 수 없음을 보장하기만 하면 됨. 하지만, 요약 자체가 비밀번호임이 다름없음. 이때 '난스'라는 증표를 건네줌.
✨난스(nonce)
-난스를 비밀번호에 섞으면 난스가 바뀔 때마다 요약도 바뀌게 만들어줌. 이것은 재전송 공격을 막아주는데, 저장된 비밀번호 요약은 난스 값에 대해서만 유효하고, 비밀번호 없이 공격자가 올바른 요약을 계산하는 것을 막음.
✨ 다이제스트 인증 핸드셰이크
✅ http 다이제스트 인증 프로토콜
- 헤더를 사용하는, 강화된 인증
- 헤더에 Authorization-Info 를 새롭게 추가
📚 인증 순서
- 1단계: 서버는 난스값을 계산
-2단계: WWW-Authenticate 인증요구 메시지에 담아, 서버가 지원하는 알고리즘 목록과 함께 클라이언트에 전송
- 3단계: 클라이언트는 알고리즘을 선택하고 비밀번호와 그 외 데이터에 대한 요약을 계산.
- 4단계: 클라이언트는 Authorization 메세지에 요약을 담아 서버에 돌려줌. 클라이언트가 서버를 인증하길 원한다면 클라이언트 난스를 보냄
-5단계: 서버는 요약, 선택한 알고리즘, 그외 보조 데이터들을 받고, 클라이언트가 했던 그대로 요약을 계산. 자신이 계삭한 요약과 네트워크로 부터 온 요약이 같은지 확인. 클라이언트 요약 만듦. 난스를 계산해서 클라이언트로 넘겨줌
⭐️ 대칭키 암호법
- 인코딩 키와 디코딩 키가 같은 암호 알고리즘
✨ 열거 공격
- 인코딩 및 디코딩 알고리즘은 공개적으로 알려져 있으며, 키만이 유일한 비밀이다.
- 좋은 암호 알고리즘은 공격자가 코드를 크래킹하려면 이 우주에 존재하는 모든 가능한 키 값을 시도해보는 것 외에는 방법이 없음.
- 여기서 무차별적으로 키 값을 대입해보는 것이 열거 공격임.
📚 공유키 발급
- 발송자와 수신자가 대화하려면 둘 다 공유키를 가져야 함.
- 이러면, 어떤 누구가 은밀한 대화를 하려면, 개인 비밀키를 발급하고 그것을 기억해야 함. 이러면 수천 개의 키를 생성하고 기억해야 함
✨ 공개키 암호법
- 공개키 암호화 방식은 두 개의 비대칭 키를 사용. 인코딩 키와 디코딩 키가 다름.
- 인코딩 키는 모두 공개되지만, 디코딩 키는 개인만 알고 있음.
- 인코딩은 누구나 할 수 있지만, 메시지 디코딩은 소유자에게만 부여
✨ 디지털 서명
- 보통 비대칭 공개키에 의해 생성. 개인키는 오직 소유자만이 알고 있기 때문에, 저자의 개인 키는 '지문'처럼 사용
⭐️ HTTPS
- 보안계층(안전 소켓 계층(SSL) 혹은 전송계층 보안(TLS)이용하여 구현) 이 추가됨
- 인코딩 혹은 디코딩 작업은 대부분 SSL 라이브러리 안에서 일어나기 때문에, 보안 HTTP를 사용하기 위해 웹 클라이언트와 서버가 프로토콜을 처리하는 로직을 크게 변경할 필요는 없음.
- 대부분의 경우, TCP 입력/출력 호출을 SSL 호출로 대체하고, 보안 정보를 설정하고 관리하기 위한 몇 가지 호출만 추가하기만 하면 된다.
✨HTTPS 네트워크 프로토콜 스택
- HTTP(애플리케이션 계층) > TLS or SSL(보안 계층) > TCP(전송 계층) > IP(네트워크 계층) >network interface(데이터링크 계층)
📚 HTTPS 세부사항
- HTTPS는 HTTPS 프로토콜에 대칭, 비대칭 인증서 기반 암호 기법의 강력한 집합을 결합한 것
- 웹 기반 전자상거래의 고속 성장을 이끄는 주력
- HTTPS는 HTTP 메세지를 TCP로 보내기 전에 암호화는 보안 계층으로 보냄.
✨OpenSSL
- SSL과 TLS의 가장 인기있는 오픈소스 구현
✨ TLS
- SSL을 계승한 TLS 프로토콜
- 인터넷 상에서 통신을 엿보거나 방해할 수 없도록 보호
- 클라이언트/서버 애플리케이션이 도청, 변경, 메시지 위조를 방지하도록 설계된 방법으로 통신
'프론트엔드 👩🏻💻' 카테고리의 다른 글
[프론트엔드 언어 ] 프론트엔드 언어 정리 ✨ (React, Vue.js, Angular) (0) | 2024.02.14 |
---|---|
인증 방식 정리 ✨ (3) | 2024.01.21 |
OSI 7계층 정리 ✨ (0) | 2024.01.18 |
정규표현식 메타 문자 정리 ✨ (0) | 2024.01.17 |
git 명령어 모음 (0) | 2024.01.12 |