웹 클라이언트
웹 서버
WAS(Web Application Server)
데이터베이스(DB)
HTTP(Hypertext Transfer Protocol) 란 웹 브라우저와 웹 서버 간에 데이터를 주고 받기 위해 사용하는 클라이언트/서버 모델을 따르는 프로토콜이다.
한 번 통신을 주고받으면 연결을 끊는 비연결성 프로토콜이다.
헤더
· '헤더명: 헤더값'의 형식으로 작성하며 대소문자를 구분하지 않는다.
· 헤더 종류
ㄴ 공통 헤더 : Date / Cache-control
ㄴ 요청 헤더 : Host / User-Agent
ㄴ 응답 헤더 : Server / Location
ㄴ 엔티티 헤더(메시지 본문에 대한 정보를 포함하는 헤더) : Content-Length / Content-Type
한계
ㄴ 정보를 암호화하지 않은 상태로 보내기 때문에 정보 유출의 위험에 노출될 가능성이 높다.
ㄴ 통신 상대를 확인하지 않기 때문에 누가 요청을 보냈는지, 통신 중인 상대가 허가된 상대인지 파악할 방법이 없다.
상태 코드
1️⃣XX : 웹 서버가 현재 요청을 받았으며 작업을 진행하고 있다.
100(Continue)
: 서버가 요청을 받았으며 추가 요청을 기다리고 있음.
2️⃣XX : 클라이언트가 요청한 작업을 서버가 성공적으로 처리했다.
200(Ok)
: 요청이 성공적으로 되었습니다.
201(Created)
: 요청이 성공적이었으며 그 결과로 새로운 리소스가 생성되었습니다.
204(No Content)
: 요청은 성공적으로 처리되었지만 응답 본문이 없습니다.
3️⃣XX : 리다이렉션 완료 응답으로 요청을 완료하기 위해 재전송이 필요하다.
301(Moved Permanently)
: 추가로 요청한 페이지로 영구 이동되었습니다.
302(Found)
: 추가로 요청한 페이지로 일시적으로 이동되었습니다.
304(Not Modified)
: 리소스가 수정되지 않았으므로 캐시된 데이터를 사용해도 됩니다.
4️⃣XX : 클라이언트측에 오류가 있다.
400(Bad Request)
: 클라이언트의 요청 내용에 문제가 있습니다.
401(Unauthorized)
: 인증되지 않은 사용자입니다.
404(Not Found)
: 요청에는 문제가 없으나 요청한 데이터가 없습니다.
5️⃣XX : 서버가 요청을 수행하지 못했음.
500(Internal Server Error)
: 서버 내부적으로 오류가 발생해 응답에 실패했습니다.
502(Bad Gateway)
: 서버가 다른 서버로부터 잘못된 응답을 받는 등 서버간의 네트워크에 문제가 생겨 통신이 제대로 되지 않습니다.
503(Service Unavailable)
: 서버가 일시적으로 과부하 상태이거나 유지보수 중입니다.
504(Gateway Timeout)
: 게이트웨이 또는 프록시 서버가 응답을 기다리다 시간이 초과되었습니다.
HTTP 계층 아래 SSL이라는 보안 계층이 추가된 프로토콜이다.
🔆 SSL의 동작 과정
SSL은 공개키 기법과 대칭키 기법이라는 두 암호화 기법을 함께 사용한다.
(관련 포스팅 보기)
SSL은 크게 핸드셰이크, 세션, 세션 종료의 세 단계로 이루어진다.
1단계
: 클라이언트가 랜덤한 데이터와 함께 현재 지원할 수 있는 암호화 방식을 서버에 전달한다.
2단계
: 서버가 클라이언트에게 랜덤 데이터와 지원 가능한 암호화 방식, 인증서(서버가 공식적으로 인증된 기관인 CA에서 발급받은 문서)를 전달한다.
3단계
: 인증서를 발급받은 클라이언트는 이 인증서가 제대로 된 문서인지 검증하기 위해 CA가 발급한 인증서 목록 중에서 서버가 전달한 인증서가 있는지 확인한다. 인증서가 목록에 있다면 한 번 더 확인하기 위해 CA에서 공유하는 공개키를 가지고 인증서를 복호화한다. 복호화에 성공한다면 이 인증서는 서버가 자신의 비밀키로 암호화했다는 것이 검증되니 서버를 신뢰할 수 있게 된다.
4단계
: 본격적으로 키를 주고받기 위해 클라이언트는 실제 데이터 통신에서 사용할 대칭키를 임시로 만든다.(이 때 대칭키는 클라이언트와 서버가 서로 주고받은 랜덤한 데이터를 조합한 임시키이다.)임시키는 대칭키이기 때문에 앞서 갖고 있던 공개키로 암호화해 서버에 전달한다.
5단계
: 키를 받은 서버는 자신이 갖고 있던 비밀키로 암호를 해독해 임시 키를 전달받는다.
6단계
: 클라이언트와 서버의 임시 키는 일련의 과정을 거쳐 세션 키로 바뀌고 이 세션키를 이용해 본격적으로 클라이언트와 서버가 통신을 할 수 있게 된다.
[출처] - 그림으로 쉽게 이해하는 웹/HTTP/네트워크