HTTP(HyperTexT Protocol)이란 인터넷상에서 데이터를 주고받는 프로토콜이다.
검색을 위한 비선형 구조로 클라이언트가 한 문서에서 다른 문서로 접근할 수 있게 해준다. 하이퍼텍스트는 하이퍼링크를 포함한다.
프로토콜은 컴퓨터 사이에서 원활한 통신을 위해 만든 약속이다.
-> ex) 나는 이렇게 데이터를 줄게! 너가 주는 건 이렇게 받을게!
-> HTTP : 인터넷에서 데이터를 어떻게 주고받을지 미리 정한 약속
HTTP는 요청(Request)과 응답(Response)로 구성되어있다. 주로 요청하는 쪽을 클라이언트(Client)라고하고 응답하는 쪽을 서버(Server)라고 한다.
HTTP 요청은 서버의 자원 위치를 나타내는 URL(Uniform Resource Locators)과 어떤 요청인지 구분하기 위한 요청 메서드로 구성되어있다. 주로 URL을 명사, 메서드를 동사의 의미를 가지고있기에 URL에는 주로 명사를, Method는 동사를 사용한다.
GET http://duckchan.com/names
메서드 : GET
URL : http://duckchan.com/resources/users/name?id=aa
HTTP Request : id가 aa인 resources/users/name을 가져오는 요청
2-1-1. URL
URL은 서버에 있는 자원의 위치를 나타낸다. 주로 scheme(Protocol)://host:port/path?query로 구성되어있다.
key=value
형태로 작성 (코드 상에서 파라미터와 비슷한 의미)http://www.duckchan.com:8808/users/name?id=aa
protocol : http
host : www.duckchan.com
port : 8808
resource : users/name
query : id = aa
2-1-2. HTTP 요청 메소드
HTTP 요청에 대한 응답은 요청 결과(Body)와 HTTP 상태코드로 이루어져있다.
요청 결과(Body)는 말 그대로 클라이언트가 원하는 자원을 뜻하고 상태코드는 통신이 성공했는지 혹은 실패했는지 실패했다면 이유는 무엇인지에 대한 정보이다.
HTTP는 Stateless(무상태) 프로토콜이다.
▶ Stateless
각각의 데이터 요청이 독립적으로 관리되어 서로 관련이 없는 것
Stateless의 정의는 위와 같다. 쉽게 말하면 요청과 응답을 하는 동안 누구의 요청이었는지, 어떤 요청이었는지, 어떤 응답을 했는지 등을 메모리를 저장하지 않는 것이다.
▶ 쿠키, 세션, 캐시
서버를 구축하다보면 클라이언트가 요청 지역, 요청 언어와 같이 요청에 대한 데이터를 저장해야할 때가 있다. 하지만 HTTP 통신은 Stateless 방식이기 때문에 데이터를 저장할 수 없다.
이런 기능을 위해 클라이언트는 서버에 요청할 때 URL, Method 외에도 쿠키, 캐시, 세션을 사용한다.
쿠키, 캐시, 세션이란?
웹 사이트는 항상 유저와 연결되어있는 것이 아니다. 클라이언트가 웹사이트에 요청을 했을 때 연결을 시작하고 응답을 하는 순간 연결을 종료한다. 즉 웹사이트는 HTML을 응답해준 뒤엔 클라이언트를 신경쓰지 않는다.
이렇게 요청에 대한 응답을 한 후 클라이언트와 연결을 끊는 방식을 Connectionless라고 한다.
HTTP는 주고받는 데이터가 암호화되지 않아 보안이 취약하다. 그래서 HTTP에 보안(Secure)을 위해 SSL을 추가한 것이 HTTPS이다.
▶ SSL(Secure Sockets Layer, 보안 소켓 계층)
데이터를 암호화하여 보안을 유지하는 기술
기존에 클라이언트가 (id = duck / pw = chan11) 로그인 요청을 한다고 할 때, http 요청이라면 id와 pw를 duck, chan11 그대로 서버에 전달하였기 때문에 보안이 취약했지만 https 요청을 할 땐 id, pw를 암호화하여 전달하기에 보안이 한층 강화된다.
최종 수정 : 2021-03-29