[네트워크] HTTP Message와 Status Code

Jung Wish·2020년 10월 19일
1

네트워크

목록 보기
5/7
post-thumbnail

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

  • 다양한 요청 메타데이터 정보가 들어있으며, 크게 Request, General, Entity Header로 나눌 수 있습니다.

    • General headers : 요청 및 응답 메시지 모두에서 사용 가능한 일반 목적의 헤더 항목입니다.
    • Request headers : Request Message에서만 나타납니다. 요청을 구체화 시키거나, context 제공, 또는 제약사항 등이 기재됩니다.
    • Entity headers : Reqest, Response에서 모두 사용 가능한 Entity(콘텐츠, 본문, 리소스 등)에 대한 설명 부분입니다. 만약 본문내용이 없는 요청이라면 Entity 헤더는 전송되지 않습니다.
  • 주요 항목 소개(Reqeust)

    • Host : 요청하는 호스트에 대한 호스트명(URL) 및 포트번호
      👉🏻 표준 포트는 생략 가능하다.
    • If-Modified-Since : 명시한 날짜 이후로의 리소스만을 취득
    • Authorization : 인증 토큰(JWT)을 서버로 보낼 때 사용하는 헤더로 토큰의 종류와 실제 토큰을 전송합니다.
    • Origin : fetch가 시작되는 위치(요청이 온 위치)를 나타냅니다. 서버의 ACCESS-CONTROL-*와 연관이 있으며, 요청 주소와 받는 주소가 다르다면 CORS 에러를 발생시킵니다.
    • Cookie : 서버에 의해 Set-cookie로 설정된 쿠키 값, 사생활 보호 설정을 걸어놓을 경우 해당 부분은 block당할 수 있습니다.
    • Accept : 클라이언트가 원하는 콘텐츠 타입 및 우선순위를 명시해줍니다. 협상용 항목으로 해당 콘텐츠에 대한 콘텐츠 협상 과정 이후 서버는 해당 제안 중 하나를 하나를 선택해 Content-Type으로 명시합니다.
  • 주요 항목 소개(Entity)

    • Content-type : 해당 개체에 포함되는 미디어 타입 정보입니다.
    • Content-Length : 해당 개체의 바이트 길이 또는 크기(10진수)

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

profile
Frontend Developer, 올라운더가 되고싶은 잡부 개발자, ISTP, 겉촉속바 인간, 블로그 주제 찾아다니는 사람

0개의 댓글