HTTP
HTTP는 인터넷상에서 데이터를 전송하기 위한 프로토콜로, TCP/IP 4계층에서 응용 계층에 속한다.
HTTP의 특징
1️⃣ 비연결성(connectionless)
비연결성이란 클라이언트에서 요청을 보낸 후 서버로부터 응답을 받으면 연결을 끊는 것을 의미한다.
- 불특정 다수를 대상으로 하는 서비스에 유리하다.
- 서버에서 응답은 받고 연결을 유지하려면 자원이 필요한데 비연결성으로 자원을 아낄 수 있다.
- 하지만 연결을 유지하지 않기 때문에 서버가 클라이언트를 기억할 수 없다.
동일한 클라이언트에서 연속적으로 요청이 오면 연결, 연결 해제를 반복해 자원을 낭비하게 된다.
☝🏻 위에서 말한 단점을 보완하기 위해 HTTP Keep Alive를 사용한다.
HTTP Keep Alive
HTTP 연결 시 일정 시간 동안 요청을 유지할 수 있도록 사용하는 HTTP 헤더의 일종
만약,
클라이언트에서 HTTP요청을 보낼 때 연결 헤더에 keep Alive를 추가하면
서버에서 연결을 유지할 시간을 Keep Alive헤더에 추가해 응답한다.
2️⃣ 무상태(stateless)
무상태란 서버에서 클라이언트의 상태를 저장하지 않는 것을 의미한다.
따라서 클라이언트는 요청에 필요한 데이터를 모두 가지고 있어야 한다.
또는 서버가 클라이언트로 부터 받은 요청 사항을 모두 저장해야 한다. -> 쿠키, 세션
☝🏻 무상태의 장점은 서버 확장성이 높다는 점이다. 클라이언트의 요청에 응답하면 서버가 바뀌어도 되기 때문에 서버를 계속 확장해도 된다.
쿠키(cookie)
클라이언트의 로컬 웹 브라우저에 저장하는 데이터 파일
키와 값을 저장한다.
예) 로그인 정보, 장바구니
세션(session)
서버에서 클라이언트와의 연결 정보를 저장 및 관리
서버에 데이터가 저장되어 보안 면에서는 좋지만, 접속자가 많은 경우 서버 부하가 올 수 있다.
HTTP 메시지
HTTP에서 클라이언트와 서버가 통신하기 위해 주고 받는 정형화된 데이터
- 요청 라인 : 요청 URI, 요청 방법, HTTP 버전
- 상태 라인 : 요청에 대한 HTTP 상태 코드와 HTTP 버전
- 헤더 : 키-값으로 구성된 다수의 헤더 항목으로 구성
- 빈 줄 : 헤더의 끝을 나타내, 헤더와 바디를 구분한다.
- 바디 : 요청할 때 요청 방법 메서드가 POST인 경우에만 바디가 있고, 그 외 메서드일 때는 비어 있는 상태로 전달한다.
HTTP 상태 코드
HTTP상태 코드는 클라이언트이 요청에 대한 서버의 상태를 알려주는 코드이다.
- 1xx 클라이언트로부터 요청을 받아 처리 중
- 2xx 요청을 성공적으로 처리함
- 3xx 요청을 처리하기 위해 추가 처리 필요
- 4xx 클라이언트 오류
- 5xx 서버 오류
🔍 자주 볼 수 있는 상태 코드
200 : 요청 성공
401 : 인증되지 않은 사용자
403 : 인가되지 않은 사용자
404 : 클라이언트에서 요청한 자원이 없음(찾지 못함)
500 : 서버 내부 오류
HTTPS
HTTPS는 HTTP에 보안 계층인 SSL/TLS를 이용해 보안을 강화한 웹 통신 프로토콜이다.
* HTTP는 데이터 암호화를 거치지 않고 데이터를 전송해 보안에 취약하다.
SSL
넷스케이프에서 개발한 암호화 프로토콜
TLS
SSL에 몇가지 문제점이 생겨 이를 보완한 새로운 암호화 프로토콜. 현재 HTTPS에서 통용되는 방식이다.
☝🏻 HTTPS 동작 방식
데이터를 송신할 때 응용 계층에서 보안 계층의 SSL/TLS로 데이터를 보내면 데이터를 암호화해서 전송계층으로 보낸다.
데이터를 수신할 때 전송 계층에서 보낸 데이터를 보안 계층의 SSL/TLS에서 복호화한 후 응용계층으로 보낸다.
SSL/TLS에서 사용하는 암호화 방식 - 대칭 키, 공개 키
1️⃣ 대칭키 암호화 방식
데이터 암호화와 복호화에 모두 같은 키인 대칭 키를 이용한다.
- 수신자가 가진 키를 송신자에게 준다.(수신자가 같아도 송신자가 다르면 키도 다르다)
- 송신자는 받은 키로 데이터를 암호화하고, 수신자는 같은 키로 데이터를 복호화한다.
☝🏻 대칭 키가 유출되지 않도록 주의해야한다!!
2️⃣ 공개 키 암호화 방식
데이터의 암호화와 복호화를 다른 키로 한다.
데이터를 암호화할 때는 공개 키를, 데이터를 복호화할 때는 비밀 키를 이용한다.
- 수신자가 공개 키를 송신자에게 준다.(송신자가 달라도 키는 같다)
- 송신자는 받은 키로 데이터를 암호화하고, 수신자는 비밀 키로 데이터를 복호화한다.
☝🏻 이 방식은 공개키가 있어도 비밀 키를 모르면 복호화할 수 없기때문에 공개 키 유출을 염려하지 않아도 된다!!
웹 페이지 접속 과정
① 사용자가 URL을 웹 브라우저에 입력한다.
② 웹 브라우저는 입력한 URL을 바탕으로 DNS서버에 연결할 IP를 요청한다.
③ DNS서버는 IP주소를 웹 브라우저에게 응답으로 제공한다.
④ 웹 브라우저는 DNS 서버에서 받은 IP를 통해 웹 서버와 TCP/IP 연결을 하고 HTTP요청을 보낸다.
⑤ 웹 서버는 받은 HTTP 요청에 응답한다. 응답은 웹 페이지와 필요한 리소스를 포함한다.
⑥ 웹 브라우저는 받은 응답을 바탕으로 사용자에게 웹 페이지를 보여준다.
'[ STUDY ] > CS' 카테고리의 다른 글
[ 데이터베이스 ] 데이터베이스의 종류 (1) | 2024.11.15 |
---|---|
[ 컴퓨터 네트워크 ] REST (1) | 2024.11.13 |
[ 컴퓨터 네트워크 ] TCP와 UDP (3) | 2024.11.13 |
[ 컴퓨터 네트워크 ] 네트워크 계층 (0) | 2024.11.12 |
[ 운영체제 ] 캐시 메모리 (0) | 2024.11.11 |