목적
1. HTTP 정의
2. HTTP 특징
3. Request, Response 구조
4. HTTP Request Methods 종류(자주 쓰는 3가지)
5. Response Status Codes
HyperText Transfer Protocol. W3(World Wide Web) 상에서 HTML과 같은 정보(resource)를 주고 받을 수 있는 통신규약(protocol)이다. 이는 모든 데이터 교환의 기초이며 client-server protocol이기도 하다.
주로 HTML문서를 주고 받는데 쓴다. 주로 TCP(Transmission Control protocol, 전송조종규약)를 사용하고 HTTP/3부터는 UDP(User Datagram Protocol)을 사용하며, 80번 포트를 사용한다.
※ 용어
클라이언트와 서버 사이의 소통은 요청과 응답을 특징으로 한다.
예를 들어 '웃는 리트리버 사진1'이 보고 싶다고 서버에 요청을 보내면 서버는 해당 이미지를 찾아 응답을 보낸다.
request는 'startline/ headers/ body'로 구성되어 있다.
response는 'stateline/ headers/ body'로 구성되어 있다.
state(상태)+less(없다)는 의미이다. 각각의 HTTP 통신은 독립적이기 때문에 이전의 HTTP 통신을 알지 못 한다. 즉, 좋아요를 누를려면 로그인을 해야지만 좋아요를 누를 수 있는데 이전에 로그인을 한 사실을 HTTP 통신에서는 알지 못한다. 때문에 이전에 로그인을 했다는 정보를 함께 담아서 요청을 보내야한다. 이를 위해 로그인 토큰 또는 브라우저의 쿠키, 세션 및 로컬 저장소같은 기술이 필요하다.
GET
, POST
, DELETE
가 주로 사용 되며 그 외에 OPTIONS
나 HEAD
등도 있다. 예시 : GET /login HTTP/1.1
HTTP method : GET
Request target : /Login
HTTP Version : HTTP/1.1
Headers : {
HOST: 요청을 보내는 목표(target)의 주소. 즉, 요청을 보내는 웹사이트의 기본 주소가 된다. (www.apple.co.kr)
User-Agent: 요청을 보내는 클라이언트에 대한 정보 (ex. chrome, firefox, ...)
Content-Type: 해당 요청이 보내는 메세지 body 타입(ex. application/json)
Content-Length: body 내용의 길이
Authorization: 회원의 인증/인가를 처리하기 위해 로그인 토큰을 Authroization에 담는다.
}
Body: {
"user_email": "didi@gmail.com"
"user_password": "wecode"
}
HTTP/1.1 404 Not Found
: HTTP 1.1 버전으로 응답. request에 대해서 정보를 찾을 수 없어 404 메세지를 보냄
HTTP/1.1 200 SUCCESS
: HTTP 1.1 버전으로 응답. request에 response 성공해 200 메세지와 성공 메세지 보냄
Headers: {
Server: 응답을 보내는 서버 정보
}
Body: {
"message": "SUCCESS"
"token": "dkfeighsd@ghe" (암호화된 유저 정보)
}
(축약된 요청 메세지)
GET /shop/bag HTTP/1.1
Header: {
"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 끝
(축양된 요청 메세지)
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
}
} // body 끝
(축약된 요청 메세지)
Headers: {
"HOST": "https://www.apple.com/kr"
"Authroization": "kldiduajsadm@9df0asmzm" (유저가 본인임을 증명하는 로그인 인증 토큰)
}
Body: {
productId: 30
}
(축약된 응답 메시지)
HTTP/1.1 201 SUCCESS
Body: {
"message": "productId 30 DELETED"
} // body 끝
주로 볼 수 있는 상태 코드들
요청에 대한 처리가 성공적일 때 볼 수 있는 코드
post 등 무언가 잘 생성되거나 수정되었을 때 볼 수 있는 코드
해당 요청이 잘 못 되었을 때 볼 수 있는 코드
주로 body 내용이 잘 못 되었을 때 볼 수 있다.
전화번호는 숫자로 되어야 하는데 문자열이 서버로 보내지거나 할 때
승인되지 않은 요청일 경우
로그인을 해야 요청가능한 기능인 경우 로그인(인증)을 요구하는 코드
해당 요청에 대한 권한이 없다는 의미
권한을 얻으면 요청가능하다.
유료회원만 사용 가능한 기능을 무료회원이 볼려고 할 때 볼 수 있는 코드
요청한 URL을 찾을 수 없다는 코드. 홈페이지의 다른 페이지는 열린다.
서버 자체 에러일 경우 볼 수 있는 에러. 백엔드의 문제이다.