1. HTTP 메시지
1) 개요
HTTP는 서버-클라이언트 구조로, 클라이언트가 요청하고 서버가 응답하는 단방향 통신이다.
이때 각 호스트가 보내는 데이터는 HTTP 메시지 구조를 가진다.
HTTP 메시지는 요청 메시지와 응답 메시지로 나뉘고 크게 라인, 헤더, 바디로 구성된다.
2) 요청 메시지
클라이언트가 서버에게 전송하는 데이터
- 라인(Line)
- HTTP 메서드
- 요청할 리소스의 경로 또는 이름 (URI)
- 프로토콜 버전
- 헤더(Header)
- 요청 메시지의 메타데이터를 포함하는 부분
- 미디어 타입, 요청 호스트 정보 등 요청에 대한 부가적인 정보를 나타낸다.
- Host, User-Agent, Accept, Content-Type 등이 있다.
Host와 User-Agent는 각각 요청 호스트 IP와 클라이언트 애플리케이션 정보를 나타내고
Accept와 Content-Type은 각각 클라이언트가 수용할 수 있는 미디어 타입, 메시지 본문의 미디어 타입을 나타낸다.
- 바디(Body)
- 요청 메시지 본문을 포함하는 부분
- 서버로 전송할 데이터가 포함되며, 없을 시 생략할 수 있다.
3) 응답 메시지
요청에 대한 응답으로 서버가 클라이언트에게 전송하는 데이터
- 라인
- 상태 코드: 성공, 실패 등 요청의 처리 상태를 나타내는 코드
- 상태 메시지: 상태 코드를 설명하는 짧은 문장
보편적으로 사용하는 상태 코드가 있지만 절대적인 것은 아니다.
- 헤더
- 응답 메시지의 메타데이터를 포함하는 부분
- 미디어 타입, 서버 정보, 쿠키, 캐싱 등 응답에 대한 부가적인 정보를 나타낸다.
- Content-Type, Content-Length, Server, Set-Cookie, Location 등이 있다.
Content-Type, Content-Length는 각각 메시지 본문의 미디어 타입과 길이를 나타내고
Server와 Location은 각각 서버 소프트웨어 정보와 추가적인 URL을 나타낸다.
- 바디
- 응답 메시지의 본문을 포함하는 부분
- 클라이언트가 요청한 서버의 리소스 데이터를 포함한다.
2. HTTP 메서드
1) 개요
클라이언트에서 서버로 요청을 보낼 때 사용하는 명령어로 요청의 구체적인 동작을 의미한다.
2) 종류
- GET
- 주로 리소스를 요청하고 읽을 때 사용한다.
- 데이터를 전송하지 않으므로 바디 및 관련 헤더가 생략된다.
- URL에 요청 파라미터(쿼리 스트링)를 포함해서 원하는 데이터를 검색하고 필터링 할 수 있다.
- 캐싱으로 같은 요청에 대한 응답을 저장하여 처리 속도를 높일 수 있다.
- POST
- 서버로 데이터를 전송하기 위해 사용되며, 주로 새로운 리소스를 생성할 때 사용한다.
- 바디에 데이터를 포함하여 전송한다.
- 같은 경로로 동일한 데이터를 여러번 전송하면 서로 다른 리소스가 여러개 생성된다.
- PUT
- 리소스를 업데이트하기 위해 주로 사용되며, 리소스가 존재하지 않으면 새로 생성한다.
- 새로 업데이트할(대체할) 데이터를 본문에 포함하여 전송한다.
- POST와 다르게 동일한 데이터를 여러번 전송해도 하나의 리소스만 생성된다.
- PATCH
- 리소스의 일부분만 업데이트하기 위해 주로 사용된다.
- PUT은 리소스 전체를 업데이트하지만 PATCH는 일부분만 업데이트가 가능하다.
- 업데이트할 일부분의 데이터를 본문에 포함하여 전송한다.
- DELETE
- 리소스를 삭제하기 위해 사용된다.
- HEAD
- GET과 유사하지만 바디를 제외한 리소스 정보만을 요청하기 위해 사용한다.
- 주로 리소스 존재 여부를 확인하거나 서버의 응답 속도를 측정할 때 사용된다.
- GET과 마찬가지로 캐싱이 가능하다.
- OPTIONS
- 해당 리소스에 대해 서버가 지원하는 메서드 종류를 확인하기 위해 사용한다.
GET, DELETE, HEAD 메서드처럼 URL에 요청 파라미터가 노출될 경우 보안에 취약할 수 있다.
참고 문서
'CS' 카테고리의 다른 글
URL의 구성 요소와 웹 통신 과정 (0) | 2023.03.16 |
---|---|
HTTP 버전별 특징 정리 (0) | 2023.03.02 |
HTTP vs HTTPS (feat. 대칭키, 공개키) (0) | 2023.02.28 |
TCP vs UDP (0) | 2023.02.26 |
OSI 7계층에 대하여 (0) | 2023.02.24 |