HTTP 메세지는 아래와 같은 구조로 만들어진다
| Start-line 시작 라인 |
| Header 헤더 |
| empty line 공백 라인 (CRLF) |
| Message Body |
또, HTTP 메세지는 크게 요청 / 응답 두 가지 경우로 나눌 수 있다.
HTTP Message 가 어떻게 구성되는지 자세히 살펴보자.
1. Start-Line
Start-line 은 요청, 응답 메시지에서 차이가 있다.
-HTTP 요청 메세지
Start-line = Request-line
-> method (공백) request-target (공백) HTTP-version (엔터)
- method : HTTP 메서드, 어떤 동작을 할 것인지 (종류 : GET, POST, PUT, DELETE..)
- request-target : 요청 대상, 절대경로?쿼리 형태
- HTTP version
-HTTP 응답 메세지
Start-line = Status-line
-> HTTP-version (공백) status-code (공백) reason-phrase (엔터)
-HTTP version
- status-code : HTTP 상태 코드, 요청 성공 or 실패를 나타냄
- reason-phrase : 이유 문구, 사람이 이해할 수 있는 짧은 상태 코드 설명 글
2. Header
HTTP 전송에 필요한 모든 부가정보가 담겨있음.
ex) 메세지 바디의 내용, 크기, 압축 방식, 인증, 브라우저 정보, 서버 애플리케이션 정보, 캐시 관리 정보 등..
Content-Type: text/html;charset=UTF-8
Content-Length: 3321
3. Message Body
실제 전송할 데이터!
URI 설계하기
URI 설계에서 가장 중요한 것은 리스소 식별이다.
리소스를 식별하는 방법 : 동사가 아니라 명사에 집중?
ex) 회원을 등록한다 --> '등록' 이 아니라 '회원' 이 리소스이다.
즉 회원 등록, 수정, 조회 URI를 설계할 때 모두 '회원'이라는 리소스만 식별하면 된다.
회원 조회 /members/{id}
회원 등록 /members/{id}
회원 수정 /members/{id}
회원 삭제 /members/{id}
이런 식으로 설계!
그렇다면 네 가지 기능을 어떻게 구분할까?
HTTP start-line 에 있는 메서드로 구분한다
HTTP 메서드
- GET: 리소스 조회
- POST : 요청 데이터 처리, 주로 등록에 사용
- PUT : 리소스를 대체, 해당 리소스가 없으면 생성 (주의 : 리소스를 완전히 대체해 버림!!)
- PATCH : 리소스 부분 변경
- DELETE : 리소스 삭제
GET
리소스를 조회할 때 사용하는 메서드
서버에 전달하고 싶은 데이터는 query를 통해서 전달한다.
ex) GET /search?q=coding&hl=ko HTTP/1.1
POST
메세지 바디를 통해 서버로 데이터를 전달
서버는 요청 데이터를 처리한다.
이때 처리하는 방법은 서버에서 정할 수 있다! 주로 신규 리소스 등록, 프로세스 처리에 사용
주의점! 신규 리소스 식별자를 서버에서 만들어 부여한다!
ex) 요청 : POST /members HTTP/1.1 + 데이터
응답 : HTTP/1.1 201 Created
Location: /members/123
이런 식으로 응답에서는 데이터를 보내며 요청만 하지 식별자를 주지 않지만, 서버에서 식별자 (/123)을 생성해 저장한다.
물론 처리하는 방법에 따라 새로운 식별자를 생성하지 않고 처리만 할 수 도 있다.
PUT
리소스가 있으면 대체, 없으면 생성. 즉 덮어쓰기.
POST와 다르게 클라이언트 요청에서 URI를 지정해야 함!
이 메서드는 덮어쓰기로 새로운 데이터와 기존 데이터의 형식이 달라도 그냥 덮어버린다
즉 부분만 수정이 불가능
PATCH
리소스를 부분 수정할 때 사용
'코딩 > 네트워크' 카테고리의 다른 글
| [HTTP] HTTP 헤더 (0) | 2023.05.28 |
|---|---|
| [HTTP] 쿠키 & 캐시 (0) | 2023.05.27 |
| [HTTP] 상태 코드 (0) | 2023.05.26 |
| [HTTP] 클라이언트에서 서버로 데이터 전송하기 (0) | 2023.05.25 |
| [HTTP] 인터넷 통신의 원리 및 방법 (TCP/IP, Port, HTTP, URI) (1) | 2023.05.20 |