cs 메모장

웹 동작 방식/ HTTP 프로토콜 / HTTPS 동작 방식 / HTTP헤더 구조 / HTTP와 HTTPS 의 차이 / HTTP GET과 POST의 차이 / 쿠키와 세션 /웹 브라우저에 google.com을 쳤을때

nakgopsae 2024. 6. 27. 15:21

웹 동작 방식

사용자가 웹 브라우저 url에 입력 : 사용자가 브라우저에 url을 입력하거나 하이퍼 링크를 클릭합니다 

DNS 조회 : 브라우저가 URL에 해당하는 도메인 이름을 IP 주소로 변환하기 위해 DNS 서버에 조회를 요청합니다

서버와 연결: DNS 조회를 통해 얻은 IP 주소를 사용하여 브라우저가 웹 서버와 TCP 연결을 설정합니다

HTTP 요청 전송: 브라우저가 서버에 HTTP 요청을 보냅니다. 이 요청은 GET , POST 등 다양한 메서드를 사용할 수 있습니다

서버처리: 서버는 요청을 처리하고, 필요한 경우 데이터베이스와 상호작용을 하여 필요한 정보를 가져옵니다

HTTP 응답 전송: 서버는 요청에 대한 응답을 HTTP 응답형식으로 클라이언트에 보냅니다 
여기에는 HTML , CSS ,JS, 이미지 등 다양한 리소스가 포함될 수 있습니다

브라우저 렌더링: 브라우저는 응답을 받아 웹 페이지를 렌더링 하고 사용자에게 표시합니다.

 

관련개념

클라이언트 : 웹사용자의 인터넷이 연결된 장치들에서 웹에 접근하는 소프트웨어

서버: 웹페이지 사이트 또는 앱을 저장하는 컴퓨터 클라이언트 장비가 웹페이지에 접근하길 원할 때 
서버로 부터 클라이언트 장치로 사용자의 웹 브라우저에서 보여지기 위한 웹페이지 사본이 다운된다

TCP/IP: 전송제어규약/인터넷규약 은 데이터가 어떻게 웹을 건너 여행해야 하는지 정의하는 통신규약이다

DNS: 도메인 이름 시스템 서버 웹사이트를 위한 주소록과 같다 
/도메인 이름 서버는 여러분이 브라우저에 입력하는 웹주소 ("mozilla.org" 같은) 를 
웹사이트의 실제 (IP) 주소에 맞춰주는 특별한 서버

HTTP 프로토콜

HTTP(HyperText Transfer Protocol)는 웹에서 클라이언트와 서버 간에 데이터를 주고 받기위한애플리케이션 레이어 프로토콜 입니다  

애플리케이션레벨의 프로토콜로 TCP/IP위에서 작동한다

클라이언트에서 요청을 보내면 서버는 요청을 처리해서 응답한다 

HTTP로 보낼 수 있는 데이터는 HTML, 문서 , 이미지, 동영상, 오디오, 텍스트 문서등 여러 종류이다 

무상태(Stateless): 각 요청은 독립적이며 이전 요청과 연결되지 않습니다 상태 정보를 유지하려면 쿠키나 세션을 사용합니다

GET: 서버에서 데이터를 요청합니다.
POST: 서버에 데이터를 제출합니다.
PUT: 서버에 데이터를 업데이트합니다.
DELETE: 서버에서 데이터를 삭제합니다.
PATCH: 서버에서 데이터를 부분적으로 업데이트합니다.

헤더: HTTP 요청과 응답에는 다양한 헤더가 포함되어 있어 추가적인 메타데이터를 전달합니다.
상태 코드: 응답에는 상태 코드가 포함되어 있어 요청의 성공 또는 실패를 나타냅니다. 예: 200(성공), 404(찾을 수 없음), 500(서버 오류)

 HTTPS 동작 방식

HTTPS(HyperText Transfer Protocol Secure)는 HTTP의 보안 버전으로,
SSL/TLS(보안 소켓 레이어/전송 계층 보안)를 사용하여 데이터 전송을 암호화합니다.

TCP 연결: 클라이언트가 서버와 TCP 연결을 설정합니다.

SSL/TLS 핸드셰이크: 클라이언트와 서버가 보안 연결을 설정하기 위해 SSL/TLS 핸드셰이크를 수행합니다. 

  -클라이언트 헬로: 클라이언트는 서버에 연결을 요청하며, 사용할 수 있는 암호화 방법(암호 모음)을 제안합니다.
  
  -서버 헬로: 서버는 클라이언트의 요청에 응답하고, 사용할 암호화 방법을 선택합니다. 서버는 또한 자신의 SSL 인증서를 클라이언트에 보냅니다.
 
  -서버 인증서 검증: 클라이언트는 서버의 인증서를 검증하여 신뢰할 수 있는지 확인합니다. 이 인증서는 공인 인증 기관(CA)이 서명한 것입니다.
  
  세션 키 생성: 클라이언트와 서버는 대칭 키 암호화를 위해 세션 키를 생성하고 교환합니다. 클라이언트는 서버의 공개 키를 사용하여 세션 키를 암호화하여 서버에 전송합니다.

