HTTP 완벽가이드 3장 HTTP 메세지

어겐어갠·2022년 5월 24일
0

3장 HTTP 메세지

http 메세지 = 소포
http = 배달원

3.1 메세지의 흐름

메세지의 방향을 나타내는 용어들이 있다
인바운드, 아웃바운드, 업스트림, 다운스트림

3.1.1 메세지는 원서버 방향을 인바운드로 하여 송신된다.

클라이언트 -> 서버 = 인바운드
클라이언트 <- 서버 = 아웃바운드

3.1.2 다운스트림으로 흐르는 메세지

모든 메시지는 다운스트림으로 흐른다

3.2 메시지의 각 부분

메시지는 시작줄, 헤더블록, 본문 세 가지로 구분되어있으며, 본문은 비엉있을 수도 있다.

3.2.1 메시지 문법

메시지는 요청, 응답으로 분료되는데
요청은 웹 서버의 어떤 동작을 요구한다.
응답은 요청의 결과를 클라이언트에게 돌려준다.

시작줄 / 헤더 / 본문 으로 구성되어있다.

요청 메세지

<메서드> <요청 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 는 서버의 실패를 의미한다.

사유 구절
사람이 이해할 수 있게 설명한 문구.
오로지 사람에게 읽히기 위한 목적.
응답 시작줄의 마지막 구성 요소이다.

3.2.3 헤더

시작줄 다음에 온다.
0개에서 다수개까지 있다.

헤더의 분류
1. 일반 헤더
요청과 응답 양쪽에 모두 가능하다.
2. 요청 헤더
요청에 대한 부가 정보를 제공한다.
3. 응답 헤더
응답에 대한 부가 정보를 제공한다.
4. Entity 헤더
본문 크기와 콘텐츠, 혹은 리소스 그 자체를 서술한다.
5. 확장 헤더
명세에 정의되지 않은 헤더

3.2.4 엔터티 본문

http 메세지의 화물

3.3메서드

모든 서버가 모든 메서드를 구현하지는 않는다.
메서드는 대부분 제한적으로 사용될 것이다.
또한 사이트나 서버마다 다를 수 있다.

3.3.1 안전한 메서드

단순 조회만 하는 메서드는 그 결과로 서버에서 어떠한 일도 발생하지 않기 때문에 안전하다고 할 수 있다.

3.3.2 GET

서버에게 리소스를 달라고 요청하기 위해 쓰인다.

3.3.3 HEAD

GET처럼 행동하지만 서버의 응답으로는 헤더만을 주고 본문이 존재하지 않는다.

3.3.4 PUT

서버에 문서를 쓴다.
새 문서를 만들거나 교체하는 메서드
멱등하다. (결과가 일관성을 가진다.)

3.3.5 POST

서버에 입력 데이터를 전송하기 위해 설계되었다.

3.3.6 TRACE

클라이언트에게 자신의 요청이 서버에 도달했을 때의 결과를 보여준다.
주로 진단을 위해 사용된다.
프락시나 다른 애플리케이션의 요청이 일으키는 영향을 확인할 때 사용된다.

3.3.7 OPTIONS

웹 서버에게 여러가지 종류의 지원범위(지원되는 메서드)를 물어본다.

3.3.8 DELETE

리소스의 삭제를 요청한다.
서버는 이 요청을 무시할 수 있다.

3.39 확장 메서드

명세에 정의되지 ㅇ낳는 새로운 메서드로 이에 대해서는 관용적으로 받아들이는게 좋다.

3.4 상태 코드

클라이언트에게 트랜잭션을 이해할 쉬운 방법을 제공한다.

100 ~ 199 는 정보성 상태 코드

100 Continue

  • 요청의 시작 부분이 일부가 받아 들여 졌으며, 클라이언트는 나머지를 계속 이어서 보내야 함을 의미
    101 Switching Protocols
  • 클라이언트가 Upgrade 헤더에 나열한 것 중 하나로 서버가 프로토콜을 바꾸었음을 의미

200 ~ 299 는 성공 상태 코드

200 OK

  • 요청은 정상이고, 엔티티 본문은 요청된 리소스를 포함
    201 Created
  • 서버 리소스를 생성 요청(예: POST)에 대한 응답
    204 No Content
    응답 메시지는 헤더와 상태줄을 포함하지만 엔티티 본문은 포함않음

300 ~ 399 는 리다이렉션 상태 코드

300 Multiple Choices

  • 클라이언트가 동시에 여러 리소스를 가리키는 URL을 요청했으면 그 리소스의 목록과 함께 반환
    301 Moved Permanently
  • 요청한 URL이 옮겨졌을 때 사용
    304 Not Modified
  • GET과 함께 수정 일에 대한 조건부 헤더를 보냈고 최근 수정되지 않은 경우 사용

400 ~ 499 는 클라이언트 에러 상태 코드

400 Bad Request

  • 클라이언트가 잘못 된 요청을 보냄
    401 Unauthorized
  • 인증이 필요
    403 Forbidden
  • 요청이 서버에 의해 거부 되었음
    404 Not Found
  • 서버가 요청한 URL을 찾을 수 없음

500 ~ 599 는 서버 에러 상태 코드

500 Internal Server Error

  • 서버가 요청을 처리할 수 없게 만드는 에러는 만났을 때 사용
    502 Bad Gateway
  • Gateway로 부터 올바른 응답을 받지 못했을 때 사용
    503 Service Unavailable
  • 현재는 서버가 요청을 처리해 줄 수 없지만 나중에는 가능

3.5 헤더

클라이언트와 서버가 무엇을 하는지 결정하기 위해 사용

일반 헤더

클라이언트, 서버 양쪽 모두 사용
아주 기본적인 정보를 제공

요청 헤더

클라이언트가 서버에게 부가정보(받고자하는 데이터의 타입 등)를 알려줌

  • Accept 관련 헤더 : 서버에게 자신의 선호, 능력, 원치 않는 것들을 알려줌
  • 조건부 요청 헤더
    요청에 몇몇 제약(IF)를 걸어 특정 상황에만 응답을 받을 수 있음
  • 요청 보안 헤더
    http가 가지고있는 자체적인 인증요구/응답 체계를 이용하는 헤더
  • 프락시 요청 헤더
    프락시의 기능을 돕기 위한 헤더

응답 헤더

클라이언트에게 정보를 제공하기 위한 헤더

  • 협상 헤더
    여러가지 선택지를 제공(여러 언어 중 택 1 등)
  • 응답 보안 헤더

엔터티 헤더

엔터티 본문에 대한 헤더

  • 콘텐츠 헤더
    엔터티의 콘텐츠에 대한 구체적인 정보 제공
  • 엔터티 캐싱 헤더
    언제 어쩧게 캐시가 되어야하는지에 대한 지시자 제공
profile
음그래

0개의 댓글