HTTP 요청 응답 메세지 - MoonGyeongHyeon/Keyword_Study GitHub Wiki

HTTP 요청/응답 메세지

Request

Http 요청 메세지의 스펙은 다음과 같다.

Request-Line
*(( general-header | request-header | entity-header ) CRLF)
CRLF
[ message-body ]

첫 줄은 Request-Line이 오고 이어서 여러 종류의 헤더가 나온 다음, 줄바꿈을 두 번 한 뒤, 메세지 몸체가 오게 된다.

  • CR: Carriage Return, 커서를 다음 줄로 이동시킨다.
  • LF: Line Feed, 커서를 라인의 맨 앞부분으로 이동시킨다.

Request Line

Request Line 의 스펙은 Method SP Request-URI SP HTTP-Version CRLF 으로 정의하는데, 보통은 다음과 같은 형태를 띤다.

GET /index.html HTTP/1.1

  • SP: Space, 공백

맨 앞의 GET은 Request Method 로, 총 OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT 8가지가 있다.

  • OPTIONS

    • 요청 URI에서 사용할 수 있는 메소드를 물어본다.

    • 웹서버 측의 제공 메소드에 대한 질의로, 서버 측 응답 메세지의 Http 헤더 항목 중 Allow: GET, POST, HEAD 와 같은 형태로 오게 된다.

  • GET

    • 요청 URI의 정보를 가져온다.
    • 리소스를 얻기 위한 목적으로 사용한다. (리소스는 HTML 페이지, 이미지, 파일 등을 의미.)
  • HEAD

    • GET 요청에서 몸체(body)는 제외하고 헤더만 가져온다.
    • GET과는 비슷하지만, 실제 문서를 요청하는 게 아닌, 문서 정보만을 요청한다. 이에 따라 서버 측은 응답 메세지로 몸체(body)를 제외한 헤더만 보낸다.
  • POST

    • 요청 URI에 리소스의 새로운 정보를 보낸다.
    • 보내고자 하는 정보를 Http 몸체(body)에 담아 서버로 전송한다.
    • 만약 요청 정보로 인해 결과 페이지가 새롭게 작성된 경우라면 Http 헤더 항목 중 Location: 에 새로운 URI 주소 정보를 포함시켜 응답한다.
  • PUT

    • 요청 URI에 저장될 정보를 보낸다.
    • 주로 리소스를 갱신하기 위해 사용한다.
    • POST처럼 정보를 서버로 제출하는 것으로 형식은 동일하지만, 갱신(Update) 위주이다.
    • 이에 의해 갱신된 내용에 대한 주소 정보를 서버 측에서 따로 Location 으로 보내주지 않는다. 즉, 서버 측은 클라이언트 측이 제시한 URI를 그대로 사용하는 것으로 간주한다.
    • 하지만 이것은 클라이언트 측이 서버 측 구현에 관여하게 되는 것이므로, 통상적으로 POST를 더 많이 사용한다.
  • DELETE

    • 요청 URI의 리소스를 삭제한다.
  • TRACE

    • 보낸 메세지를 다시 돌려보낸다.
    • 요청 리소스가 수신되는 경로를 보여준다.
  • CONNECT

    • 프록시에 사용하기 위해 예약된 메소드이다.

요청 메소드 다음으론 요청 URI가 온다. (/index.html 부분) 절대경로가 올수도, 상대경로가 올수도 있다.

마지막에는 Http 버전을 의미한다. 현재 HTTP/1.0HTTP/1.1 이 있다. 그리고 그 뒤에는 줄바꿈(CRLF)가 있어야 한다.

Header

Request-Line 다음에는 Header 가 위치하는데, 앞에서 본 스펙대로 general-header, request-header, entity-header 3가지 종류가 있고 요청에 따라 필요한 헤더만 사용한다. 헤더는 name : content의 형식이 되는데 content 부분은 각 헤더에 대한 상세 내용을 확인해 보면 되는데 각 값들은 공백이나 탭으로 구분될 수 있고 각 헤더는 CRLF로 구분된다.

Header에 대한 자세한 내용

Response

응답 메세지는 다음과 같이 정의되어 있다.

Status-Line
*(( general-header | response-header | entity-header ) CRLF)
CRLF
[ message-body ]

첫 줄이 요청라인 대신 상태라인인 것과 요청 헤더 대신 응답 헤더가 들어간 것만 빼면 요청 메세지와 동일한 형태이다.

Status Line

Status Line은 HTTP-Version SP Status-Code SP Reason-Phrase CRLF 로 정의되어 있고 보통 다음과 같이 생겼다.

HTTP/1.1 200 OK

HTTP 버전은 요청 부분과 동일하고 상태 코드(Status Code)는 흔히 보는 세 자리의 숫자로 된 상태를 나타내는 코드로, 각 번호대 별로 다음과 같은 의미를 가지고 있다.

  • 1xx: 정보성
  • 2xx: 성공
  • 3xx: 리다이렉트
  • 4xx: 클라이언트 오류
  • 5xx: 서버 오류

더보기

Headers

요청 메세지의 헤더 부분과 유사한데, 다른 부분은 request-header 대신 response-header 가 존재한다는 것이다.

Header에 대한 자세한 내용