HTTP
웹 기반 HTTP
<aside>
💡
HTTP: 통신 규약 프로토콜
</aside>
- 클라이언트 - 서버 구조
- 요청은 클라이언트, 응답은 서버 → 역할이 분리
- 무상태(Stateless)
- 서버가 이전 요청을 기억하지 않음
- 요청 하나하나가 독립적 → 서버 확장에 용이함
- 단점: 필요한 정보를 매 요청마다 다 담아 보내야 함
- 서버 확장엔 유리하지만, 로그인처럼 상태 유지가 필요한 기능은 쿠키, 세션, 토큰같은 별도 메커니즘으로 보완
- 비연결성(Connectionless)
- 응답을 주고 나면 연결을 끊음
- 수많은 클라이언트를 적은 자원으로 감당하기 위함
- HTTP 메시지로 통신
- 정해진 형식의 텍스트 메시지로 주고받음
HTTP 메서드
- GET: 주로 조회에 사용하고 일반적으로 쿼리스트링으로 조건을 전달함
- 서버 리소스 상태를 바꾸지 않는 안전한 메서드이자 멱등성을 가진 메서드
- POST: Body에 데이터를 담아 새 리소스를 생성하거나, 결제/배달완료처럼 복잡한 프로세스를 실행할 때 사용
- PUT: 리소스를 통째로 교체하는 의미가 강함
- 같은 요청을 반복해도 같은 상태로 수렴하므로 멱등함
- PATCH: 리소스의 일부 변경에 사용
- 변경 방식에 따라 멱등할 수도 있지만 항상 보장되지는 않음
HTTP 요청 메시지의 구성 요소
- 시작 라인 - 메서드, 경로, 버전
- request.getMethod(), request.getRequestURI() 등으로 꺼냄
- 헤더 - 요청에 대한 부가 정보
- Host: 요청 대상 서버
- Content-Type: 바디 데이터의 형식(form인지 JSON인지)
- Content-Length: 바디 크기
- Accept: 클라이언트가 원하는 응답 형식
- User-Agent: 클라이언트(브라우저) 정보
- Cookie: 쿠키 (세션, 로그인정보)
- 바디 - 실제 데이터가 실리는 곳
요청 데이터를 보내는 3가지 방법 (클라이언트 → 서버)