Hypertext Transfer Protocol (HTTP)
is an application-layer protocol for transmitting hypermedia documents, such as HTML. It was designed for communication between web browsers and web servers, but it can also be used for other purposes. HTTP follows a classical client-server mode, with a client opening a connection to make a request, then waiting until it receives a response. HTTP is a stateless protocol, meaning that the server does not keep any data (state) between two requests.
HyperText - HTML의 HT와 같다. 즉 HyperText는 HTML파일을 의미한다.
Transfer - 전송
Protocol - 규약
👉 따라서 HTTP란 컴퓨터들끼리 HTML파일을 주고받을 수 있도록 하는 소통방식 또는 약속이다.
메세지로 요청하고 응답받는다.
서버가 두개의 요청에 대한 데이터(state)를 보존하고 있지 않다는 뜻이다. 따라서 매 통신마다 필요한 모든 정보를 담아서 요청을 보내야 한다. 이번통신에서 필요한 내용중에 이전 통신에서 이미 보내준 정보가 있다고 하더라도, 이번통신에서는 그걸 알지 못한다는 의미이다.
따라서 만약 여러번 통신의 과정을 통해 연속된 데이터 처리가 필요한 경우(ex. 온라인 쇼핑몰에서 로그인 후 장바구니 기능)를 위해 로그인 토큰, 브라우저의 쿠키, 세션, 로컬스토리지 같은 기술이 필요해서 만들어지게 되었다.
👉 Start Line + Headers + Body
GET /login HTTP/1.1
# 해석: GET 메소드로 login 이라는 요청 타겟에 HTTP 1.1 버전으로 요청을 보내겠다!
Headers: 해당 요청에 대한 추가 정보(메타 데이터)를 담고있는 부분이다.
Headers: {
Host:
User-Agent:
Content-Type:
Content-Length:
Authorization:
}
Body: 해당 요청의 실제 내용
Body: {
"user_email": "minju1009@gmail.com"
"user_password": "hellominju"
}
👉 Status Line + Headers + Body
HTTP Version / Status Code / Status Text
HTTP/1.1 404 Not Found
# 해석: HTTP 1.1 버전으로 응답하고 있는데, 프론트엔드에서 보낸 요청(ex. 로그인 시도)에 대해서
# 유저의 정보를 찾을 수 없기 때문에(Not Found) 404 상태 메세지를 보낸다.
HTTP/1.1 200 SUCCESS
# 해석: HTTP 1.1 버전으로 응답하고 있는데, 프론트엔드에서 보낸 요청에 대해서 성공했기 때문에
# 200 상태 메세지를 보낸다.
Headers: 요청의 헤더와 동일하다. 응답의 추가 정보(메타 데이터)를 담고있는 부분이다.
Body: 요청의 Body와 일반적으로 동일하다.
Body: {
"message": "SUCCESS"
"token": "kldiduajsadm@9df0asmzm" (암호화된 유저의 정보)
}
⛔️ 클라이언트 입장에서 생각해야 한다.
👉🏻장바구니에 담은 제품을 조회한다
// (축약된 요청 메세지)
GET /shop/bag HTTP/1.1
Headers: {
"HOST": "https://www.apple.com/kr",
"Authroization": "kldiduajsadm@9df0asmzm" (유저가 본인임을 증명할 수 있는 인증/인가 토큰)
}
// (축약된 응답 메시지)
HTTP/1.1 200 SUCCESS
Body: {
"message": "SUCCESS",
"carts": [
{
"productId": 10
"name": "Pro Display XDR - Nano-texture 글래스"
"price": "₩7,899,000"
"quantity": 1
},
{
"productId": 20
"name": "Mac Pro"
"price": "₩73,376,000"
"quantity": 2
}
]
}
Body에 보내는 데이터가 들어있으니, Body 내용을 주의깊게 살펴볼 것
👉🏻장바구니에 맘에 드는 상품을 담는다
// (축약된 요청 메세지)
POST /shop/bag HTTP/1.1
Headers: {
"HOST": "https://www.apple.com/kr"
"Authroization": "kldiduajsadm@9df0asmzm" (유저가 본인임을 증명할 수 있는 인증/인가 토큰)
}
Body: {
product: {
"productId": 30
"name": "12.9형 iPad Pro Wi-Fi + Cellular 128GB"
"color": "스페이스 그레이"
"price": "₩1,499,000"
"quantity": 1
}
}
// (축약된 응답 메시지)
HTTP/1.1 201 SUCCESS
Body: {
"message": "SUCCESSFULLY CARTS UPDATED"
}
👉🏻장바구니에서 제품을 삭제한다
// (축약된 요청 메세지)
DELETE /shop/bag HTTP/1.1
Headers: {
"HOST": "https://www.apple.com/kr"
"Authroization": "kldiduajsadm@9df0asmzm" (유저가 본인임을 증명할 수 있는 인증/인가 토큰)
}
Body: {
productId: 30
}
// (축약된 응답 메시지)
HTTP/1.1 201 SUCCESS
Body: {
"message": "productId 30 DELETED"
}
분류 | 응답코드 | 설명 |
---|---|---|
Success | 200 : OK | 문제 없이 요청사항 처리 완료 |
Success | 201 : Created | 보통 POST 메소드의 요청에 따라 백엔드 서버에 데이터가 잘 생성/수정 되었을 때 보내는 코드 |
Client Error | 400 : Bad Request | 주로 요청의 Body에 보내는 내용이 잘못 되었을 때.number(번호)를 보내야 하는데 text(주소)보낸 경우 |
Client Error | 401 : Unauthorized | 유저가 해당 요청을 진행하려면 먼저 로그인/회원가입을 해야한다는 의미. |
Client Error | 403 : Forbidden | 유저가 해당 요청에 대한 권한이 없음. 접근 불가능한 정보에 접근할 경우. ex) 유료회원만 접근할 수 있는 데이터 요청시 |
Client Error | 404 : Not Found | 서버가 요청받은 리소스를 찾을 수 없음, 너가 요청한 URL 여기 없다!! |
Server Error | 500 : Internal Server Error | 서버에러시 → 요청을 처리하는 과정에서 서버가 예상하지 못한 상황에 놓였다 |