[HTTP 이해하기] HTTP 메시지
HTTP 메시지는 시작줄, 헤더 블록, 본문 이렇게 세 부분으로 이루어진다.
시작줄과 헤더는 그냥 줄 단위로 분리된 아스키 문자열이다. 줄바꿈 문자열은 CRLF 이다.
1. 메시지 문법
요청메시지 형식:
<메서드> <요청 URL> <버전>
<헤더>
<엔터티 본문>
응답메시지 형식
<버전> <상태코드> <사유 구절>
<헤더>
<엔터티 본문>
예: https://reqbin.com/req/c-1n4ljxb9/curl-get-request-example
How do I send a GET request using Curl?
ReqBin is the most popular online API testing tool for REST, SOAP and HTTP APIs.
reqbin.com
위의 페이지에서 RAW 로 요청 / 응답 type을 선택하면 HTTP 메시지를 볼수 있다.
2. 시작줄
모든 HTTP 메시지는 시작줄로 시작한다.
요청 메시지의 시작줄은 무엇을 해야 하는지, 응답 메시지의 시작줄은 무슨일이 일어 났는지 설명한다.
2.1 요청줄 / 응답줄
요청 메시지: 메서드, 요청 URL, HTTP 버전 정보가 포함된다.
응답 메시지: HTTP 버전, 숫자로 된 상태 코드, 수행 상태에 대해 설명해주는 텍스트 정보가 포함된다.
모든 필드는 공백으로 구분된다.
2.2 버전 번호
버전 번호는 HTTP/x.y 형식으로 요청과 응답 메시지 양쪽 모두에 기술된다. 구 버전은 신규 버전의 새로운 기능을 사용할 수 없다.
버전 번호는 어떤 애플리케이션이 지원하는 가장 높은 HTTP 버전을 가리킨다. 때문에 요청 / 응답 메시지의 버전 번호는 메시지가 해당 버전이라는 뜻이 아니라 현재 클라이언트 / 서버가 해당 HTTP 버전을 지원한다는 뜻이다.
2.3 엔터티 본문
엔터티 본문은 HTTP 메시지의 화물이라고 할 수 있다. HTTP 메시지에 함께 보낼 여러 종류의 디지털 데이터들을 실어 나를 수 있다. (이미지, 비디오, HTML 문서, 전자우편 등)
3. 메서드
요청의 시작줄은 메서드로 시작하며 서버에게 무엇을 해야 하는지 말해준다. 많이 쓰이는 HTTP 메서드는 다음과 같다.
메서드 | 설명 | 메시지 본문이 있는가 |
GET | 서버에서 어떤 문서를 가져온다. | 없음 |
HEAD | 서버에서 어떤 문서에 대해 헤더만 가져온다. | 없음 |
POST | 서버가 처리해야 할 데이터를 보낸다. | 있음 |
PUT | 서버에 요청 메시지의 본문을 저장한다. | 있음 |
TRACE | 메시지가 프락시를 거쳐 서버에 도달하는 과정을 추적한다. | 없음 |
OPTIONS | 서버가 어떤 메서드를 수행할 수 있는지 확인한다. | 없음 |
DELETE | 서버에서 문서를 제거한다. | 없음 |
https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods
HTTP request methods - HTTP | MDN
HTTP defines a set of request methods to indicate the desired action to be performed for a given resource. Although they can also be nouns, these request methods are sometimes referred to as HTTP verbs. Each of them implements a different semantic, but som
developer.mozilla.org
4. 상태 코드
상태 코드는 클라이언트에게 무엇이 일어났는지 말해준다. 상태 코드들은 세 자리 숫자로 된 그들의 코드값을 기준으로 묶인다.
전체 범위 | 정의된 범위 | 분류 |
100 ~ 199 | 100 ~ 101 | 정보 |
200 ~ 299 | 200 ~ 206 | 성공 |
300 ~ 399 | 300 ~ 305 | 리다이렉션 |
400 ~ 499 | 400 ~ 415 | 클라이언트 에러 |
500 ~ 599 | 500 ~ 505 | 서버 에러 |
위의 표에서 정의된 범위는 현재 HTTP 명세에 공식적으로 정의된 코드들을 말한다. 만약 정의된 범위 외(인식 할수 없음)의 상태코드를 받으면 그 상태 코드가 포함되는 범주의 일반적인 구성원으로 가정하고 다뤄야 한다. 예를 들어, 550 에러 코드를 받으면 "서버 에러" 로 간주하면 된다.
5. 헤더
HTTP 헤더 필드는 요청과 응답 메시지에 추가 정보를 더한다. 기본적으로 이름/값 쌍의 목록이다.
- Request Header: 요청 메시지에서 사용하는 헤더, 가져오려고 하는 리소스에 대한 정보와 client의 정보를 제공함. (Authorization 등)
- Response Header: 응답 메시지에서 사용하는 헤더, 응답 메시지에 대한 추가 정보를 제공 함. (Age, Location 등)
- Representation Header: 응답 메시지에 포함한 리소스에 대한 정보를 제공 함. (Content-Type, Content-Encoding 등)
- Payload Header: payload 정보를 제공 함. (Content-Length, Content-Range 등)
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers
HTTP headers - HTTP | MDN
HTTP headers let the client and the server pass additional information with an HTTP request or response. An HTTP header consists of its case-insensitive name followed by a colon (:), then by its value. Whitespace before the value is ignored.
developer.mozilla.org