처음에 HTTP라는 개념을 정확히 알지 못한 채로 프로젝트를 진행해 왔었습니다. 프론트/백 간에 소통을 하면서 어려움을 느끼고 정확히 파악하고자 글을 작성하게 되었습니다.
HTTP란?
- HTTP(Hyper Text Transfer Protocol) 인터넷에서 데이터를 주고받을 수 있는 프로토콜입니다. 통신하는 규칙이라고 보면 됩니다.
HTTP에는 두 가지 특징이 있습니다.
첫 번째는 바로
Request
와Response
입니다.
(Request)
에는
HTTP Method
: 해당 요청이 의도한 액션을 정의하는 부분. 주로 GET, POST, DELETE가 많이 쓰입니다.Request target
: 해당 request가 전송되는 목표 urlHTTP Version
: 말 그대로 사용되는 HTTP 버전을 뜻합니다.
- 예시) "GET /products/1 HTTP/1.1"
GET method로 /products/1 이라는 요청 타겟에 HTTP/1.1 버전으로 요청을 보내겠다.
Headers : 해당 요청에 대한 추가 정보(메타 데이터)를 담고있는 부분이다.
Key
: Value 값으로 되어있습니다. (JavaScript의 객체, Python의 딕셔너리 형태라고 보면 됩니다.)Host
: 요청을 보내는 목표 (Target)의 주소. 즉, 요청을 보내는 웹사이트의 기본 주소가 됩니다. (ex. www.apple.co.kr)User-Agent
: 요청을 보내는 클라이언트의 대한 정보 (chrome, firefox, safari, explorer)Content-Type
: 해당 요청이 보내는 메세지 body의 타입 (application/json)Content-Length
: body 내용의 길이Authorization
: 회원의 인증/인가를 처리하기 위해 로그인 토큰을 Authroization 에 담습니다.
- ex)
Headers : {
Host :
User-Agent :
Content-Type :
Content-Length :
Authorization :
}
Body : 해당 요청의 실제 내용
- 주로 Body를 사용하는 메소드는 POST입니다.
- 로그인 시에 서버에 보낼 요청의 내용
- ex)
Body: {
"user_email": "jun.choi@gmail.com"
"user_password": "wecode"
}
(Response)
에는Status Line : 응답의 상태줄 입니다.
- 응답은 요청에 대한 처리상태를 클라이언트에게 알려주면서 내용을 시작합니다. 응답의 Status Line 도 세 부분으로 구성됩니다.
HTTP Version
: 요청의 HTTP버전과 동일Status Code
: 응답 메세지의 상태 코드Status Text
: 응답 메세지의 상태를 간략하게 설명해주는 텍스트
- ex) HTTP/1.1 404 Not Found
HTTP/1.1버전으로 응답을 하고 있지만 요청에 대해서 정보를 찾지 못했다.
Headers : 요청의 헤더와 동일하다. 응답의 추가 정보(메타 데이터)를 담고있는 부분입니다.
- 다만, 응답에서만 사용되는 헤더의 정보들이 있습니다.
(요청하는 브라우저의 정보가 담긴 User-Agent 대신, Server 헤더가 사용됩니다.)
Body : 요청의 Body와 일반적으로 동일합니다.
- 요청의 메소드에 따라 Body가 항상 존재하지 않듯이 응답도 응답의 형태에 따라 데이터를 전송할 필요가 없는 경우엔 Body가 없을 수도 있습니다.
- 가장 많이 사용되는 Body 의 데이터 타입은 JSON(JavaScript Object Notation) 입니다.
- 로그인 요청에 대해 성공했을 때 응답의 내용
- ex)
Body: {
"message": "SUCCESS"
"token": “welruqweriewquyrouwyqeoir” (암호화된 유저의 정보)
}
- 절대 잊어서는 안될 특징이 바로 이것입니다. 통신의 요청/응답은 독립적이기 때문에 이전의 통신 내용(요청/응답)을 알지 못합니다. 그래서 매 통신 마다 필요한 모든 정보를 담아서 요청을 보내야합니다. 만약 그 정보를 처리했고, 그 정보를 계속 가지고 있고 싶다면 토큰 또는 쿠기, 세션, 로컬스토리기 같은 기술이 필요합니다.