Request
요청 메시지는 세 부분으로 구성되어 있습니다.
1. start line 요청 내용
- HTTP 메소드 / Request target / HTTP version
HTTP 메소드 : 요청의 의도를 담고있습니다. (GET, POST 등)
Request target : HTTP 요청이 전송되는 목표 주소
HTTP version : 버전에 따라 요청 메시지 구조나 데이터가 다를 수 있기 때문에 version을 명시합니다.
2. Header
key : value로 이루어져 있습니다.
- Host : 요청이 전송되는 target의 호스트 URL 주소
- User-Agent : 요청을 보내는 클라이언트의 정보 (ex. 웹 브라우저 정보)
- Accept : 해당 요청이 받을 수 있는 응답 body 데이터 타입의 정보. 모든 타입을 허용하는 경우 */*로 지정합니다.
MIME Type : Multipurpost Internet Mail Extensions (ex. application/json) - Connection : 해당 요청이 끝난 후에 클라이언트와 서버간의 연결을 계속 유지할 것인지 끊을 것인지 알려주는 헤더입니다.
keep-alive - 네트워크 연결을 유지
close - 연결 끊기 - Content-Type : HTTP 요청이 보내는 메시지 body 타입을 알려줍니다. (ex. MIME Type)
- Content-Lenght : 요청이 보내는 메시지 body의 총 사이즈 정보
3. Body
HTTP 요청이 전송하는 데이터를 담고있는 부분
전송하는 데이터가 없다면 body부분은 비어있습니다.
Response
응답 메시지 또한 세 부분으로 구성되어 있습니다.
1. start line
HTTP version / Status Code / Status Text
2. Header
Request 메시지와 동일하지만 User-Agent(요청을 보내는 클라이언트의 정보)만다릅니다.
Server를 사용해서 응답하는 서버의 정보를 보내줍니다.
3. Body
HTTP 요청 메시지의 body와 동일합니다.
HTTP 헤더는 더많은것들이 있다. 나중에 더 공부하자
HTTP는 상태를 유지하지 않는 프로토콜
HTTP는 상태를 계속 유지하지 않는 Stateless 프로토콜입니다.
HTTP 프로토콜 독자적으로, Request와 Response를 교환하는 동안에 상태를 관리하지 않습니다. 결국, HTTP 프로토콜 레벨에서는 이전에 보냇던 리퀘스트나 이미 되돌려준 Response에 대해서는 전혀 기억하지 않습니다.
HTTP에서는 새로운 Request가 보내질 때 마다 새로운 Response가 생성됩니다. 프로토콜로서는 과거의 Request나 Response 정보를 젆려 가지고 있지 않습니다. 이는 많은 데이터를 매우 빠르고 확실하게 처리하는 범위성을 확보하기 위해서 이와 같이 간단하게 설계되어 있는 것입니다.
그러나 웹에서 필수적으로 상태를 저장해야하는 경우가 있는데 바로 로그인 기능입니다.
로그인 상태를 파악하기 위해서는 상태를 유지할 필요가 있습니다. HTTP/1.1은 상태를 유지하지 않는 프로토콜 입니다.
그래서 상태를 유지하고 싶은 요구에 부응하기 위해 Cookie라는 기술이 도입되었습니다.
쿠키는 클라이언트 로컬에 저장되는 key와 value가 들어있는 작은 데이터 파일입니다.
쿠키에는 이름, 값, 만료 날짜/시간, 경로정보 등이 들어있습니다.
쿠키는 서버에서 Response로 보내진 Set Cookie라는 헤더 필드에 의해 쿠키를 클라이언트에 보존하게 됩니다. 다음번 클라이언트가 같은 서버로 Request를 보낼 때 자동으로 쿠키값을 넣어서 송신합니다. 서버는 클라이언트가 보내온 쿠키를 확인해서 어느 클라이언트가 접속했는지 체크하고 서버 상의 기록을 확인해서 이전 상태를 알 수 있습니다.
그럼세션은?
세션은 쿠키와 달리 서버에 클라이언트의 상태 정보를 저장하는 기술입니다.
클라이언트가 Request를 보내면, 해당 서버의 엔진이 클라이언트에게 유일한 ID를 부여하는데 이것이 세션ID입니다.
클라이언트가 서버에 Requst하면 필요에 따라 세션에 클라이언트에 대한 데이터를 저장하고 세션 아이디를 Response를 통해 발급해줍니다. (브라우저 단에서 관리될 수 있도록 쿠키로 발급하는게 일반적인 구조라고 합니다)
클라이언트는 발급받은 세션 아이디를 쿠키로 저장합니다.
클라이언트가 다시 서버에 요청할때, 쿠키(세션아이디가 담긴)를 서버에 전달하여 상태 정보를 서버가 활용할 수 있도록 해줍니다.
'Web' 카테고리의 다른 글
| 프록시x게이트웨이x터널 (0) | 2020.09.25 |
|---|---|
| 상태코드 간략한 정리 (0) | 2020.09.24 |
| URI와 URL 차이 (0) | 2020.09.23 |
| HTTP와 관계가 깊은 프로토콜들 (0) | 2020.09.23 |
| MSA 간략 정리 (0) | 2020.09.23 |