HTTP 완벽 가이드 1-3. HTTP 메시지 ①
📘 HTTP 완벽 가이드 읽고 정리하기 🐿︎
HTTP 메시지
-
HTTP 애플리케이션 간에 주고받은 데이터의 블록들
-
메시지의 내용과 의미를 설명하는 텍스트 메타 정보로 시작, 선택적으로 그 다음에 데이터가 올 수 있음
-
메시지는 원 서버 방향을 인바운드로 해 송신됨
-
인바운드 : 메시지가 원 서버로 향하는 것 (서버 방향)
-
아웃바운드 : 모든 처리가 끝난 뒤에 메시지가 사용자 에이전트로 돌아오는 것(사용자 에이전트 방향)
-
-
요청, 응답 메시지에 관계 없이 다운스트림으로 흐름
-
메시지는
시작줄, 헤더, 본문
세 부분으로 이루어짐-
시작줄 : 어떤 메시지인지 서술
-
헤더 : 속성을 담음
-
본문 : 데이터를 담음, 아예 없을 수도 있음
-
메시지 문법
-
모든 HTTP 메시지는 요청 메시지 or 응답 메시지로 구분
-
-
요청 메시지
<메서드><요청URL><버전> <헤더> <엔터티 본문>
-
응답 메시지
<버전><상태코드><사유구절> <헤더> <엔터티 본문>
-
메서드
-
클라이언트 측에서 서버가 리소스에 대해 수행해주길 바라는 동작
-
‘GET’, ‘POST’, ‘HEAD’와 같이 한 단어로 되어 있음
요청 URL
- 요청 대상이 되는 리소스를 지칭하는 완전한 URL 혹은 URL의 경로 구성요소
버전
-
메시지에서 사용중인 HTTP의 버전
-
형식 :
<HTTP>/<메이저>,<마이너>
(메이저와 마이너는 모두 정수)
상태 코드
-
요청 중에 무엇이 일어났는지 설명하는 세 자리 숫자
-
각 코드의 첫 번째 자릿수는 상태의 일반적인 분류(‘성공’, ‘에러’, ..)를 나타냄
사유 구절(reason phrase)
-
숫자로 된 상태 코드의 의미를 사람이 이해할 수 있게 설명해주는 짧은 문구
-
상태 코드 이후부터 줄바꿈 문자열까지
헤더
-
이름, 콜론(:), 선택적인 공백, 값, CRLF 순서
-
빈 줄(CRLF)로 끝나 헤더 목록의 끝과 엔터티 본문의 시작을 표시
엔터티 본문(entity phrase)
-
가공되지 않은 데이터를 담고 있음
-
엔터티 본문이 없는 경우 메시지는 CRLF로 끝남
시작줄
-
모든 HTTP 메시지는 시작줄로 시작
-
요청 메시지의 시작줄은 무엇을 해야 하는지, 응답 메시지의 시작줄은 무슨 일이 일어났는지를 말해줌
요청줄
-
요청 메시지의 시작줄이나 요청줄에는 서버에서 어떤 동작이 일어나야 하는지 설명해주는 메서드와 그 동작에 대한 대상을 지칭하는 요청 URL이 들어있음
-
클라이언트가 어떤 HTTP 버전으로 말하고 있는지 서버에게 알려주는 HTTP 버전 포함
-
모든 필드는 공백으로 구분
응답줄
-
수행 결과에 대한 상태 정보와 결과 데이터를 클라이언트에게 돌려줌
-
응답 메시지의 시작줄이나 응답줄에는 응답 메시지에서 쓰인 HTTP의 버전, 숫자로 된 상태 코드, 수행 상태에 대해 설명해주는 텍스트로 된 사유 구절이 들어있음
-
모든 필드는 공백으로 구분
메서드
- 요청의 시작줄은 메서드로 시작, 서버에게 무엇을 해야 하는지 말해줌
메서드 | 설명 | 메시지 본문 |
---|---|---|
GET | 서버에서 어떤 문서를 가져옴 | X |
HEAD | 서버에서 어떤 문서에 대해 헤더만 가져옴 | X |
POST | 서버가 처리해야 할 데이터를 보냄 | O |
PUT | 서버에 요청 메시지의 본문을 저장 | O |
TRACE | 메시지가 프락시를 거쳐 서버에 도달하는 과정을 추적 | X |
OPTIONS | 서버가 어떤 메서드를 수행할 수 있는지 확인 | X |
DELETE | 서버에서 문서를 제거 | X |
상태 코드
-
클라이언트에게 무엇이 일어났는지 말해줌
-
각 응답 메시지의 시작줄에 담겨 반환
-
숫자로 된 코드와 문자열로 된 사유 구절 두 형태 모두로 반환
전체범위 | 정의된범위 | 분류 |
---|---|---|
100-199 | 100-101 | 정보 |
200-299 | 200-206 | 성공 |
300-399 | 300-305 | 리다이렉션 |
400-499 | 400-415 | 클라이언트 에러 |
500-599 | 500-505 | 서버 에러 |
버전 번호
-
어떤 애플리케이션이 지원하는 가장 높은 HTTP 버전
-
HTTP/x.y
형식으로 요청, 응답 메시지 양쪽 모두에 기술됨
헤더
-
시작줄 다음에는 0개~여러개의 헤더 존재
-
헤더 필드는 요청과 응답 메시지에 추가 정보를 더함
-
헤더와 메서드는 클라이언트와 서버가 무엇을 하는지 결정하기 위해 함께 사용됨
-
기본적으로
이름: 값
쌍의 목록 (ex) Content-length: 19) -
특정 종류의 메시지에만 사용할 수 있는 헤더 / 일반 목적으로 사용할 수 있는 헤더 / 응답과 요청 메시지 양쪽 모두에서 정보를 제공하는 헤더로 나뉨
-
헤더 분류
-
일반 헤더 : 요청과 응답 양쪽 모두에 나타날 수 있음
-
요청 헤더 : 요청에 대한 부가 정보 제공
-
응답 헤더 : 응답에 대한 부가 정보 제공
-
Entity 헤더 : 본문 크기와 콘텐츠 또는 리소스 그 자체를 서술
-
확장 헤더 : 명세에 정의되지 않은 새로운 헤더
-
일반 헤더
-
General Headers
-
메시지에 대한 기본적인 정보 제공
-
클라이언트와 서버 양쪽 모두가 사용
-
- 일반 캐시 헤더 : 매번 원 서버로부터 객체를 가져오는 대신 로컬 복사본으로 캐시할 수 있도록 해주는 헤더
요청 헤더
-
Request Headers
-
요청 메시지를 위한 헤더
-
서버에게 클라이언트가 받고자 하는 데이터의 타입이 무엇인지와 같은 부가 정보를 제공
-
-
Accept 관련 헤더 : 클라이언트가 서버에게 자신이 어떠한 데이터 타입만을 허용하는지 말해줌
-
조건부 요청 헤더 : 서버에게 요청에 응답하기 전에 먼저 조건이 참인지 확인하게 하는 제약을 포함시킬 수 있음
-
요청 보안 헤더 : 요청하는 클라이언트가 어느 정도의 리소스에 접근하기 전에 자신을 인증하게 함으로써 트랜잭션을 더 안전하게 만들기 위한 간단한 인증 요구/응답 체계
-
프락시 요청 헤더
-
응답 헤더
-
Response Headers
-
클라이언트에게 부가 정보를 제공하기 위한 자신만의 헤더를 가짐
-
-
협상 헤더 : 클라이언트가 선호하는 표현 요청
-
응답 보안 헤더
-
엔터티 헤더
-
Entity Headers
-
엔터티 본문에 대한 헤더
-
엔터티와 본문에 들어있는 데이터 타입, 주어진 리소스에 대해 요청할 수 있는 유효한 메서드 등 광범위한 정보 제공
-
-
콘텐츠 헤더 : 엔터티의 콘텐츠에 대한 구체적인 정보 제공
-
엔터티 캐싱 헤더 : 언제 어떻게 캐시가 되어야 하는지에 대한 지시자를 제공
-
확장 헤더
-
Extension Headers
-
HTTP 명세에 추가되지 않은 비표준 헤더