세션 키 설정: 서버는 클라이언트로부터 받은 세션 키를 복호화하여 공유 세션 키를 설정합니다.

암호화된 데이터 전송: 핸드셰이크가 완료되면 클라이언트와 서버는 대칭 암호화를 사용하여 데이터를 안전하게 주고받습니다. 모든 통신은 이 세션 키를 사용하여 암호화됩니다.

1. 인증서 발급 및 배포
사이트의 키 생성: 사이트(서버)는 공개키와 개인키 쌍을 생성합니다.

인증 기관(CA)과 계약: 사이트는 신뢰할 수 있는 인증 기관(CA)에 자신의 정보와 공개키를 제출하고, 계약을 체결합니다.

인증서 발급: CA는 사이트의 정보를 검증한 후, CA의 개인키로 사이트의 정보를 암호화하여 인증서를 발급합니다. 이 인증서에는 사이트의 공개키가 포함됩니다.

인증서 배포: CA는 자신의 공개키를 웹 브라우저(클라이언트)들에게 제공합니다.

2. SSL/TLS 핸드셰이크 및 키 교환

인증서 전송: 사용자가 사이트에 접속하면, 서버는 자신의 인증서를 웹 브라우저에 보냅니다.

인증서 검증: 웹 브라우저는 CA의 공개키를 사용하여 인증서를 해독하고, 사이트의 정보를 검증합니다. 이를 통해 서버의 공개키를 획득합니다.

대칭키 암호화 및 전송: 웹 브라우저는 서버의 공개키로 대칭키(세션 키)를 암호화하여 서버에 보냅니다.

대칭키 복호화: 서버는 자신의 개인키로 암호화된 대칭키를 복호화하여 세션 키를 획득합니다.

3. 데이터 전송

핸드셰이크가 완료된 후, 클라이언트와 서버는 대칭키(세션 키)를 사용해 데이터를 암호화하여 주고받습니다. 이로써 데이터의 기밀성과 무결성이 보장됩니다.


//공개키 암호 방식은 알고리즘 계산 방식이 느린 경향이 있으므로 
//공개키와 대칭키방식을 혼합하여 사용한다.

 

추가하자 모르겠다


HTTP헤더 구조

HTTP 헤더는 HTTP본문과 요청과 응답에 대한 메타데이터를 포함합니다. 주요 구조는 다음과 같습니다:

일반 헤더(General Headers):
전송되는 컨텐츠에 대한 정보보다는, 요청/응답이 이루어지는 날짜 및 시간등에 대한 일반적인 정보가 포함된다.
요청과 응답 모두에 사용됩니다. 예: Date, Connection.


요청 헤더(Request Headers): 
웹브라우저가 웹서버에 요청하는 것을 텍스트로 변환한 메시지들이다. 
클라이언트가 서버에 보내는 추가 정보입니다. 예: Host, User-Agent, Accept.

응답 헤더(Response Headers): 
웹서버가 웹브라우저에 응답하는 콘텐츠가 들어가있는 메시지이다
서버가 클라이언트에 보내는 추가 정보입니다. 예: Server, Set-Cookie.

엔터티 헤더(Entity Headers): 
실제 주고받는 컨텐츠와 관련된 http 본문에 대한 정보가 담겨져 있다
요청과 응답 본문에 대한 정보입니다. 예: Content-Type, Content-Length.

HTTP와 HTTPS 의 차이

HTTP에서 암호화가 추가된 프로토콜
HTTP와 HTTPS의 주요 차이점은 보안성입니다:

보안성:
  HTTP: 데이터가 암호화되지 않은 상태로 전송됩니다. 중간에 누군가가 데이터를 가로챌 수 있습니다.
  HTTPS: SSL/TLS를 사용하여 데이터를 암호화합니다. 중간에 가로채더라도 데이터를 읽을 수 없습니다.
포트:
  HTTP: 기본적으로 80번 포트를 사용합니다.
  HTTPS: 기본적으로 443번 포트를 사용합니다.
SSL/TLS 인증서:
  HTTP: 인증서를 사용하지 않습니다.
  HTTPS: SSL/TLS 인증서를 사용하여 서버의 신원을 인증하고, 데이터 전송을 암호화합니다.

HTTP GET과 POST의 차이

HTTP GET과 POST 메서드는 주요한 차이점이 있습니다:

HTTP GET: 서버의 데이터를 가져와서 보여줄 때 사용합니다 데이터의 변경이 없어야 합니다

HTTP POST: 서버의 데이터 상태값을 변경하기 위해 사용합니다

데이터 전송 방식:

GET: URL의 쿼리 스트링에 데이터를 포함하여 전송합니다. 데이터가 URL에 노출됩니다.
POST: 요청 본문에 데이터를 포함하여 전송합니다. 데이터가 URL에 노출되지 않습니다.

