HTTP 메세지는 HTTP 어플리케이션 간에 주고받은 데이터들의 블록이다.
메세지 -> 서버 (인바운드)
서버 -> 클라이언트(아웃바운드)
● HTTP 메세지는 강물과 같이 흐른다. 요청 메세지, 응답 메세지냐에 관계없이
● 모든 메세지는 다운스트림으로 흐른다.
HTTP 메세지는 단순한, 데이터의 구조화된 블록이다.
요청 메세지는 웹 서버에 어떤 동작을 요구한다.
응답 메세지는 요청의 결과를 클라이언트에 돌려준다.
요소
요청 메세지의 시작줄은 무엇을 해야 하는지 말해준다.
응답 메세지의 시작줄은 무슨 일이 일어났는지 말해준다.
요청줄
요청 메세지는 서버에게 리소스에 대해 무언가를 해달하고 부탁한다.
서버에서 어떤 동작이 일어나야 하는지 설명해 주는 메서드와 동작 대상을 지칭하는 요청 URL이 있다.
응답줄
응답 메세지는 수행 결과에 대한 상태 정보와 결과 데이터를 클라이언트에 돌려준다.
메서드
요청의 시작줄은 메서드로 시작하며, 서버에게 무엇을 해야하는지 말해준다.
상태 코드
상태 코드는 클라이언트에게 무슨 일이 있어났는지 말해준다.
사유 구절
사유 구절은 응답 시작줄의 마지막 구성요소이다. 상태코드에 대한 글로 된 설명을 제공한다.
HTTP 헤더 필드는 요청과 응답 메세지에 추가 정보를 더한다.
* 분류
* 일반헤더 - 요청과 응답 양쪽에 모두 나타날수 있음
* 요청 헤더 - 요청에 대한 부가 정보를 제공
* 응답 헤더 - 응답에 대하 부가 정보를 제공
* Entity 헤더 - 본문 크기와 콘텐츠, 혹은 리소스 그 자체를 서술
* 확장 헤더 - 명세에 정의되지 않은 새로운 헤더
HTTP 메세지의 세번째 부분은 선택적인 엔티티 본문이다.
엔티티 본문은 HTTP 메세지의 화물이다.
여러 종류의 데이터를 실어나른다.
● HTTP는 안전한 메서드라 불리는 메서드의 집합을 정의한다.
● GET , HEAD 메세지는 안전하다 -> 서버에 어떤 작용도 없음을 의미하기 때문
● 안전한 메서드가 서버에 작용을 유발하지 않는 다는 보장은 없기에
사용자에게 그 사실을 알려주는 HTTP 애플리케이션을 만드는것이 좋다.
● 서버에게 리소스를 달라고 요청하기 위해 사용된다.
● HEAD 메서드는 GET 처럼 행동하지만, 서버는 응답으로 헤더만을 돌려준다.
● 서버 개발자는 반드시 반환되는 헤더가 GET으로 얻는 것과 일치함을 보장해야 한다.
● GET 메세지가 서버로부터 문서를 읽어 들이는데 반해 PUT 메서드는 서버에 문서를 쓴다.
● PUT은 컨텐츠가 변경할 수 있게 하므로,사용자에게 비밀번호와 로그인을 요구한다.
● POST 메세지는 서버에 입력 데이터를 전송하기 위해 설계되었다.
● 서버가 처리할 데이터를 담아 보낸다.
● 클라이언트가 요청을 할때, 그 요청은 방화벽,프락시 등의 애플리케이션을 통과할 수 있다.
● TRACE 메서드는 클라이언트에게 요청이 서버에 도달했을때 어떻게 보이는지 알려준다.
● OPTIONS 메서드는 웹 서버에게 여러가지 종류의 지원 범위에 대해 물어본다.
● DELETE 메서드는 서버에게 요청 URL로 지정한 리소스를 삭제 할 것을 요청한다.
● 서버가 클라이언트에게 알리지 않고 요청을 무시할수 있기에, 삭제를 보장하지는 않는다.
● 상태 코드는 클라이언트에게 그들의 트랜잭션을 이해 할 수 있는 쉬운 방법을 제공한다.
● 요소
● 100~199 : 정보성 상태 코드
● 200~299 : 성공 상태 코드
● 300~399 : 리다이렉션 상태 코드
● 400~499 : 클라이언트 에러 상태 코드
● 500~599 : 서버 에러 상태 코드
● 헤더와 메서드는 클라이언트와 서버가 무엇을 하는지 결정하기 위해 사용된다.
● 요소
● 일반 헤더 : 메세지에 대한 기본적인 정보를 제공 한다.(클라이언트 서버 모두 사용)
● 요청 헤더 : 요청 메세지를 위한 헤더, 클라이언트가 받고자 하는 타입과 같은 부가 정보를 제공
● 응답 헤더 : 응답 메세지는 클라이언트에게 정보를 제공하기 위한 자신만의 헤더를 갖고 있음
● 엔티티 헤더 : 엔티티 본문에 대한 헤더, 본문에 들어있는 데이터 타입을 말해줌
● 확장 헤더