HTTP 메시지란?

GwanMtCat·2023년 9월 11일
0

HTTP 메시지란?

  • HTTP 메시지는 HTTP에서 서버와 클라이언트 간에 데이터가 교환되는 방식

httpmsgstructure2

  • 시작 줄 (Start line)
    • 메시지의 첫 줄은 시작줄로, 요청이라면 무엇을 해야 하는지 응답이라면 무슨일이 있어났는지 나타난다.
    • 요청과 응답의 형태가 다름에 주의하자.
      • 요청은 HTTP 메서드 및 버전
      • 응답은 HTTP 버전 및 상태 코드가 오고 있다.
  • 헤더 (HTTP Headers)
    • 시작줄 다음에는 0개 이상의 헤더 필드가 이어진다. 각 헤더 필드는 쉬운 구문 분석을 위해 쌍점(:) 으로 구분되어 있는 하나의 이름과 하나의 값으로 구성 된다.
    • 헤더필드를 추가하려면 그저 한 줄을 더하기만 하면 되며, 헤더는 빈 줄로 끝난다.(empty line)
  • 본문 (Body)
    • 어떤 종류의 데이터든 들어갈 수 있는 메시지 본문이 필요에 따라 올 수 있다.
    • 요청의 마지막 부분에 들어가나 모든 요청에 본문이 들어가지는 않는다.
    • GET, HEAD, DELETE, OPTIONS 처럼 리소스를 가져오는 요청은 보통 본문이 필요가 없다 (DELETE는 삭제)

메서드란

  • HTTP 메서드라고 불리는 여러가지 종류의 요청 명령을 지원하며 모든 요청 메시지에는 한 개의 메서드를 갖는다.
  • 메서드는 서버에게 어떤 동작이 취해져야 하는지 말해준다.
HTTP 메서드설명
GET서버에서 클라이언트로 지정한 리소스를 보내라.
PUT클라이언트에서 서버로 보낸 데이터로 리소스를 전부 변경해라.
PATCH지정한 리소스를 일부 변경해라.
DELETE지정한 리소스를 서버에서 삭제하라.
POST클라이언트 데이터를 서버에 보내 리소스를 생성하라.
HEAD지정한 리소스에 대한 응답에서 HTTP 헤더만 보내라. (GET과 동일한 응답을 요구하지만, 응답 본문을 포함하지는 않음)
TRACE루프백 진단을 위해 사용
OPTION서버의 어떤 메소드가 지원되는지 질의

이외에도 여러 method가 있다. https://developer.mozilla.org/ko/docs/Web/HTTP/Methods


  • GET의 특징
    • 캐시가 가능하고, 브라우저 히스토리에 기록이 남을 수 있다.
    • URL에 쿼리 스트링으로 데이터를 붙여 서버에 전송 한다.
    • 데이터를 헤더에 포함하여 전송 한다.
    • URL에 정보들이 그대로 노출되어 있어, POST 방식보다 상대적으로 보안에 취약하다.
    • POST 방식보다 전송 속도가 빠르며 전송 데이터양에 한계가 있다. (브라우저마다 GET 요청 길이 제한이 다르다.)
    • 멱등성이 보장되어야 한다.

  • POST의 특징
    • 데이터를 HTTP Body에 담아 전달한다.
    • 보내는 데이터 양에 제한이 없고, 대용량 데이터를 보낼때에는 POST가 적합하다.
    • GET에 비해 보안은 가능하나, 브라우저 도구로 데이터를 전부 볼 수 있다.
    • 브라우저 히스토리에 남지 않는다.
    • 멱등성이 보장되지 않는다. (PUT은 보장한다.)

상태 코드

  • HTTP 메시지는 상태 코드와 함께 반환 된다.
상태 코드의 종류의미
1xx정보성, 요청 받았고 진행중
2xx성공
3xx리다이렉션
4xx클라이언트 측 오류
5xx서버 측 오류
  • 1xx (정보성 응답)
    • 100 (Continue) : 진행 중임을 의미
    • 101 (Switching Protocol) : 클라이언트가 보낸 Upgrade 요청 헤더에 대한 응답에 들어가며, 서버에서 프로토콜을 변경할 것
    • 102 (Processing) : 응답 코드는 서버가 요청을 수신하였으며 이를 처리하고 있지만, 아직 제대로 된 응답을 알려줄 수 없음

  • 2xx (성공 응답)

    • 200 (OK) : 요청이 성공적으로 되었다.
    • 201 (Created) : 요청이 성공적이었고 그 결과로 새로운 리소스가 생성되었다. POST 혹은 PUT 요청 이후로 따라온다.
    • 202 (Accepted) : 요청이 처리를 위해 수락되었으나, 아직 해당 요청에 대해 처리 중이거나 처리 시작되지 않았을 수 있다는 것을 의미,
      이 응답은 요청 처리에 대한 결과를 이후에 HTTP로 비동기 응답을 보내는 것에 대해서 명확하게 명시하지 않는다.
    • 204 (No Content) : 요청에 대해서 보내줄 수 있는 콘텐츠가 없다. DELETE 혹은 PUT 요청 이후로 따라온다.
  • 3xx (리다이렉션 응답)

    • 301 (Moved Permanently) : 요청한 리소스의 URI가 변경되었음을 의미, 요청한 페이지를 새 위치로 영구적으로 이동. GET 또는 HEAD 요청에 대한 응답으로 이 응답을 표시하면 요청자가 자동으로 새 위치로 전달된다.

    • 302 (Found) : 요청한 리소스의 URI가 임시적으로 변경되었음을 의미, 클라이언트는 향후의 요청도 반드시 동일한 URI로 해야한다. 현재 서버가 다른 위치의 페이지로 요청에 응답하고 있지만 요청자는 향후 요청 시 원래 위치를 계속 사용해야 한다.

    • 303 (See Other) : 클라이언트가 요청한 리소스를 다른 URI에서 GET 요청을 통해 얻어야 할 때, 서버가 클라이언트로 직접 보내는 응답

    • 304 (Not Modified) : 캐시를 목적으로 사용, 클라이언트에게 응답이 수정되지 않았음을 알려주며, 클라이언트는 계속해서 응답의 캐시된 버전을 사용할 수 있다.

    • 301과 302의 차이?

  • 4XX (클라이언트 측 오류)

    • 400 (Bad Request) : 잘못된 문법으로 서버가 요청을 이해할 수 없음을 의미
    • 401 (Unauthorized) : 클라이언트는 요청한 응답을 받기 위해서는 반드시 스스로를 인증해야 함
    • 403 (Forbidden) : 클라이언트는 콘텐츠에 접근할 권리를 가지고 있지 않음, 401과 달리 403은 클라이언트가 누구인지는 알 고 있음
    • 404 (Not Found) : 서버는 요청받은 리소스를 찾을 수 없음
    • 429 (Too Many Requests) : 사용자가 지정된 시간에 너무 많은 요청을 했음
  • 5xx (서버 측 오류)

    • 500 (Internal Server Error) : 웹 사이트 서버에 문제가 있음을 의미
    • 503 (Service Unavailable) : 서버가 요청을 처리할 준비가 되지 않았다는 뜻, 유지보수를 위해 작동이 중단되거나 과부하가 걸린 서버

헤더 정보

내용이 많으니 MDN을 참조하자.

0개의 댓글