HTTP는 HyperText Transfer Protocol의 약자이다.
컴퓨터들끼리 HTML 파일을 주고받을 수 있도록 하는 소통방식 또는 약속이다.
특징으로 크게 두 가지가 있다.
HTTP
통신의 핵심은 요청과 응답이다.
HTTP
의 세번째 키워드 Transfer
을 하려면, 전송은 보내는 주체와 받는 주체가 있어야 한다.
보내는 주체는 받는 주체에게 요청을 보내고, 받는 주체는 요청을 보낸 주체에게 응답을 보낸다.
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의 딕셔너리 형태라고 보면 된다)
자주 사용되는 Headers 의 정보에는 다음이 있다
Body : 해당 요청의 실제 내용. 주로 Body를 사용하는 메소드는 POST이다.
ex) 로그인 시에 서버에 보낼 요청의 내용
Body: {
"user_email": "wecode@gmail.com"
"user_password": "wecode"
}
Status Line : 응답의 상태 줄
- HTTP Version: 요청의 HTTP버전과 동일
- Status Code: 응답 메세지의 상태 코드
- Status Text: 응답 메세지의 상태를 간략하게 설명해주는 텍스트
ex) 로그인 요청에 대해 성공했을 때 응답의 내용
Body: {
"message": "SUCCESS"
"token": "kldiduajsadm@9df0asmzm" (암호화된 유저의 정보)
}
매우 중요한 특징인Stateless
(상태 없음)이다.
=> 서버가 클라이언트의 상태를 보존하지 않는다.
즉, 매번 요청에 모든 상태값을 전달해줘야 한다.
각각의 HTTP
통신(요청/응답)은 독립적이기 때문에 과거의 통신에 대한 내용을 전혀 알지 못한다. 이전의 상태를 전혀 알지 못한다는 것은 매 통신마다 필요한 모든 정보를 담아서 요청을 보내야 한다는 것과 같다.
때문에 여러번의 통신의 진행과정에서 연속된 데이터 처리가 필요한 경우(ex. 온라인 쇼핑몰에서 로그인 후 장바구니 기능)를 위해 로그인 토큰 또는 브라우저의 쿠키, 세션, 로컬 스토리지와 같은 기술이 필요에 의해 만들어졌다.
크게 세 가지만 기억하자! 🤔
HTTP
는 컴퓨터 끼리의 소통을 위한 통신규약이다.HTTP
통신은Request
(요청)과Response
(응답)으로 이루어진다.HTTP
통신의 매 요청과 응답은 이전 상태를 알지 못한다.(Stateless)