티스토리 뷰
3. HTTP 메시지
메시지의 흐름
HTTP 메시지
- HTTP 애플리케이션 간 주고받은 데이터의 블록
- 클라이언트, 서버, 프록시 사이를 흐른다.
- 메세지의 방향 - 인바운드, 아웃바운드, 업스트림, 다운스트림
- 메시지는 원 서버 방향을 인바운드로 하여 송신된다.
아웃바운드 - 트랜잭션 방향을 표현하기 위한 용어, 클라이언트로 향하는 방향
인바운드 - 트랜잭션 방향을 표현하기 위한 용어, 서버로 향하는 방향 - 다운스트림으로 흐르는 메세지
발송자와 수신자의 대한 것
업스트림, 다운스트림
발송자 → 수신자 형식이 다운스트림, 반대는 없다.
메시지는 항상 다운 스트림으로 흐른다.
메시지의 각 부분
메시지 구조
시작줄 - 어떤 메세지인지 서술, 아스키 문자열
헤더 - 속성, 아스키 문자열
본문 - 데이터를 포함할 수도, 비어있을 수도 있음
메시지 문법
더보기
요청 메시지
<메서드> <요청 URL> <버전>
<헤더>
<엔티티 본문>
더보기
응답 메시지
<버전> <상태 코드> <사유 구절>
<헤더>
<엔티티 본문>
메서드 - 서버가 리소스에 대해 수행해주길 바라는 동작
요청 URL -리소스를 지칭하는 URL
버전 - HTTP 버전
상태 코드 - 요청의 결과를 나타내는 세 자리의 숫자
사유 구절 - 상태 코드를 설명해주는 짧은 문구
헤더 - 이름 : 값 CRLF 순으로 나타나는 0개 이상의 값
엔티티 본문 - 임의의 데이터 블록
시작줄
HTTP 요청 메시지의 시작줄 - 무엇을 해야하는지
HTTP 응답 메시지의 시작줄 - 무슨일이 일어났는지
요청줄
- 서버에게 리소스에 대해 무언가를 해달라고 요청
- 일어나야 하는 동작의 메서드, 동작 대상을 지칭하는 URL, HTTP 버전
응답줄
- 수행 결과에 대한 상태 정보와 결과 데이터를 클라이언트에 전달
- HTTP 버전, 상태 코드, 상태 설명하는 사유 구절이 포함
메서드 - 서버에게 무엇을 해야 하는지 말해준다.
상태 코드 - 클라이언트에게 무엇이 일어났는지 말해준다.
헤더
헤더는 간단하다. 요청, 응답에 대한 부가 정보를 제공하는 역할을 한다.
예를 들어 응답 메세지 헤더에서 Content-type: image/gif는 컨텐츠가 이미지 타입인 것을 제공한다.
엔티티 본문
선턱적인 부분, HTTP 메시지의 화물
메서드
- HTTP 버전에 맞는 메서드를 사용해야 한다.
- GET - 서버에게 리소스를 달라고 요청하기 위해 사용된다.
- HEAD - GET과 일치하지만, 응답으로 헤더만 돌려준다.
- PUT - 서버에 문서를 작성한다. 존재하지 않으면 작성하고, 존재하면 교체한다.
- POST - 서버에 입력 데이터를 전송, 대게 HTML 폼을 지원하기 위해 사용된다.
- DELETE - 서버에게 요청 URL로 지정한 리소스를 삭제할 것을 요청한다.
상태 코드
- 100 - 199 : 정보성 상태 코드
- 200 - 299 : 성공 상태 코드
- 서버는 대응하는 성공을 의미하는 상태 코드를 보낸다.
- 200 OK, 201 Created, 202 Accepted
- 300 - 399 : 리다이렉션 상태 코드
- 클라이언트가 관심있어 하는 리소스에 대해 다른 위치를 사용하라고 전달
- 다른 위치를 Location 헤더로 보내수 있다.
- 400 - 499 : 클라이언트 에러 상태 코드
- 클라이언트의 잘못된 요청에 따른 에러
- 400 Bad Request, 403 Forbidden, 404 Not Fount
- 500 -599 : 서버 에러 상태 코드
- 서버 자체에서 에러가 발생하는 경우
- 클라이언트가 서버에 제한이 걸리거나 보조 구성요소에 발생한 에러일 수 있음
헤더
메서드와 함께 클라이언트와 서버가 무엇을 하는지 결정하기 위해 사용된다.
- 일반 헤더
- 클라이언트, 서버 모두 사용한다.
- 일반 정보 헤더
- 요청 헤더
- 요청 메시지를 위한 헤더
- 서버에게 받고자 하는 데이터의 타입과 같은 부가 정보를 제공한다.
- 요청 정보 헤더, Accept 관련 헤더, 조건부 요청 헤더, 요청 보안 헤더, 프록시 요청 헤더
- 응답 헤더
- 응답 메시지를 위한 헤더
- 클라이언트에게 부가 정보를 제공
- 응답 정보 헤더, 협상 헤더, 응답 보안 헤더
- 엔티티 헤더
- 요청, 응답 양쪽 모두 사용한다.
- 엔티티와 그것의 내용물에 대한, 개체의 타입부터 광범위한 정보를 제공
- 엔티티 정보 헤더, 콘텐츠 헤더, 엔티티 캐싱 헤더