HTTP
**HTTP(Hypertext Transfer Protocol)**는 클라이언트와 서버 간 HTML과 같은 하이퍼미디어 문서를 전송하기 위한 통신 규칙 세트 또는 프로토콜이다. 사용자가 웹 사이트를 방문하면 사용자 브라우저가 웹 서버에 HTTP 요청을 전송하고 웹 서버는 HTTP 응답으로 응답한다. 이러한 과정은 브라우저에 URL을 입력하면 어떤 일이 일어날까? 글에서 자세하게 알 수 있다.
즉, HTTP는 웹에서 이루어지는 모든 데이터 교환의 기초이며, 클라이언트-서버 프로토콜인 것이다. 클라이언트-서버 프로토콜이란 수신자 측에 의해 요청이 초기화되는 프로토콜을 의미한다.
클라이언트와 서버는 개별적인 메시지 교환에 의해 통신한다.
- 요청(Requests): 클라이언트에 의해 전송되는 메시지
- 응답(Responses): 서버에서 응답으로 전송되는 메시지
HTTP가 진화하면서, 하이퍼텍스트 문서뿐만 아니라 이미지, 비디오, HTML 폼 결과와 같은 내용을 서버로 POST하거나, 필요할 때마다 웹 페이지를 갱신하기 위해 문서의 일부를 가져올 수도 있게 되었다.
특징:
- Stateless: 각 요청은 독립적이며, 이전 요청의 상태를 기억하지 않음.
- Text-based: 헤더와 메시지가 텍스트 형식.
- 비연결성: 요청 후 연결이 종료됨(HTTP 1.0 기준).
- 보안: 기본적으로 암호화되지 않음(HTTPS로 보완 가능).
한계:
- 각 요청마다 새로운 TCP 연결을 생성.
- 암호화 미지원으로 보안 취약.
그러나 HTTP는 큰 문제가 있었다.
- 보안 취약성: HTTP는 데이터를 암호화하지 않고 평문으로 전송한다. 이는 중간에 제3자가 네트워크 상에서 데이터를 엿볼 수 있으며, 개인 정보나 민감한 데이터가 노출될 수 있는 보안 취약점을 가지고 있다.
- 무결성 문제: HTTP는 데이터의 무결성을 보장하지 않는다. 데이터가 전송 중에 변경되거나 조작될 수 있으며, 이로 인해 정보의 정확성이 보장되지 않는 문제가 있다.
- 신원 보증의 부재: HTTP는 서버의 신원을 확인하는 기능이 없다. 따라서 중간에 제3자가 서버를 위장하여 클라이언트와 통신할 수 있으며, 이는 사이버 공격의 가능성을 높이는 요인이 된다.
HTTPS