학습 목표
- HTTP의 특징인 Stateless를 설명할 수 있다.
- Request, Response 구조에 대해 설명할 수 있다.
- HTTP request method의 종류를 알고 서로의 차이점을 설명할 수 있다.
- 대표적인 Status code의 종류를 설명할 수 있다.
HyperText Transfer Protocol
물리적으로 떨어진 컴퓨터끼리 HTML파일을 주고 받을 수 있게 하는 소통방식, 약속
HyperText
: HTML로 만든 파일
HTML(HyperText Markup Language)
: 문서와 문서가 링크로 연결되도록 하는 태그로 구성된 언어.
: 웹페이지를 만들기 위해서 웹브라우저 위에서 동작하는 언어.
Transfer
웹사이트를 널리 알리고 다른 사람들과 공유하기 위해서 다른 컴퓨터에게 전송한다.
보내는 주체
와받는 주체
Protocol
협약, 통신 규약
http라는 약속
의 조항들을 알아보겠습니다
HTTP 통신의 핵심은 요청과 응답이다.
방향 | 행동 | 예시 |
---|---|---|
보내는 주체 → 받는 주체 | 요청 | 사용자가 유튜브 영상 링크 누른다 |
받는 주체 → 요청 보낸 주체 | 응답 | 유튜브가 영상 보낸다 |
State(상태) + less(없음)
각각의 HTTP 통신(요청/응답)은 독립적이다
쿠키, 세션, 로컬스토리지
같은 기술이 만들어졌다.HTTP 요청: 프론트엔드(클라이언트) 에서 백엔드(서버)로 보내는 메세지
Start Line: 요청의 첫번째 줄. 이 시작 줄도 세 부분으로 구성되어있습니다.
HTTP Method: 해당 요청이 의도한 액션을 정의하는 부분. 주로 GET, POST, DELETE가 많이 쓰임
Request target: 해당 request가 전송되는 목표 url
HTTP Version: 말 그대로 사용되는 HTTP 버전을 뜻한다. 주로 1.1 버전이 널리 쓰임
GET /login HTTP/1.1
# 해석: GET 메소드로 login 이라는 요청 타겟에 HTTP 1.1 버전으로 요청을 보내겠다!
Headers: 해당 요청에 대한 추가 정보(메타 데이터)를 담고있는 부분입니다.
Key: Value 값으로 되어있다 (JavaScript의 객체, Python의 딕셔너리 형태라고 보면 된다)
Host: 요청을 보내는 목표(타겟)의 주소. 즉, 요청을 보내는 웹사이트의 기본 주소가 된다. (ex. www.apple.co.kr)
User-Agent: 요청을 보내는 클라이언트의 대한 정보 (ex. chrome, firefox, safari, explorer)
Content-Type: 해당 요청이 보내는 메세지 body의 타입 (ex. application/json)
Content-Length: body 내용의 길이
Authorization: 회원의 인증/인가를 처리하기 위해 로그인 토큰을 Authroization 에 담는다
Headers: {
Host:
User-Agent:
Content-Type:
Content-Length:
Authorization:
}
Body: 해당 요청의 실제 내용입니다. 주로 Body를 사용하는 메소드는 POST 입니다.
ex) 로그인 시에 서버에 보낼 요청의 내용
Body: {
"user_email":"wecode@gmail.com" "user_password": "wecode"
}
회원가입할 때 처음 토큰을 생성하고
그 토큰으로 계속 인증한다(바뀌지 않는다!)
토큰에 기한은 없다. 쿠키에는 기한이 있다.
Status Line: 응답의 상태 줄입니다.
HTTP/1.1 404 Not Found
# 해석: HTTP 1.1 버전으로 응답하고 있는데, 프론트엔드에서 보낸 요청(ex. 로그인 시도)에 대해서
# 유저의 정보를 찾을 수 없기 때문에(Not Found) 404 상태 메세지를 보낸다.
HTTP/1.1 200 SUCCESS
# 해석: HTTP 1.1 버전으로 응답하고 있는데, 프론트엔드에서 보낸 요청에 대해서 성공했기 때문에
# 200 상태 메세지를 보낸다.
Body: {
"message": "SUCCESS"
"token": "kldiduajsadm@9df0asmzm" (암호화된 유저의 정보)
}
다음 예시는 애플 홈페이지에서 쇼핑을 하는 상황을 가정합니다
메소드들은 프론트엔드(클라이언트)의 입장
에서 요청
의 의도가 담긴 것입니다!
어떤 데이터를 서버로 부터 받아(GET)올 때 주로 사용하는 메소드
👉🏻 장바구니에 담은 제품을 조회한다
데이터를 생성 / 수정 할 때 주로 사용되는 메소드
대부분 요청에 body가 포함되어 보내진다
👉🏻 장바구니에 맘에 드는 상품을 담는다
특정 데이터를 서버에서 삭제 요청을 보낼때 쓰는 메소드
👉 장바구니에서 제품을 삭제한다
분류 | status code | 뜻 |
---|---|---|
Success | 200:OK | 문제없이 요청에 대한 처리가 백엔드 서버에서 이루어짐 |
Success | 201:Created | 무언가가 잘 생성되었을 때(Successfully Created) |
Success | 204:No Content | 요청이 성공했으며 제공할 응답메세지가 없음, |
DELETE 메소드의 요청으로 삭제를 성공해 응답할 컨텐츠 없음 | ||
Client Error | 400:Bad Request | 해당 요청이 잘못됨, 요청의 Body에 보내는 내용이 잘못됨 |
ex) 전화번호 보내기: Body에 숫자가 아닌 문자열 주소가 담겼을 때 | ||
Client Error | 401:Unauthorized | 유저가 해당 요청을 진행하려면 먼저 로그인을 하거나 회원가입이 필요함 |
ex) wish list, 좋아요 기능은 회원이 아니면 요청x | ||
Client Error | 403:Forbidden | 해당 요청에 대한 권한이 없음. 접근 불가능한 정보에 접근 시 |
Client Error | 404:Not Found | 요청된 URI 가 존재하지 않는다 |
Server Error | 500:Internal Server Error | 서버에서 에러 났을 때 |