
HTTP (Hyper Text Transfer Protocol)정의:
HTTP는 서버와 클라이언트간의 정보를 교환하는 데 사용되는 프로토콜이다.
유래:
1989년, 팀 버너스-리(Tim Berners-Lee)가 전 세계의 연구자들이 정보를 쉽게 공유하고 접근할 수 있는 시스템을 만들기 위한 목적으로 개발을 시작했다. 이에 따라 HTTP는 정보 교환을 가능하게 하는 프로토콜로 개발이 되었으며, 1991년에 HTTP 0.9로 공개된 초기 버전에서는 오직 HTML 문서만을 전송할 수 있는 단순한 프로토콜 형태였다. 이후 기능이 점차 확장되었고, 최근(2022년)에는 HTTP/3 버전이 IETF(Internet Engineering Task Force) 표준으로 채택되었다.
특징:
HTTP는 서버와 통신할 때 80번 포트 번호를 사용한다.
서버는 80번 포트에서 요청을 기다리고
클라이언트는 80번 포트로 요청을 보낸다.
HTTP는 TCP/IP 기반으로 되어 있다.
HTTP 프로토콜은 TCP/IP 프로토콜 스택을 사용하여 통신을 수행한다.
TCP/IP는 전송 제어 프로토콜(Transmission Control Protocol)과 인터넷 프로토콜(Internet Protocol)의 조합으로 인터넷 상에서 데이터를 "안정적으로", "순서대로", "오류 없이" 전송할 수 있게 해주는 기술이다.
HTTP는 무상태(stateless) 프로토콜이다.
무상태(stateless)라는 것은 서버가 클라이언트의 이전 요청을 기억하지 않는다는 의미이다.
각각의 요청은 독립적으로 처리되며, 이전 요청과의 연관성을 서버가 따로 저장하지 않는다.
이러한 특성은 HTTP의 설계와 운영을 간단하게 하는 이점도 있지만, 일부 기능을 구현할 때 제약을 가져올 수 있는 단점도 있다.
세션 관리를 할 때에는, 세션 정보를 유지하기 위해 쿠키, 세션ID, 토큰 등의 기술을 사용한다. 이를 통해 서버는 사용자의 상태 정보를 유지할 수 있다.
보다 쉽게 설명하기 위해 예시를 하나 들면
1) 친구에게 전화를 걸었음. "난 OOO"이야 라고 소개함. "반갑다"라고 응답을 받음
2) 전화를 건 목적에 대해서 말을 하려고 하니, 친구가 "누구냐 넌"하고 물어봄. (방금 전에 말한 사람이 나라는걸 인지를 못함)
3) 매번 말을 할 때마다 내가 누구인지 설명을 해줘야 함. (이게 바로 stateless의 단점)
4) 그런데 쿠키, 세션ID, 토큰등을 들고 말을 걸면, 매번 내가 누구인지 따로 설명을 안해줘도 됨
요청 (Request)
클라이언트가 서버에 특정 리소스에 대한 접근을 요청할 때 사용하는 메세지이다.
요청은 일반적으로 다음과 같은 요소로 구성된다.
1) Method
클라이언트가 수행하고자 하는 작업 (ex. GET, POST, PUT, DELETE)
2) Path
요청하고자 하는 리소스의 URL
3) Version
HTTP 버전 (ex. HTTP/1.1)
4) Headers
요청에 대한 추가 정보를 제공하는 필드 (ex. User Agent, 허용되는 응답 형식, 인증 토큰 등)
5) Body
일부 요청(주로 POST, PUT)에 포함되어 데이터 전송할 때 사용됨
응답 (Response)
서버가 클라이언트의 요청을 처리한 후 보내는 메세지이다.
응답은 다음과 같은 요소로 구성된다.
1) Status Code
응답의 상태를 나타내는 코드. 요청이 성공했는지 실패했는지 나타냄
(ex. 200 OK, 404 Not Found)
2) Headers
응답에 대한 추가 정보를 제공하는 필드
3) Body
요청된 리소스의 실제 데이터 (ex. html 문서)
HTTPS (Hyper Text Transfer Protocol Secure)HTTP에 데이터 암호화가 추가된 프로토콜이다. (HTTPS: HTTP + Secure). 443번 포트를 사용한다.SSL(Secure Sockets Layer) 또는 TLS(Transport Layer Security) 보안 프로토콜을 사용하여 데이터를 암호화 한다. 이는 전송 중인 데이터가 도청, 데이터 변조 및 메세지 위조로부터 보호됨을 의미한다. 반면 HTTP는 암호화 되지 않으므로 데이터가 제 3자에 의해 쉽게 읽힐 수 있다.SSL/TLS 인증서를 필요로 한다. 이 인증서는 웹사이트가 실제로 주장하는 기관/개인에 속해 있는지를 확인하는 역할을 한다. HTTP는 이러한 인증 과정이 따로 없다.대칭키 암호와와 비대칭키 암호화를 모두 사용하여 빠른 연산 속도와 안정성을 얻고 있다. (해당 내용은 따로 정리가 필요할 것 같다)참고