HTTP 요청의 구조와 통신 과정
HTTP는 서버-클라이언트 구조에서 통신을 위한 프로토콜이며 클라이언트의 요청과 서버의 응답은 정해진 구조에 맞게 구성되어 전달된다.
클라이언트의 요청
클라이언트에서 서버로 전달되는 요청의 구조는 요청라인, 헤더(Header), 본문(Body)로 구성된다.
서버의 응답
서버에서 클라이언트로 전달되는 응답의 구조는 상태라인, 헤더(Header), 본문(Body)로 구성된다.
HTTP요청과 응답의 구성 요소
요청 라인(Start line)
- 클라이언트가 서버로 전달하려고 하는 요청의 세부적인 경로인 URL과 요청의 종류를 나타내는 HTTP 메서드 등이 포함되어 있다.
상태 라인(Status line)
- 서버가 클라이언트로 전달하는 요청의 상태를 표현하는 상태 텍스트(Status Text)와 이를 숫자로 나타낸 상태 코드(Status Code)등이 포함되어 있다.
헤더(Header)
- 요청과 응답에 공통적으로 존재하는 요소
- 요청과 응답에 대한 추가적인 정보가 담겨있다.
- General header, Request header, Response header, Entity header 등으로 나누어진다.
- 주로 사용자를 식별하기 위한 토큰과 같은 정보가 포함되어 있다.
본문(Body)
요청과 응답에 공통적으로 존재하는 요소
요청과 응답이 전송하는 데이터가 존재하는 부분
text, form data, json, xml 등의 다양한 형태의 데이터가 포함되고 최근에는 주로 json 형태를 사용한다.
전달해야할 데이터가 존재하지 않는다면, 본문(Body)는 비어있을 수 있다.
json 예시
{"userId" : "id", "password" : "password"}
HTTP 요청 메시지 예시
# start line
POST /login HTTP/1.1 # http method, url, http버전 순으로 나열됨
# header
Host: google.com
connection: keep-alive
User-Agent: Mozilla/5.0
Accept: application/json
# body
{"userId" : "id", "password" : "password"}
HTTP 응답 메시지 예시
# http response message
# status line
HTTP/1.1 200 OK # http버전, status code, status text 순으로 나열됨
# header
connection: keep-alive
server: nginx/1.24.0 (Ubuntu)
content-type: application/
# body
{"message" : "Login Success"}
HTTP 상태코드에 대한 자세한 내용은 아래 링크를 참고해주세요!!
2025.03.06 - [백엔드] - HTTP 상태코드
HTTP 메서드
클라이언트는 요청의 의도를 표현하기 위해 총 9가지의 HTTP 메서드(method)를 사용함.
서버는 HTTP 메서드(method)를 통해 클라이언트가 원하는 동작을 처리함
HTTP method 종류와 의미
- GET: 서버가 가지고 있는 리소스를 조회
- Query(RequestParameter, PathVariable)을 통해 전달
- Body를 통해서도 데이터를 전달할 수 있지만 거의 사용하지 않음
- POST: 리소스를 새롭게 등록하거나 적절한 처리를 요청
- 주로 Body를 통해 데이터를 전달하고 서버는 이를 등록하거나 처리하여 클라이언트가 원하는 결과를 반환함
- PUT: 리소스를 기존 리소스와 교체하거나 새롭게 등록
- 클라이언트가 리소스를 특정하여 QueryString을 통해 _직접 리소스의 위치를 URL로 지정_하며 변경할 데이터는 Body를 통해 전달함
- PATCH: 리소스의 일부만 수정
- PUT과 유사하지만 기존 데이터의 일부만 수정한다는 것과 기존 리소스가 존재하지 않을때 새롭게 등록하지 않는다는 차이가 존재함
- DELETE: 기존 리소스를 삭제
- 클라이언트가 리소스를 QueryString을 통해 URL을 만들어 지정한다.
- 삭제를 하는것이기 때문에 Body가 존재하지 않는다.
- 이외에도 HEAD, OPTIONS, CONNECT, TRACE가 존재함
'BackEnd' 카테고리의 다른 글
API의 구현과 API 명세서-2 (1) | 2025.03.25 |
---|---|
API의 구현과 API 명세서-1 (2) | 2025.03.21 |
클라이언트-서버 구조와 HTTP란? (0) | 2025.03.21 |
HTTP 헤더2 - 캐시와 조건부 요청 (0) | 2025.03.19 |
HTTP 헤더1 - 일반 헤더 (2) | 2025.03.18 |