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.0
과 HTTP/1.1
이 있다. 그리고 그 뒤에는 줄바꿈(CRLF)가 있어야 한다.
Header
Request-Line 다음에는 Header
가 위치하는데, 앞에서 본 스펙대로 general-header, request-header, entity-header
3가지 종류가 있고 요청에 따라 필요한 헤더만 사용한다. 헤더는 name : content의 형식이 되는데 content 부분은 각 헤더에 대한 상세 내용을 확인해 보면 되는데 각 값들은 공백이나 탭으로 구분될 수 있고 각 헤더는 CRLF로 구분된다.
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
가 존재한다는 것이다.