HTTP 메시지 종류
- HTTP Request
- 클라이언트가 서버로 전달해서 서버의 액션이 일어나게끔 하는 요청
- HTTP Response
- 요청에 대한 서버의 답변
이번 학습은 Request를 중심으로 살펴보자.
구성요소
a. start line
HTTP Request Message의 시작 라인
HTTP request의 start line 3가지 부분으로 구성
GET /test.html HTTP/1.1
[HTTP Method] [Request target] [HTTP version]
Request target
HTTP Request가 전송되는 목표 주소
HTTP version
말그대로 HTTP의 version이다.
version에 따라 request 메시지 구조나 데이터가 다를 수 있어 version을 명시힌다.
HTTP method
HTTP Request 의도를 담고있다.
메서드 종류 | 목적 |
GET | GET 메서드는 특정 리소스의 표시를 요청합니다. GET을 사용하는 요청은 오직 데이터를 받기만 합니다. |
HEAD | HEAD 메서드는 GET 메서드의 요청과 동일한하나 메시지 부분(Body)를 제외하고 상태 줄과 헤더만 반환 |
POST | POST 메서드는 특정 리소스에 엔티티를 제출할 때 쓰입니다 |
PUT | PUT 메서드는 리소스 덮어쓰기 (해당 리소스가 없으면 생성) |
PATCH | PATCH 소스의 부분만을 수정하는 데 쓰입니다. |
DELETE | DELETE 메서드는 특정 리소스를 삭제합니다. |
CONNECT | CONNECT 메서드는 목적 리소스로 식별되는 서버로의 터널을 맺습니다. |
OPTIONS | OPTIONS 메서드는 목적 리소스의 통신을 설정하는 데 쓰입니다. |
TRACE | TRACE 메서드는 목적 리소스의 경로를 따라 메시지 loop-back 테스트를 합니다. |
HTTP 메서드는 다음과 같은 특징을 갖는다.
- Safe
- Safe한 메서드는 “호출해도 리소스를 변경하지 않는다”는 특징
- Indempotent
- 한 번 호출하든 여러번을 호출하든 결과는 똑같은 메서드가 멱등성을 갖는다.
- Cacheable
- 응답 결과를 서버에 캐싱해서 사용해도 되는 메소드를 의미한다.
- 대부분 GET, HEAD 정도만 캐시하여 사용한다.
b. headers
HTTP 헤더는 클라이언트와 서버가 요청 또는 응답으로 부가적인 정보를 전송할 수 있도록 해준다.
HTTP 헤더는 대소문자를 구분하지 않는 이름과 콜론 ':' 다음에 오는 값(줄 바꿈 없이)으로 이루어져있다.
- General headers : 요청 및 응답 메시지 모두에서 사용 가능한 일반 목적의 헤더 항목이다.
- Request headers : Request Message에서만 나타납니다. 요청을 구체화 시키거나, context 제공, 또는
제약사항 등이 기재된다. - Entity headers : Reqest, Response에서 모두 사용 가능한 Entity(콘텐츠, 본문, 리소스 등)에 대한 설명 부분
만약 본문내용이 없는 요청이라면 Entity 헤더는 전송되지 않는다.
- User-Agent [request header]
- HTTP 요청을 보내는 디바이스와 브라우저 등 사용자 소프트웨어의 식별 정보
- Mozilla 정보/버전 + 운영체제 정보 + 렌더링 엔진 정보 + 브라우저
- 이 정보를 통해 서버는 클라이언트 프로그램(브라우저)에 맞는 최적의 데이터를 보내줄 수 있다.
- Accept [request header]
- 클라이언트가 웹서버로부터 받을 Response로 받을 타입 , 내가 받아 볼 데이터 타입을 알려줌
- Content-Type [Entity header]
- 클라이언트가 웹서버에게 보낼 데이터 타입
- Content-Length [Entity header]
- 보낼 데이터의 크기
- Authorization [request header]
- 인증 토큰을 서버로 보낼 때 쓰이는 Header
c. body
HTTP Request가 전송하는 데이터를 담고 있는 부분 전송하는 데이터가 없다면 body 부분은 비어있다.
보통 post 요청일 경우, HTML 폼 데이터가 포함되어 있다.
위에서 말한 헤더 두 개(Content-Type와 Content-Length)로 정의된 단일 파일로 본문으로 종류는 다음과 같다.
단일-리소스 본문 과 다중-리소스 본문으로 나눌 수 있다.
- 단일-리소스 본문 : 헤더 두개 [Content-type, Content-Length] 로 이루어진 단일 파일
- 다중-리소스 본문 : 파트 마다 다른 정보를 담은 본문(HTML관련)
보통 다음과 같이 보여진다.
POST /test HTTP/1.1
Accept: application/json
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 83
Content-Type: application/json
Host: google.com
User-Agent: HTTPie/0.9.3
{
"test_id": "tmp_1234567",
"order_id": "8237352"
}
참고
'CS > Network' 카테고리의 다른 글
HTTP [ HTTP Version, HTTPS ] (1) | 2024.09.20 |
---|---|
TCP / IP [송수신 과정, 캡슐화, PDU] (0) | 2024.09.20 |
TCP / IP 4계층 [ 계층 구조 ] (0) | 2024.09.19 |
HTTP [HTTP Response] (0) | 2024.09.18 |
HTTP [정의 및 구성 요소] (1) | 2024.09.16 |