과제용 개념정리는 맨 하단에 있습니다.
HyperText Transfer Protocol의 약자
무슨 소리죠?
한마디로 컴퓨터끼리 HTML 파일을 어떻게 주고받을지를 정하는 규약
- Request / Response (요청과 응답)
- Stateless
사람들끼리 커뮤니케이션을 하려면 기본적으로 요청 / 응답의 단계가 필요합니다.
그럼 컴퓨터와 소통하려면 어떻게 해야할까요?
똑같이 요청 / 응답을 거쳐야 합니다!
다만 사람끼리의 대화가 사람대 사람으로 이루어지면, HTTP를 통한 컴퓨터와의 대화는 사람이 내리는 명령과 서버로 이루어진다고 볼 수 있겠네요.
HTTP 요청은 프론트엔드(클라이언트) 에서 백엔드(서버)에 일(데이터 처리)을 시작하게 하기 위해 보내는 메세지다.
둘다 구조적으로는 같은 구조를 가지고 있으나, 들어가는 내용이 조금씩 다릅니다.
Request의 구조
1. Start Line : 요청의 첫번째 줄에. 이 시작 줄도 세 부분으로 구성되어있음
1. HTTP Method: 해당 요청이 의도한 액션을 정의하는 부분. 주로 GET, POST, DELETE가 많이 쓰임
2. Request target: 해당 request가 전송되는 목표 url
3. HTTP Version: 말 그대로 사용되는 HTTP 버전을 뜻한다. 주로 1.1 버전이 널리 쓰임
{Key: Value}값으로 되어있다 (JavaScript의 객체, Python의 딕셔너리 형태라고 보면 된다)
자주 사용되는 Headers 의 정보에는 다음이 있다
Headers: {
Host: 요청을 보내는 목표(타겟)의 주소. 즉, 요청을 보내는 웹사이트의 기본 주소가 된다
(ex. www.apple.co.kr)
User-Agent: 요청을 보내는 클라이언트의 대한 정보 (ex. chrome, firefox, safari, ~~explorer~~)
Content-Type: 해당 요청이 보내는 메세지 body의 타입 (ex. application/json)
Content-Length: body 내용의 길이
Authorization: 회원의 인증/인가를 처리하기 위해 로그인 토큰을 Authroization 에 담는다
}
ex) 로그인 시에 서버에 보낼 요청의 내용**
Body : {
"user_email": "jun.choi@gmail.com"
"user_password": "wecode"
}
GET /login HTTP/1.1
해석: GET 메소드로 login 이라는 요청 타겟에 HTTP 1.1 버전으로 요청을 보내겠다!
Response의 구조
1. Status Line: 응답의 상태 줄. 응답은 요청에 대한 처리상태를 클라이언트에게 알려주면서 내용을 시작함.
1. HTTP Version: 요청의 HTTP버전과 동일
2. Status Code: 응답 메세지의 상태 코드
3. 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: 요청의 헤더와 동일, 응답의 추가 정보(메타 데이터)를 담고있는 부분. 다만, 응답에서만 사용되는 헤더의 정보들이 있다. (ex. 요청하는 브라우저의 정보가 담긴 User-Agent 대신, Server 헤더가 사용된다.)
Body: 요청의 Body와 일반적으로 동일. 요청의 메소드에 따라 Body가 항상 존재하지 않듯이 응답도 응답의 형태에 따라 데이터를 전송할 필요가 없는 경우엔 Body가 없을 수도 있다. 가장 많이 사용되는 Body 의 데이터 타입은 JSON(JavaScript Object Notation) 이다.
ex) 로그인 요청에 대해 성공했을 때 응답의 내용
Body: {
"message": "SUCCESS"
"token": "kldiduajsadm@9df0asmzm" (암호화된 유저의 정보)
}
State + less와의 합성으로서 직역하면 '상태 없음'을 나타냅니다.
HTTP 통신은 각자 독립적이라는 특성을 가지고 있습니다. 때문에 이전의 통신에 대한 내용을 알지 못합니다.
공용 오피스에 설치된 폰부스를 아시나요? 굉장히 방음이 잘 되어있어서, 폰부스에 들어간 사람의 통화 내용은 우리가 듣지 못합니다. HTTP도 이것과 같다고 생각합니다.
때문에 HTTP에서는 매 페이지마다 그곳에 필요한 정보를 보내줘야 하는데, 우리가 웹을 사용한 경험상 전혀 정보를 새로 보내준다는 느낌은 아니었죠?
여기에는 로컬 스토리지나 세션,브라우저 내의 쿠키를 이용하는 등 또다른 기술 덕에 가능한 것입니다.
자주 사용되는 HTTP 통신 메소드들입니다.
- 이름 그대로 어떤 데이터를 서버로 부터 받아(GET)올 때 주로 사용하는 메소드.데이터를 받아오기만 할 때 사용된다.
- 가장 간단하고 많이 사용되는 HTTP 메소드
- 데이터를 생성, 수정할 때 주로 사용되는 메소드
- 데이터를 생성 및 수정할 때 많이 사용되기 때문에 대부분의 경우 요청에 body가 포함되서 보내진다.
- 특정 데이터를 서버에서 삭제 요청을 보낼때 쓰는 메소드.
- 문제없이 요청에 대한 처리가 백엔드 서버에서 이루어지고 나서 오는 응답코드
- 무언가가 잘 생성되었을 때에(Successfully Created) 오는 Status Code
- 대게 POST 메소드의 요청에 따라 백엔드 서버에 데이터가 잘 생성 또는 수정 되었을 때에 보내는 코드
- 해당 요청이 잘못되었을 때 보내는 Status Code
- 주로 요청의 Body에 보내는 내용이 잘못되었을 때 사용되는 코드
ex) 전화번호를 보내야 하는데 숫자가 아닌 문자열의 주소가 대신 Body에 담겼을 경우
- 유저가 해당 요청을 진행하려면 먼저 로그인을 하거나 회원가입이 필요하다는 의미
ex) wish list, 좋아요 기능은 회원이 아니면 요청을 보낼 수 없음
- 유저가 해당 요청에 대한 권한이 없다는 뜻
- 접근 불가능한 정보에 접근했을 경우
ex) 오직 유료회원만 접근할 수 있는 데이터를 요청 했을 때
- 요청된 페이지나 파일을 찾을 수 없을 때
제 벨로그 타이틀입니다! 작게나마 사용자들을 낚아보고싶었던 마음...
- 서버에서 에러가 났을 때의 Status Code
모든 종류의 HTTP Response Status Codes MDN
HTTP Request/Response : 컴퓨터의 소통 방법으로, 일반적으로 사람이 하는 커뮤니케이션과 동일하게 요청과 응답의 과정으로 나뉜다. 둘다 start line,header,body의 구조를 가지고 있다.
HTTP Request Methods :데이터를 서버로 받아오는 GET 메소드, 데이터를 서버로 보내는 POST 메소드, 서버의 데이터를 삭제 요청하는 DELETE 메소드
HTTP Status Code 200번대 코드는 통신이 정상적으로 작동할때 나오며, 400번대는 요청이 잘못될 때 나오는 오류 코드, 500번대는 서버 쪽에서 잘못된 오류 코드다.