About HTTP (feat. 쿠키, 세션)
프론트, 백엔드 API 시스템은 일반적으로 HTTP 포로토콜을 기반으로 통신한다. 그러므로 이를 이해하는 것은 필수이다.
HTTP: 웹상에서 서로 다른 서버 간에 하이퍼텍스트 문서, HTML 주고받을 수 있도록 만들어진 프로토콜.
현재 공부하고 있는 책에선 서로 다른 나라의 사람들을 위한 공용어에 비유를 했다.
HTTP 통신 방식에는 2가지가 있다. 하나는 요청,응답 방식이고 하나는 Stateless 이다.
1. 요청과 응답
http 를 기반으로 통신할 때 클라이언트가 먼저 http 요청을 서버에 보내면 서버는 요청을 처리한 후 결과에 따른 응답을 클라이언트에 보낸다.
2. stateless
말 그대로 상태라는 개념이 없다. 즉 각각의 http 통신은 독립적이며 그 전에 처리된 통신에 대해 알지 못한다.
단점은, 예로 들면 http 요청 처리를 위해 한 사용자가 로그인이 되어야 한다고 하면, 사용자가 그 전에 로그인을 했더라도 stateless 이기 때문에 새로운 요청을 보낼 때 로그인 사실 여부를 포함시켜서 보내야 한다. 이를 위해 클라이언트가 사용자의 로그인 사실 여부를 기억하고 있어야 한다.
이를 해결하기 위해 쿠기, 세션을 사용한다.
쿠기: 웹 브라우저가 웹사이트에서 보낸 정보 저장할 수 있도록 하는 작은 파일.
http 는 stateless 이므로 클라이언트에서 모든 정보를 포함해 요청을 보내야 한다. 그러므로 클라이언트가 정보를 저장할 수 있는 메커니즘이 필요한데, 웹 브라우저는 쿠키라고 하는 파일을 사용해 필요한 정보를 저장한다.
세션은 쿠키와 마찬가지로 http 통신 상에서 필요한 데이터를 저장할 수 있게 하는 메커니즘이다.
차이점은 쿠키: 웹 브라우저, (클라이언트에서 데이터 저장)
세션: 웹 서버에서 데이터 저장
http 요청 구조
start line, Headers, Body
start line
1. http 메소드 : get(서버로부터 어떠한 데이터를 받고자 한다), post(서버에 새로운 데이터를 저장하고자 한다), put, delete ...
2. request target : http 요청이 전송되는 목표 주소. (/ping)
3. http version
headers
http 요청에 대한 정보.
host : 요청이 전송되는 target의 호스트의 url 주소 알려줌.
ex. HOST : google.com 구글에 보내는 http 요청의 포스트 헤더
user-agent : 요청을 보내는 클라이언트에 대한 정보.
body
1. status line : 응답 메시지의 상태 간략히 요약해 알려줌.
만약 요청이 정상적으로 처리되었으면 응답의 status code는 200. status text 는 OK.
301 Moved Permanently : 요청을 보낸 엔드포인트의 URL 주소가 바뀌었다는 것을 나타냄;
HTTP 메소드 중 GET, POST 가 많이 쓰이는데 POST는 단순히 데이터만 받아오는 GET 과는 달리 데이터를 생성, 수정, 삭제 요청할 떄 주로 사용된다.
OPTIONS는 특정 엔드포인트에서 허용하는 메소드들이 무엇이 있는지 알고자 하는 요청.