2023. 8. 8. 14:05ㆍ브라우저&네트워크
HTTP
HTTP 는 클라이언트와 서버 사이에 이루어지는 요청-응답 프로토콜 이다.
HTTP 는 두가지 특징을 가지고 있다.
- 비연결성(Connectionless)
- 무상태성(Stateless)
비연결성은 연결을 맺은 서버-클라이언트 관계에서 클라이언트의 요청에 대해 서버가 응답을 마치면 그 연결을 끊는 성질을 의미한다.
이로 인해서 A 클라이언트가 보내는 3번의 요청을 서버는 모두 A 클라이언트의 요청인지 A~C 클라이언트가 보내는 각각의 요청인지 알 수 없어진다. 이를 무상태성이라고 한다.
왜 이렇게 설계되었을까?
HTTP 는 인터넷 상 불특정 다수의 통신 환경을 기초로 설계 되었다.
따라서 한 번 맺은 연결을 지속적으로 유지한다면 쓸데 없이 많은 자원이 소요될 것이다.
매번 연결을 맺는 편이 지속적 연결 유지에 자원을 쓰는 것 보다 효율적일 것이다.
즉 클라이언트의 상태를 기억하기 위한 수단이 쿠키와 세션이다.
쿠키
쿠키는 서버에 인증하기 위한 클라이언트의 정보를 클라이언트에 저장하는 값이다.
set-cookie 는 HTTP 응답 헤더에서 서버가 클라이언트 측에 쿠키를 전송하기 위해 사용된다.
cookie 는 HTTP 요청 헤더에서 이전에 서버로 부터 받은 set-cookie 값을 포함한 값을 클라이언트가 전송하기 위해 사용된다.
순서는 아래와 같다.
1. 클라이언트가 서버에 페이지 정보를 요청
2. 서버는 클라이언트에 대한 쿠키 생성 후, HTTP 응답 헤더에 쿠키를 포함하여 응답한다. (set-cookie)
3. 클라이언트의 요청과 서버의 응답이 끝나면 HTTP의 비연결성으로 인해 연결이 끊긴다.
4. 새로운 요청을 할 경우, 이전에 받은 쿠키값을 보관하고 있다가 HTTP 요청 헤더에 값을 포함하여 요청한다.(cookie)
5. 서버는 쿠키값을 보고 이전에 요청을 보낸 클라이언트를 인식하여 상태를 기억한다.
장점
- 사용자의 입장에서 별도의 인증과정을 거치지 않고 서버가 나를 쉽게 기억하도록 할 수 있다.
단점
- 쿠키값은 쉽게 수정 가능하다. 따라서 변조될 가능성도 크다.
세션
인증하기 위한 클라이언트의 정보를 서버 단에서 저장 및 관리하는 방식이다.
쿠키가 쿠키값을 통해 클라이언트의 상태를 기억하게 한다면, 세션은 서버가 클라이언트에 부여한 세션 ID를 통해 기억하게 한다.
이 세션ID는 쿠키를 통해서 관리된다.
순서는 아래와 같다.
1. 클라이언트가 서버에게 페이지 정보를 요청
2. 서버는 클라이언트에 대한 쿠키 생성 후, HTTP 응답 헤더에 세션 ID 값이 담긴 쿠키를 포함하여 응답(set-cookie)
3. 클라이언트의 요청과 서버의 응답이 끝나면 HTTP 의 비연결성으로 인해 연결이 끊긴다.
4. 새로운 요청을 할 경우, 이전에 받은 쿠키값을 보관(SSID, JSESSIONID 등) 하고 있다가 HTTP 요청 헤더에 세션 ID 값이 담긴 쿠키를 포함하여 요청한다.(cookie)
5. 서버는 쿠키 내 세션 ID 값을 보고 이전에 요청을 보낸 클라이언트를 인식하여 상태를 기억한다.
장점
- 쿠키에 비해서 그나마 안전하다. 세션 ID 는 클라이언트에 저장된다고 해도 클라이언트의 정보 자체는 서버에 저장되어 있기 때문
단점
- 쿠키에 비해 느리다. 쿠키는 서버의 헤더를 바로 참조하면 되지만 세션은 세션 ID 를 주고 받은 다음 인증을 거쳐 서버의 데이터를 참조해야 하므로 속도가 비교적 조금 느리다.
- 세션은 서버의 자원을 사용한다. 한계가 존재하는 서버 자원을 사용하므로 속도 저하나 오버헤드 등 서버에 부하를 줄 수 있다.
- 해킹의 위험성이 있다. (세션 하이제킹)
참고 링크
https://developer.mozilla.org/ko/docs/Web/HTTP/Overview
https://hec-ker.tistory.com/368
https://code-lab1.tistory.com/298
https://hahahoho5915.tistory.com/32
'브라우저&네트워크' 카테고리의 다른 글
HTTP 와 HTTPS 차이점 (0) | 2023.08.10 |
---|---|
TCP와 UDP (0) | 2023.08.09 |
CORS 란? (0) | 2023.08.06 |
HTTP Method (0) | 2023.08.06 |
HTTP 상태코드 (0) | 2023.07.05 |