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)