http 메세지 = 소포
http = 배달원
메세지의 방향을 나타내는 용어들이 있다
인바운드, 아웃바운드, 업스트림, 다운스트림
클라이언트 -> 서버 = 인바운드
클라이언트 <- 서버 = 아웃바운드
모든 메시지는 다운스트림으로 흐른다
메시지는 시작줄, 헤더블록, 본문 세 가지로 구분되어있으며, 본문은 비엉있을 수도 있다.
메시지는 요청, 응답으로 분료되는데
요청은 웹 서버의 어떤 동작을 요구한다.
응답은 요청의 결과를 클라이언트에게 돌려준다.
시작줄 / 헤더 / 본문 으로 구성되어있다.
요청 메세지
<메서드> <요청 URL> <버전>
<헤더>
빈줄_
<엔티티 본문>
응답 메세지
<버전> <상태 코드> <사유 구절>
<헤더>
빈줄_
<엔티티 본문>
메서드
서버가 리소스에 대해 수행해주길 바라는 동작
ex GET, POST, HEAD
요청의 시작줄의 맨 처음 나온다.
http 녕세는 공통 요청 메서드의 집합을 정의한다.
요청 URL
요청 대상인 리소스를 지칭하는 경로
버전
http 버전
응답과 요청 양쪽 모두에 기술된다.
http/2.22 는 http 2.3보다 크다.
(2.22 vs 2.03)
상태코드
요청에 대한 결과를 설명하는 숫자
클라이언트에게 무엇이 일어났는지 설명한다.
200 ~ 299 는 성공을
300 ~ 399 는 리소스의 이동을
400 ~ 499 는 클라이언트의 잘못된 요청을
500 ~ 599 는 서버의 실패를 의미한다.
사유 구절
사람이 이해할 수 있게 설명한 문구.
오로지 사람에게 읽히기 위한 목적.
응답 시작줄의 마지막 구성 요소이다.
시작줄 다음에 온다.
0개에서 다수개까지 있다.
헤더의 분류
1. 일반 헤더
요청과 응답 양쪽에 모두 가능하다.
2. 요청 헤더
요청에 대한 부가 정보를 제공한다.
3. 응답 헤더
응답에 대한 부가 정보를 제공한다.
4. Entity 헤더
본문 크기와 콘텐츠, 혹은 리소스 그 자체를 서술한다.
5. 확장 헤더
명세에 정의되지 않은 헤더
http 메세지의 화물
모든 서버가 모든 메서드를 구현하지는 않는다.
메서드는 대부분 제한적으로 사용될 것이다.
또한 사이트나 서버마다 다를 수 있다.
단순 조회만 하는 메서드는 그 결과로 서버에서 어떠한 일도 발생하지 않기 때문에 안전하다고 할 수 있다.
서버에게 리소스를 달라고 요청하기 위해 쓰인다.
GET처럼 행동하지만 서버의 응답으로는 헤더만을 주고 본문이 존재하지 않는다.
서버에 문서를 쓴다.
새 문서를 만들거나 교체하는 메서드
멱등하다. (결과가 일관성을 가진다.)
서버에 입력 데이터를 전송하기 위해 설계되었다.
클라이언트에게 자신의 요청이 서버에 도달했을 때의 결과를 보여준다.
주로 진단을 위해 사용된다.
프락시나 다른 애플리케이션의 요청이 일으키는 영향을 확인할 때 사용된다.
웹 서버에게 여러가지 종류의 지원범위(지원되는 메서드)를 물어본다.
리소스의 삭제를 요청한다.
서버는 이 요청을 무시할 수 있다.
명세에 정의되지 ㅇ낳는 새로운 메서드로 이에 대해서는 관용적으로 받아들이는게 좋다.
클라이언트에게 트랜잭션을 이해할 쉬운 방법을 제공한다.
100 ~ 199 는 정보성 상태 코드
100 Continue
200 ~ 299 는 성공 상태 코드
200 OK
300 ~ 399 는 리다이렉션 상태 코드
300 Multiple Choices
400 ~ 499 는 클라이언트 에러 상태 코드
400 Bad Request
500 ~ 599 는 서버 에러 상태 코드
500 Internal Server Error
클라이언트와 서버가 무엇을 하는지 결정하기 위해 사용
클라이언트, 서버 양쪽 모두 사용
아주 기본적인 정보를 제공
클라이언트가 서버에게 부가정보(받고자하는 데이터의 타입 등)를 알려줌
클라이언트에게 정보를 제공하기 위한 헤더
엔터티 본문에 대한 헤더