HTTP 요청 전송
TCP 연결이 성공적으로 수립되면, 클라이언트는 서버에 HTTP(HyperText Transfer Protocol) 요청을 전송한다. 이 요청은 클라이언트가 서버에게 원하는 작업을 설명하며, 자원을 요청하거나 데이터를 전송할 수 있다. HTTP 요청은 요청할 자원, 사용할 HTTP 메소드, 헤더, 필요시 본문 데이터를 포함할 수 있다.
HTTP 요청의 구성 요소
- HTTP 메소드
- GET: 서버로부터 정보를 요청하기 위해 사용된다. 주로 데이터를 가져오는 데 사용되며, 요청 정보는 URL의 쿼리 문자열로 전달된다.
- POST: 서버에 데이터를 제출할 때 사용된다. 예를 들어, 폼 데이터를 서버에 제출하거나 파일을 업로드할 때 주로 사용된다. 데이터는 요청의 본문에 포함된다.
- PUT: 지정된 URI에 데이터를 저장하도록 서버에 요청한다. 이미 존재하는 자원을 수정하거나 새 자원을 생성할 때 사용될 수 있다.
- PATCH: PUT이 이미 존재 하는 자원의 전체 수정이라면, PATCH는 이미 존재하는 자원의 부분적 수정을 위해 사용된다.
- DELETE: 지정된 URI의 자원을 삭제하도록 요청한다.
- HEAD: GET과 유사하지만, 서버는 본문 없이 헤더만 반환한다. 이는 자원의 메타데이터만을 검토하고자 할 때 유용하다.
- OPTIONS: 대상 리소스에 대한 통신 옵션을 서술하기 위해 사용된다. 예를 들어, 서버가 어떤 메소드를 지원하는지 확인할 때 사용된다.
클라이언트가 수행하고자 하는 작업의 종류를 서버에 알린다. HTTP 메소드는 서버에 대한 요청의 성격을 나타내며, 다음과 같은 메소드들이 있다:
- URL
- 예시:
https://example.com/api/users?id=123
https
: 프로토콜example.com
: 도메인 이름/api/users
: 경로id=123
: 쿼리 문자열
Uniform Resource Locator(URL)는 요청하는 자원의 위치를 나타낸다. URL은 도메인 이름, 포트(선택적), 자원의 경로, 쿼리 문자열(선택적) 등으로 구성된다.
- Header
- Content-Type: 요청이나 응답의 본문 데이터 유형을 지정한다. 예를 들어,
application/json
,text/html
등이 있다. - User-Agent: 요청을 보내는 클라이언트의 정보를 서버에 제공한다. 예를 들어, 브라우저 종류, 버전 등이 이에 해당한다.
- Authorization: 클라이언트의 인증 정보를 포함한다, 예를 들어, 기본 인증 또는 베어러 토큰을 사용할 수 있다.
- Cookie: 서버가 클라이언트 브라우저에 저장한 정보를 포함하며, 세션 관리, 사용자 추적 등에 사용된다.
HTTP 헤더는 요청에 대한 추가 정보를 제공하며, 요청과 응답 모두에 사용된다. 헤더를 통해 클라이언트와 서버는 필요한 매개변수를 서로에게 전달할 수 있다. 몇 가지 중요한 HTTP 헤더 예는 다음과 같다:
- Body
POST, PUT 같은 메소드에서 사용되며, 서버로 전송할 데이터를 포함한다. 본문 데이터의 형식은
Content-Type
헤더에 의해 결정된다. 데이터는 일반 텍스트, JSON, XML, 이진 파일 등 다양한 형식이 될 수 있다.