HTTP 구조 및 핵심 요소
- HTTP (HyperText Transfer Protocol)
하이퍼텍스트(HTML) 문서를 교환하기 위해 만들어진 protocol(통신 규약). 즉 웹상에서 네트워크로 서버끼리 통신을 할때 어떠한 형식으로 서로 통신을 하자고 규정해 놓은 "통신 형식" 혹은 "통신 구조" 라고 보면 된다. 프론트앤드 서버와 클라이언트간의 통신에 사용되며 백앤드와 프론트앤드 서버간에의 통신에도 사용된다. HTTP는 TCP/IP 기반으로 되어있다.
- HTTP 핵심 요소
HTTP 통신 방식
HTTP 기본적으로 요청/응답 (request/response) 구조로 되어있다.
(클라이언트가 HTTP request를 서버에 보내면 서버는 HTTP response를 보내는 구조)
클라이언트와 서버의 든 통신이 요청과 응답으로 이루어 진다.
HTTP는 Stateless 이다.(상태를 저장하지 않는 다는 뜻)
즉, 요청이 오면 그에 응답을 할뿐, 여러 요청/응답 끼리 연결되어 있지 않다는 뜻이다. 클라이언트가 요청을 보내고 응답을 받은후, 조금 있다 다시 요청을 보낼때, 전에 보낸 요청/응답에 대해 알지 못한다는 뜻이다.
그래서 만일 여러 요청과응답 의 진행과정이나 데이터가 필요할때는 쿠키나 세션 등등을 사용하게 된다.
HTTP Request 구조
- start line > 말 그대로 HTTP request의 첫 라인
(start line도 3부분으로 구성되어 있음)
1) HTTP Method
해당 request가 의도한 action을 정의하는 부분.
HTTP Methods에는 GET, POST, PUT, DELETE, OPTIONS 등이 있다.
주로 GET 과 POST과 쓰임.
2) Request target
해당 request가 전송되는 목표 uri (예를 들어 /login)
3) HTTP Version
말 그대로 사용되는 HTTP 버젼. 버젼에는 1.0, 1.1, 2.0 등이 있다.
- headers
해당 request에 대한 추가 정보(addtional information)를 담고 있는 부분.
예를 들어, request 메세지 body의 총 길이 (Content-Length) 등.
Key:Value 값으로 되어있다 (: 이 사용됨).
HOST: google.com => Key = HOST, Value = google.com
- body
해당 reqeust의 실제 메세지/내용. Body가 없는 request도 많다.
예를 들어, GET request들은 대부분 body가 없는 경우가 많음.
HTTP Response 구조
- Response도 request와 마찬가지로 크게 3부분으로 구성되어 있다.
(Status line, Headers ,Body)
Status Line
Response의 상태를 간략하게 나타내주는 부분이며 3부분으로 구성되어 있다.
1) HTTP 버젼
2) Status code: 응답 상태를 나타내는 코드. 숫자로 되어 있는 코드.
ex) 200
3) Status text: 응답 상태를 간략하게 설명해주는 부분.
ex) "Not Found"
Headers
Response의 headers와 동일하다. 다만 response에서만 사용되는 header 값들이 있다.예를 들어, User-Agent 대신에 Server 헤더가 사용된다.
Body
Response의 body와 일반적으로 동일하다.
Request와 마찬가지로 모든 response가 body가 있지는 않다. 데이터를 전송할 필요가 없을경우 body가 비어있게 된다.
자주 쓰이는 HTTP Methods
- GET
이름 그대로 어떠한 데이터를 서버로 부터 받아(GET)올때 주로 사용하는 Method이며 데이터 생성/수정/삭제 없이 받아오기만 할때 사용된다.
주로 데이터를 받아올때 사용되기 때문에 request에 body를 안 보내는 경우가 많다.
- POST
데이터를 생성/수정/삭제 할때 주로 사용되는 Method.
데이터를 생성 및 수정 할때 많이 사용하기 때문에 대부분의 경우 requst body가 포함되서 보내진다.
자주 쓰이는 HTTP Status Code
- 200 OK
가장 자주 보게되는 status code.
문제없이 다 잘 실행 되었을때 보내는 코드.
- 400 Bad Request
해당 요청이 잘못된 요청일대 보내는 코드.
주로 요청에 포함된 input 값들이 잘못된 값들이 보내졌을때 사용되는 코드.
예를 들어, 전화번호를 보내야 되는데 text가 보내졌을때 등등.
- 401 Unauthorized
유저가 해당 요청을 진행 할려면 먼저 로그인을 하거나 회원 가입을 하거나 등등이 필요하다는것을 나타내려 할때 쓰이는 코드.
- 403 Forbidden
유저가 해당 요청에 대한 권한이 없다는 뜻.
예를 들어, 오직 과금을 한 유저만 볼 수 있는 데이터를 요청 했을때 등.
- 404 Not Found
요청된 uri가 존재 하지 않는다는 뜻
- 409 Conflict
서버의 현재 상태와 요청이 충돌했음을 나타낸다.
- 500 Internal Server Error
서버에서 에러가 났을때 사용되는 코드.
API 개발을 하는 백앤드 개발자들이 싫어하는 코드.