HTTP 메시지 21.05.01
3-Tier Architecture
- request : client => server => data base
- response : data base => server => client
실제로 sever는 resource를 전달해주는 역할만 한다.
HTTP 메시지
HTTP 메시지 : 서버와 클라이언트 간에 데이터가 교환되는 방식. 2가지 타입(request, response)이 있다.
HTTP 메시지 구조
HTTP/1 프레임
- request 구조
// [시작줄]
POST / HTTP/ 1.1
// HTTP 메소드(GET, PUT, POST, HEAD, OPTIONS 등) / 프로토콜 || 포트 || 도메인 / 버전
// [헤더]
// -Request Header : 요청 내용 구체화, 컨텍스트 제공, 제약 사항 등
Host : localhost: 3000
User-agent: ...
Accept-Language: ...
Accept-Encoding: ...
// -General Header
connection: ...
Uprgrade-insecure-Requests:
// -Entity Header : 요청 본문에 적용. 요청 내에 본문이 없는 경우(GET, HEAD, DELETE, OPTIONS 등) Entity Header는 전송되지 않는다.
Content-Type : ...
Content-length : ...
// [본문(Body)]
DATA
// 모든 요청에 본문이 들어가지는 않는다. GET, HEAD, DELETE , OPTIONS처럼 리소스를 가져오는 요청은 보통 본문이 필요가 없다. 일부 요청은 업데이트를 하기 위해 서버에 데이터를 전송한다. 보통 (HTML 폼 데이터를 포함하는) POST 요청일 경우.
- response 구조
// [상태 줄]
HTTP/1.1 404 Not Found. // 실패
HTTP/1.1 200 Ok. // 성공
// 프로토콜 버전 / 상태 코드 / 상태 텍스트
// [헤더]
// [본문(Body)]
모든 응답에 본문이 들어가지는 않는다. 201, 204과 같은 상태 코드를 가진 응답에는 보통 본문이 없다.
HTTP/2 프레임
HTTP/1.x 버전은 성능상의 결함을 가지고 있다. HTTP/2에서는 데이터와 헤더프레임이 분리되었기 때문에 헤더 압축 가능 등 더 효율적.
HTTP의 무상태성(stateless) : HTTP는 특정 상태를 담고 있지 않으며, 이전 요청이나 다음 요청을 기억하지 않음
MIME 타입
클라이언트에게 전송된 문서의 다양성을 알려주기 위한 메커니즘. (일종의 확장자와 비슷)
- syntax & ex
타입/서브타입
[텍스트 타입] text/plain : 텍스트 파일에 대한 기본값(서브타입이 없는 경우) text/html : html 컨텐츠 text/css : css 컨텐츠
[이미지 타입] image/jpeg image/png
[오디오 & 비디오 타입] audio/mpeg audio/ogg audio/* video/mp4 application/octet-stream : 이진 파일을 위한 기본값
[멀티파트 타입] : 멀티파트 타입은 일반적으로 다른 MIME 타입들을 지닌 개별적인 파트들로 나누어지는 문서의 카테고리 multipart/form-data : 브라우저에서 서버로 HTML Form의 내용을 전송 시 사용 multipart/byteranges : 브라우저로 회신하는 부분적인 응답 전송의 컨텍스트 내에서 사용
포스트맨 사용 방법
브라우저 : 서버에 HTTP GET 요청을 보낼 수 있다. (주소창을 통해 URL 요청시 기본적으로 GET 요청을 보냄)
GET 이외의 요청을 하려면 fetch를 이용해 코드를 작성해야한 한다. 이런 문제를 해결하기 위해 HTTP API 요청을 테스트하는 포스트맨을 사용할 수 있다.
이미 API 서버가 주어져 있는 경우 : HTTP에서는 API 서버의 endpoint가 URL로 주어진다. API 문서를 잘 읽어야한다. (엔드포인트, HTTP 메소드, URL, 요청 형식, 응답 형식 확인)
- POST 요청 시 : body - json - raw를 선택하고 API 문서의 요청 형식에 따라 body에 작성하여 보내야한다.