📡 HTTP (Hyper Text Transfer Protocol)
◾ 텍스트 기반의 통신 규약으로 인터넷에서 데이터를 주고받기 위한 프로토콜
📌 통신 구조
✅ 요청 (Request)
◾ 클라이언트가 서버에 자원을 요청하는 행위
✅ 응답 (Response)
◾ 서버가 클라이언트의 요청에 대한 결과를 응답하는 행위
📌 특징
✅ Stateless(무상태성)
◽ 서버가 클라이언트 상태 정보를 저장하지 않아 클라이언트가 상태 정보를 HTTP에 실어 요청
◽ 각각의 요청이 독립적으로 처리되며, 이전 요청과의 연결이나 클라이언트 상태를 기억하지 않음
✅ Connectionless(비연결성)
◽ 요청과 응답이 한 번 이루어지면 연결 종료
◽ 수많은 클라이언트 요청 대응에 유리, 서버 자원 효율적 관리
✅ Request-Response 모델
◽ 클라이언트가 요청을 보내고 서버가 응답하는 형태의 모델
◽ 클라이언트는 요청 메소드를 사용해 원하는 동작을 서버에 전달, 서버는 상태 코드와 데이터를 포함한 응답 반환
✅ URI(Uniform Resource Identifier)
◽ HTTP는 리소스를 식별하기 위해 URI 사용
◽ 클라이언트는 URI 통해 서버에 요청할 리소스 지정
◽ URL(Uniform Resource Locator) : URI를 표현하는 특정한 형태의 식별자
📌 HTTP 메소드
✅ GET
◽ 리소스 조회
✅ POST
◽ 요청 데이터 처리, 주로 데이터 등록에 사용
✅ PUT
◽ 리소스 대체, 해당 리소스가 없으면 생성
✅ PATCH
◽ 리소스 일부 변경
✅ DELETE
◽ 리소스 삭제
✅ HEAD
◽ GET과 동일하지만 응답 본문이 포함되지 않음
✅ OPTIONS
◽ 서버의 제공 메소드 등을 알아보기 위해 사용, 주로 CORS에 사용됨
📌 HTTP 상태 코드
✅ 1xx(정보)
◽ 요청을 받았으며 프로세스를 계속 진행
✅ 2xx(성공)
◽ 요청을 성공적으로 받았으며, 인식했고 수용함
✅ 3xx(리다이렉션)
◽ 요청 완료를 위해 추가 작업 조치가 필요
✅ 4xx(클라이언트 오류)
◽ 요청의 문법이 잘못됐거나 요청을 처리할 수 없음
✅ 5xx(서버 오류)
◽ 서버가 유효한 요청에 대해 응답 실패
📌 HTTP 메시지
✅ 구조
✅ 요청 메시지
◾ 시작 라인(Start Line)
◽ Method : GET / POST / PUT / DELETE 등의 HTTP 메소드
◽ URL : 요청 대상 경로
◽ Version : 사용된 HTTP 버전
◾ 헤더(Headers)
◽ Heathers : HTTP 전송에 필요한 부가 정보
◽ 메시지 크기, 압축 여부, 인증, 브라우저 정보, 서버 정보, 캐시 등
◾ 공백 라인(Empty Line)
◽ 헤더와 바디를 구분하기 위한 라인
◾ 바디(Message Body)
◽ 실제 전송할 데이터 (HTML 문서, 이미지, 영상, JSON 등)
✅ 응답 메시지
◾ 시작 라인(Start Line)
◽ Version : 사용된 HTTP 버전
◽ Status Code : 클라이언트가 보낸 요청의 성공/실패 여부를 나타내는 숫자 코드
◽ Status Message : Status Code 의미를 글로 표현
◾ 헤더(Headers)
◽ Heathers : HTTP 전송에 필요한 부가 정보
◽ 메시지 크기, 압축 여부, 인증, 브라우저 정보, 서버 정보, 캐시 등
◾ 공백 라인(Empty Line)
◽ 헤더와 바디를 구분하기 위한 라인
◾ 바디(Message Body)
◽ 전송받은 데이터 (HTML 문서, 이미지, 영상, JSON 등)
📌 HTTP 버전별 특징
✅ HTTP/0.9
◾ GET 메소드만 지원, HTTP 헤더 X
✅ HTTP/1.0
◾ 메소드, 헤더, 상태코드 추가
◽ 메소드 : POST 메소드 추가
◽ 요청 헤더 : HTTP 버전 추가
◽ 응답 헤더 : 상태코드와 CONTENT-TYPE이 생겨 HTML 파일 외 다른 타입 데이터도 전송 가능
◽ Connection : 요청마다 매번 새로운 연결로 성능 저하 및 서버 부하 비용 증가
✅ HTTP/1.1
◾ 현재 가장 많이 사용되는 버전으로 대부분의 기능 추가
◽ 메소드 : 나머지 메소드 추가
◽ Persistent connection : 한 번 사용한 커넥션 재사용
◽ Pipelining : 여러 개의 HTTP 요청 가능
◽ Head of Line Blocking : 우선 들어온 요청 응답 시간이 길어지면 후순위 요청 응답 시간도 길어짐
✅ HTTP/2.0
◾ HTTP 1.1 성능 개선 및 확장
◽ 메시지 전송 방식 변화 : 메시지를 바이너리 형태 프레임으로 나눠 여러 요청과 응답을 병렬적으로 전송
✅ HTTP/3.0
◾ UDP 기반 QUIC 프로토콜 사용
◽ QUIC 프로토콜 : TCP의 문제점을 해결하고자 구글이 개발한 UDP 기반 프로토콜
◽ 기존 TCP의 새로운 연결에 대한 지연 시간 해결
📌 HTTPS와의 차이점
✅ 보안 강화
◾ HTTP는 암호화 과정을 거치지 않아 중요한 정보가 노출되거나 조작될 수 있어 보안적으로 보완 필요
◾ HTTPS : SSL을 거쳐 SSL이 TCP와 통신함으로써 HTTP 암호화
◽ SSL(Secure Socket Layer) : 인터넷을 통해 전달되는 정보를 보호하기 위해 개발한 통신 규약