HTTP Message와 Statue Code
아래의 내용은 HTTP 1.1 기반 내용입니다.
🐰 HTTP Message
HTTP Message란,
- HTTP Message는 HTTP에서 클라이언트와 서버가 리소스를 교환하는 형식입니다.
- Message의 종류에는 Request(요청)과 Response(응답)이 있습니다.
- ASCII 코드로 인코딩된 텍스트 형태입니다.
- 소프트웨어, 브라우저, 프록시, 또는 웹 서버가 개발자 대신 HTTP Message를 작성합니다.
- Request와 Reponse는 시작점이 다를 뿐 구조는 유사합니다.
start-line
: 해당 요청 또는 응답에 대한 성공 또는 실패를 기록합니다. 항상 한줄로 끝납니다.
HTTP-headers
: 해당 요청 또는 응답에 대한 메타데이터가 들어갑니다. 요청에 대한 설명, 혹은 메시지 본문에 대한 설명이 들어갑니다.
empty line
: 요청 또는 응답의 메타데이터가 모두 전송되었음을 알리는 빈 줄(blank line)입니다.
body
: 요청과 관련된 내용(HTML 폼 콘텐츠 등)이 옵션으로 들어가거나, 응답과 관련된 문서(document)가 들어갑니다. 본문의 존재 유무 및 크기는 첫 줄과 HTTP 헤더에 명시됩니다.
HTTP Head
= start-line
+ HTTP Headers
HTTP Body
= payload (실질적으로 전송의 목적이 되는 데이터 부분)
Request Message 👉🏻
1. start-line (시작줄)
HTTP Method
+ Request Target
+ HTTP Version
으로 구성됩니다.
- Request Target은 주로 URL, 또는 프로토콜, 포트, 도메인의 절대 경로가 옵니다.
- Request Target은 Request Context에 따라 특정지어집니다.
- 해당 Target의 포맷은 HTTP Method에 따라 달라집니다.
- HTTP Version에 따라 메타 데이터 이후의 메세지 형태가 달라지기 때문에, 요청 시 명시해줍니다.
2. Header
3. 본문(body)
- 단일-리소스 본문(single-resource bodies)과 다중-리소스 본문(multiple-resource bodies)로 나눌 수 있습니다.
- 단일-리소스 본문(single-resource bodies) : 헤더 두개(Content-type, Content-Length)로 이루어진 단일 파일
- 다중-리소스 본문(multiple-resource bodies) : 파트 마다 다른 정보를 담은 본문(HTML관련)
Response Message 👈🏻
1. start-line(시작줄)
HTTP Version
+ Status Code
+ Status Text
로 구성됩니다.
- 상태 코드는 성공 및 실패의 여부를 나타내며, 상태 텍스트는 상태 코드에 대한 간결한 설명을 나타냅니다.
2. Header
- 다양한 응답 메타데이터 정보가 들어있으며, 크게 Response, General, Entity Header로 나눌 수 있습니다.
- General, Entity 헤더는 요청 메세지와 동일하며 Response에는 상태 텍스트와 코드에서 미처 나타내지 못한 서버의 메타데이타 정보를 담고 있습니다.
- 주요 항목 소개(Response)
- Access-Control-Allow-Origin : 응답이 origin으로 부터의 요청 코드와 공유될 수 있는지를 나타냅니다. 만약 프론트엔드와 백엔드 주소가 다르면 CORS 에러 발생
- Set-cookie : 서버에서 사용자 브라우저에 쿠키를 전송하기 위해 사용합니다.
- Last-Modified : 서버가 알고있는 가장 마지막 수정된 날짜와 시각입니다. 저장된 리소스가 이전과 같은지 유효성 검사자로 사용됩니다.
- Location : 리다이렉션될 URL 주소를 명시합니다. 해당 내용은 Statue code가
3.XX(redirect)
, 201(created)
일 때 사용합니다.
- Allow : 요청한 리소스를 지원하는 메소드 집합을 나열합니다. 현 상태에서 어떤 메소드를 사용할 수 있는지를 알 수 있습니다.
3. 본문(body)
- 모든 응답에 본문이 들어가진 않습니다. 길이를 아는 단일-리소스 본문, 길이를 모르는 단일-리소스 본문, 그리고 다중 리소스 본문으로 나눌 수 있습니다.
- 길이를 모르는 단일-리소스 본문에는 Transfer-Encoding가 chunked로 설정되어 있으며, 파일은 청크로 나뉘어 인코딩 되어 있습니다.
🐰🐰 HTTP Statue Code(상태 코드)
상태 코드에 대한 자세한 개념은 HTTP: Response Codes를 참고하시면 좋을 것 같습니다. 상태코드는 여러가지 종류가 있지만, 상태코드는 첫 번재 digit에 의해 비슷한 유형의 코드로 묶이기 때문에 해당 내용에 대해 정리해보겠습니다.
- 1xx (요청에 대한 정보): Request received, continuing process.
👉🏻 요청을 받으면, 기존 작업 처리를 계속 진행한다.
- 2xx (성공): The action was successfully received, understood, and accepted.
👉🏻 작업이 성공적으로 수용되고, 해석되었으며, 수행되었다.
💫 200(성공)
, 201(새 리소스 작성)
, 202(요청이 접수, 아직 처리 X)
- 3xx (리다이렉션): Further action needs to be taken in order to complete the request.
👉🏻 요청 작업을 완료하기 위해 추가적인 동작을 수행해야한다.
💫 300(여러개의 응답으로 선택해야 한다)
, 301(영구 이동)
, 302(임시 이동)
- 4xx (클라이언트 오류): The request contains bad syntax or cannot be fulfilled.
👉🏻 클라이언트 요청에 부적절한 구문이 있거나 해당 내용이 수행될 수 없다.
💫 401(권한 없음)
, 404(금지됨)
, 404(찾을 수 없음, 서버에 없음)
- 5xx (서버 오류): The server failed to fulfil an apparently valid request.
👉🏻 서버가 유효한 요청에 대한 작업을 수행하지 못했다.
💫 500(내부 서버 오류)
, 501(메소드 인식 불가)
, 503(서비스 사용 불가)
해당 내용은 아래 Reference를 통해 개인적으로 공부한 내용을 기록한 것입니다. 오류나 제안 사항은 댓글로 부탁드립니다!🙇🏻♀️
Reference