용도:

GET: 주로 데이터를 조회할 때 사용합니다. 요청은 아이템을 가져오거나 페이지를 로드하는 데 적합합니다.
POST: 주로 데이터를 생성하거나 업데이트할 때 사용합니다. 폼 제출, 파일 업로드 등에 적합합니다.

안전성:

GET: 반복적인 요청이 안전합니다(데이터 변경 없음).
POST: 반복적인 요청이 안전하지 않습니다(데이터 변경 가능).

데이터 길이 제한:

GET: URL 길이에 제한이 있어 대량의 데이터를 전송하는 데 부적합합니다.
POST: 본문에 데이터를 포함하기 때문에 대량의 데이터 전송이 가능합니다.

쿠키와 세션

쿠키:

클라이언트에 저장하는 이름, 값, 만료일(저장기간), 경로 정보로 구성되어있는 사용자의 기록 정보 파일입니다.
즉, 방문자의 정보를 방문자 컴퓨터의 메모리에 저장하는것 입니다.
클라이언트가 페이지를 요청하면 웹 서버에서 쿠키를 생성해 줍니다.
그래서 동일 사이트 재방문 시, 클라이언트의 PC에 해당 쿠키가 있는 경우 요청 페이지와 함께 쿠키를 전송해서 로그인을 유지할 수 있습니다.

저장 위치: 클라이언트(사용자의 브라우저)

수명: 만료 날짜를 설정할 수 있습니다. 브라우저를 닫아도 유지되는 영구 쿠키와 세션 종료 시 삭제되는 세션 쿠키가 있습니다.

용도: 사용자 로그인 상태 유지, 사용자 설정 저장, 트래킹 정보 수집 등

데이터 크기: 한 쿠키당 4KB 이하

보안: 텍스트로 저장되기 때문에 쉽게 접근 가능하여 민감한 정보를 저장하는 데 적합하지 않음. 보안을 위해 Secure 및 HttpOnly 플래그를 사용할 수 있음.

전송 방법: HTTP 요청/응답 헤더를 통해 서버와 주고받음. (클라이언트는 요청 시 자동으로 해당 도메인의 쿠키를 함께 전송)

세션
일정 시간 동안 같은 사용자(브라우저)로부터 들어오는 일련의 요구를 하나의 상태로 보고,
그 상태를 유지시키는 기술입니다. 
여기서 ‘일정 시간’이란 방문자가 웹 브라우저를 통해 웹 서버에 접속한 시점부터 
웹 브라우저를 종료하여 연결을 끝내는 시점을 말합니다.
브라우저를 닫거나, 서버에서 세션을 삭제했을 때만 삭제가 되므로, 쿠키보다 비교적 보안이 좋습니다.

저장 위치: 서버(세션 데이터) 및 클라이언트(세션 ID를 쿠키로 저장)

수명: 일반적으로 브라우저 세션이 끝나면 만료되지만, 서버 설정에 따라 다르게 설정 가능

용도: 로그인 상태 유지, 장바구니 정보 저장 등

데이터 크기: 서버 메모리나 데이터베이스에 저장되므로, 클라이언트 측 쿠키보다 더 많은 데이터를 저장할 수 있음

보안: 민감한 정보를 서버에 저장하므로, 클라이언트가 데이터를 직접 볼 수 없기 때문에 보안에 유리. 세션 ID 유출을 방지하는 것이 중요.

전송 방법: 클라이언트는 세션 ID를 쿠키나 URL 매개변수를 통해 서버에 전송하고, 서버는 해당 세션 ID로 세션 데이터를 식별


웹 브라우저에 google.com을 쳤을때

URL 입력: 사용자가 웹 브라우저 주소창에 google.com을 입력하고 엔터를 누릅니다.

DNS 조회: 브라우저가 DNS 서버에 google.com에 해당하는 IP 주소를 조회합니다.

TCP 연결: 브라우저가 DNS 조회를 통해 얻은 IP 주소를 사용하여 구글 서버와 TCP 연결을 설정합니다.

HTTP/HTTPS 요청: 브라우저가 구글 서버에 HTTP 또는 HTTPS 요청을 보냅니다. 보통 HTTPS를 사용합니다.

서버 응답: 구글 서버가 요청을 처리하고 HTTP 응답을 브라우저에 보냅니다.

응답에는 HTML, CSS, JavaScript, 이미지 등이 포함됩니다.

브라우저 렌더링: 브라우저가 HTML 문서를 파싱하고, CSS와 JavaScript를 해석하여 페이지를 렌더링합니다.

추가 요청: 웹 페이지에 포함된 추가 리소스(이미지, 비디오 등)에 대해 추가 HTTP/HTTPS 요청이 발생하고,

해당 리소스가 로드됩니다.

사용자 인터랙션: 사용자는 로드된 페이지와 상호작용할 수 있습니다.