Http 란?
- Hyper Text Transfer Protocol의 약자이다.
프로토콜(Protocol)은 컴퓨터 사이에서 데이터의 교환 방식을 정의하는 규칙 체계입니다.
기기 간 통신은 교환되는 데이터의 형식에 대해 상호 합의를 요구합니다.
이런 형식을 정의하는 규칙의 집합을 프로토콜이라고 합니다.
- 인터넷에서 클라이언트와 서버가 자원을 주고 받을 때 쓰는 통신 규약이다.
- HTTP는 클라이언트가 요청을 하면 서버가 응답을 하는 구조로 되어 있다.
ex)
클라이언트가 웹 페이지에서 링크가 걸려있는 텍스트를 클릭(요청)하면 링크를 타고 새로운 페이지로 넘어간다(응답).
- 이렇게 규칙을 정해두었기 때문에, 모든 프로그램이 이 규칙에 맞춰 개발해서 서로 정보를 교환할 수 있게 된 것이다.
- HTTP는 연결 상태를 유지하지 않는 비연결성 프로토콜이다. 이러한 단점을 해결하기 위해 Cookie와 Seesion 등장하였다.
Http의 Request(요청)
- 요청 행 : Method, Path, Version이 써 있는 부분이다.
- Request Headers : 요청 행의 아래 부분이다.
- Request Message Header : 요청 행과 Headers를 묶은 것이다.
- body : 서버로 전송해야할 정보가 있는 부분이다.
- body와 header는 blank line으로 구분해준다.
- Request Header에서 host는 반드시 적어야하며 인터넷의 연결되어있는 컴퓨터를 식별하는 이름이다.
- User Agent를 해석하면 유저가 사용하는 운영체제와 웹브라우저가 무엇인지 알 수 있으며 서버를 운영하면서 우리 서버에 어떤 웹브라우저로 많이 접속하는지 알 수 있다.
-
HTTP Method :
- 클라이언트와 서버가 어떤 방식으로 통신할 것인지 정의한 것이다.
- 대표적으로 GET과 POST를 사용하며 GET으로 리소스를 가져오고 POST로 HTML 폼의 데이터를 전송한다.
-
HTTP Path :
- 웹서버에게 요청하는정보. 서버가 이 부분을 보고 어떤 것을 요청했는지 확인 후 응답해준다.
예를 들면 프로토콜 (http://), 도메인 (여기서는 developer.mozilla.org), 또는 TCP 포트 (여기서는 80)인 요소들을 제거한 리소스의 URL이다.
-
HTTP Version :
Http의 Response(응답)
-
status는 Version, Status code, Phrase로 이루어져있으며 응답에 대한 내용을 담고있다.
-
content-Type : 웹서버가 응답할 때 어떻게 구성된 것인지 알려준다. content-Type을 클라이언트가 확인하고 알맞게 해성해준다.
-
Last-Modified : 마지막으로 수정된 날을 알려준다.
-
HTTP Version :
-
HTTP Status code :
- 응답 결과에 대한 내용이다. 숫자마다 다른 응답의 결과를 가지고있다.
- 200 번대 : 성공했다. 긍정적인 메세지
- 300 번대 : A를 요청했지만 다른 페이지로 옮겨준 것. 정해진 위치로 이동하는 것이다.
- 400 번대 : 클라이언트의 에러. 없는 것을 요청하는 경우가 있다.
- 500 번대 : 서버의 에러. 서버의 문제가 있어서 서비스할 수 없는 경우이다.
-
HTTP Phrase :
- 응답 결과를 사람이 이해할 수 있게 풀어서 쓴 것이다.
Https 란?
- Hypertext Transfer Protocol Secure의 약자이다.
- HTTP의 확장 버전이다.
- ‘Secure’이란 말에서 유추할 수 있듯 HTTP를 통한 데이터의 보안을 위한 조치가 추가되었다.
- 이때 사용되는 것이 SSL(Secure Sockets Layer) 프로토콜이다.
- HTTP와 HTTPS의 차이점은 SSL을 사용해 데이터를 안전하게 보낼 수 있는지 여부이다.
쿠키와 세션
HTTP 프로토콜의 특징이자 약점인 connectionless,stateless를 보완하기 위해 사용한다.
1. 쿠키(cookie)
- 쿠키는 클라이언트에 저장되는 키와 값이 들어있는 데이터 파일이다.
- 쿠키에는 이름, 값, 만료날짜(쿠키 저장기간), 경로 정보가 들어있으며 일정시간동안 데이터를 저장할 수 있다. (로그인 상태 유지 등에 활용)
- 쿠키는 클라이언트의 상태 정보를 로컬(클라이언트의 PC)에 저장했다가 참조한다.
쿠키의 프로세스
- 브라우저에서 웹페이지 접속
- 클라이언트가 요청한 웹페이지를 받으면서 쿠키를 클라이언트 로컬에 저장
- 클라이언트가 서버에 재 요청시 웹페이지 요청과 함께 쿠키값도 전송
- 지속적으로 로그인 정보를 가지고 있는 것처럼 사용
2. 세션(Session)
- 일정 시간동안 같은 브라우저로 부터 들어오는 요구를 하나의 상태로 보고 그 상태를 유지하는 기술이다.
- 웹 브라우저를 통해 웹 서버에 접속한 이후 브라우저를 종료할 때 까지 유지되는 상태이다.
- 클라이언트가 Request를 보내면, 해당 서버의 엔진이 클라이언트에게 유일한 ID를 부여하는 데 이것이 세션ID다.
세션의 프로세스
- 클라이언트가 서버에 접속시 서버가 클라이언트에게 세션 ID를 발급
- 서버에서는 클라이언트로 발급해준 세션 ID를 쿠키를 사용해 저장 (JSESSIONID)
- 클라이언트는 다시 접속할 때, 이 쿠키(JSESSIONID)를 이용해서 세션ID값을 서버에 전달
3. 쿠키와 세션의 차이
-
저장 위치 : 쿠키는 클라이언트에 파일로 저장, 세션은 서버에 저장
-
보안 : 쿠키는 클라이언트 로컬에 저장되기 때문에 변질되거나 request에서 스나이핑 당할 우려가 있어서 보안에 취약하지만 세션은 쿠키를 이용해서 sessionid 만 저장하고 그것으로 구분해서 서버에서 처리하기 때문에 비교적 보안성이 좋다.
-
라이프 사이클 : 쿠키도 만료시간이 있지만 파일로 저장되기 때문에 브라우저를 종료해도 계속해서 정보가 남아 있을 수 있다.
또한 만료기간을 넉넉하게 잡아두면 쿠키삭제를 할 때 까지 유지될 수도 있다.
반면에 세션도 만료시간을 정할 수 있지만 브라우저가 종료되면 만료시간에 상관없이 삭제된다.
-
속도 : 쿠키에 정보가 있기 때문에 서버에 요청시 속도가 빠르고 세션은 정보가 서버에 있기 때문에 처리가 요구되어 비교적 느린 속도를 낸다.
쿠키를 사용하는 이유
- 세션은 서버의 자원을 사용하기때문에 무분별하게 만들다보면 서버의 메모리가 세션을 감당할 수 없고 속도가 느려질 수 있기 때문이다.