HTTP 메시지

반응형
728x90
반응형

메시지란?

HTTP 메시지는 HTTP 애플리케이션 간에 주고받은 데이터의 블록이다. HTTP는 원서버 방향을 인바운드로 하여 송신된다.

 

인바운드 : 메시지가 원 서버로 향하는 것
아웃바운드 : 모든 처리가 끝난 후, 메시지가 사용자에게 돌아오는 것

 

결과적으로 클라이언트->서버가 인바운드이고, 서버에서 처리 후 클라이언트로 다시 돌아갈때의 서버->클라이언트가 아웃바운드이다. HTTP 메시지는 단순한 데이터 구조화된 블록이며 각 메시지는 클라이언트로부터의 요청이나 서버로부터의 응답 중 하나를 포함한다. 메시지의 구조는 시작줄, 헤더블록, 본문 이다.

 

시작줄 : 이것이 어떤 메시지인가?
헤더블록 : 속성
본문 : 데이터 또는 빈값

 

시작줄과 헤더는 줄 단위로 분리된 아스키 문자열이다. 본문은 단순히 선택적인 데이터 덩어리이다. 시작줄과 헤더는 필수로 값이 들어가지만, 본문은 텍스트나 이진 데이터를 포함할 수 있고 그냥 빈 값일 수도 있다. 헤더는 본문에 대한 정보를 가지고있을 수 있다.

 

 

 

시작줄

모든 HTTP 메시지의 시작은 시작줄이다.

 

요청메시지 : 무엇을 해야 하는가?
서버에게 리소스에 대해 무언가를 해달라고 부탁한다. 따라서 서버에서 어떤 동작이 일어나야 하는지 설명해주는 메소드와 그 동작에 대한 대상을 지칭하는 요청 URL이 들어있고, 클라이언트가 어떤 HTTP 버전인지 서버에게 알려주는 HTTP 버전도 포함되어있다. 요청의 시작줄은 메소드(GET/POST 등)으로 시작한다.
응답메시지: 무슨 일이 일어났는가?
수행 결과에 대한 상태 정보와 서버에서 내려주는 결과 데이터를 클라이언트에게 돌려준다. 응답 메시지의 시작줄 혹은 응답줄에는 응답 메시지에서 쓰인 HTTP의 버전, 상태코드, 수행 상태에 대해 설명해주는 텍스트로 된 사유 구절이 들어있다.여기서 사유거절이란, HTTP 상태코드와 1:1 매칭이 되는데, HTTP 상태코드가 200이라면 사유 구절은 “OK”이다.

 

 

 

헤더

HTTP 헤더는 요청 및 응답 메시지에 추가 정보를 더해준다. 헤더를 이해하기 위해 예를 들어 설명해보자.

Date : Mon, 5 Oct 1996 … => 서버가 응답을 만들어낸 시간
Content-length : 2000 => 2000바이트의 데이터를 포함한 엔터티 본문
Content-type : image/jpeg => 엔터티 본문은 JPEG 이미지이다.
Accept : image/jpeg, image/gif, text/html : 클라이언트가 받아들일 수 있는것을 나열한다.

 

 

 

메소드 종류

1) GET

가장 흔한 메소드로, 주로 서버에게 리소스를 요청할때 쓰인다.

 

2) HEAD

GET처럼 행동하지만 서버는 응답으로 헤더만을 돌려준다. 엔터티 본문은 빈값이다. 리소스를 가져오지 않고도 헤더(타입 등)만을 알아낼 수 있고, 응답의 상태코드를 통해 개체의 존재 여부를 확인할 수 있다. 헤더를 확인하여 리소스의 변경이 일어났는지 검사할 수 있다.

 

3) PUT

서버가 요청의 본문을 가지고 요청 URL의 이름대로 새 문서를 만들거나 이미 존재한다면 본문을 사용해서 수정하는 것이다. 콘텐츠를 변경해주기 때문에 많은 웹서버에서 인증을 요구한다.

 

4) POST

서버에 입력 데이터를 전송하기 위해 설계되었다. HTML 폼을 지원하기 위해 흔히 사용되며, 해당 폼의 데이터들을 서버로 전송하고 서버는 이를 모아서 처리한다.

 

5) TRACE

클라이언트가 어떤 요청을 할때, 그 요청은 방화벽, 프락시, 게이트웨이 등의 애플리케이션을 거쳐야할 수 있는데 클라이언트에게 자신의 요청이 서버에 도달했을때 어떻게 보이게 되는지 알려준다. TRACE 요청은 목적지 서버에서 루프백(loopback) 진단을 시작하는데, 요청 전송의 맞막 단계에 있는 서버는 자신이 받은 요청 메시지를 본문에 넣어 응답으로 되돌려준다. 클라이어느는 자신과 목적지 서버 사이에 있는 모든 HTTP 애플리케이션의 요청/응답을 따라가면서 자신이 보낸 메시지가 그대로인지, 아니면 어떻게 변경되었는지 확인할 수 있다. 따라서 진단을 위해 사용한다.

 

6) OPTIONS

서버에게 특정 리소스에 대해 어떤 메서드가 지원되는지 물어볼 수 있다.

 

7) DELETE

서버에게 요청 URL로 지정한 리소스를 삭제할 것을 요청한다.

 

 

 

HTTP 상태코드

1) 200 / OK

요청이 정상적이고, 엔터티 본문은 요청된 리소스를 포함하고 있다.

 

2) 301 / Moved Permanently

요청한 URL이 옮겨졌을때 사용한다. 응답은 Location 헤더에 현재 리소스가 존재하고 있는 URL을 포함해야한다.

 

3) 400 / BadRequest

클라이언트가 잘못된 요청을 보냈다.

 

4) 403 / Forbidden

요청이 서버에 의해 거부되었다.

 

5) 404 / Not Found

서버가 요청한 URL을 찾을 수 없다. 잘못된 URL일 가능성이 높다.

 

6) 401 / Unauthorized

리소스를 얻기전에 클라이언트에게 스스로를 인증하라고 요구하는 내용의 응답을 적절한 헤더와 함께 반환한다. 따라서 권한이 없을 경우이다.

 

7) 500 / Internal Server Error

서버에서 에러가 발생한 경우이다.

 

8) 502 / Bad Gateway

서버가 자신의 부모 게이트웨이에 접속하는 것이 불가능한 경우이다. 따라서 프락시나 게이트웨이가 요청할 다음 서버로부터 가짜 응답을 받았을때 발생한다.

 

9) 503 / Service Unavailable

현재는 서버가 요청을 처리해줄 수 없지만 나중에는 가능함을 의미하고자 할때 사용한다.

 

 

반응형

'Coding > HTTP' 카테고리의 다른 글

TCP 커넥션 관리  (0) 2019.06.22
HTTP 기초개념 알아보기  (0) 2019.06.22
URL과 리소스  (0) 2019.06.22
HTTP의 기본 인증  (0) 2019.06.22
웹 서버(Web Server)의 모든 것  (0) 2019.06.22

Designed by JB FACTORY