본문 바로가기

카테고리 없음

HTTP / HTTPS 의 정의와 이해

 

 

HTTP 란?

데이터를 주고 받는 양식을 정의한 Protocol(통신 규약) 중 하나이며 매우 범용적인 양식을 가지고 있어 전 세계에서 제일 널리 쓰이고 있다.

Protocol(통신 규약)이란 클라이언트 끼리 데이터를 주고 받을 때 정해둔 약속을 의미한다

 

쉽게 비유를 해보자

우리가 한국어로 말을 걸면 한국어로 이해할 수 있다. 그러나 갑자기 독일어나 러시아어로 말한다면 이 언어를 모르는 사람은 알아듣지 못하는 것이다.

또는 같은 한국말 이라도 표준어가 아닌 지방 사투리를 사용한다면 알아 들을수는 있지만 매우 어려울 것이다.

이처럼, 서로 이해할 수 있는 언어를 사용 하여 서버와 클라이언트, 클라이언트와 클라이언트 간의 의사소통을 통신규약 이라고 한다.

 

 

HTTPS 란?

HTTP를 기반으로 데이터 통신에 암호화 기능이 포함된 통신 프로토콜 이고, 최근 사용하고 있는 대다수의 사이트는 HTTPS를 지원하고 있다.

기존 HTTP와 달리, HTTPS는 정보를 ‘비밀 코드’처럼 만들어 전송하고, 이것을 암호화 라고 한다.

이를 통해 클라이언트와 서버 사이의 데이터가 외부에서 보이지 않게 된다.

 

 

 

HTTP로 어떻게 데이터를 주고 받을까?

HTTP에서는 요청(Request)과 응답(Response)이라는 개념이 존재한다.

서버와 브라우저의 관계로 가볍게 말해보면 아래와 같이 동작한다.

1. 브라우저는 서버에게 자신이 원하는 페이지(URL 등의 정보)를 요구(Request)

2. 서버는 브라우저가 원하는 페이지가 있는지 확인, 있다면 해당 페이지에 대한 데이터를  반환(Response), 없다면 없는 페이지에 대한 데이터를 반환

3. 브라우저는 서버에게 전달 받은 데이터를 기반으로 브라우저에 화면을 뿌려준다.

 

 

브라우저에서 HTTP가 동작하는것을 직접 확인해보자.

구글 크롬, 네이버 웨일 과 같은 웹 브라우저에서 F12 버튼을 누르면 개발자 도구가 나타난다.

 

여기서 네트워크 탭으로 들어간다.

 

전체 속성 > google.com > 헤더를 보면 내가 서버에 요청하거나 서버가 나에게 주는 등의 작업에 사용된 프로토콜과 어떤 파일이 어떤형식으로 주고 받았는지가 표시된다.

 

 

Hearder 탭 살펴보기

General

브라우저에서 서버로 보낸 Request 데이터라고 보면 된다.

 

Request Headers

이것도 브라우저에서 서버로 보낸 Request 데이터라고 보면 된다.

 

Response Headers

서버가 웹 페이지 데이터와 함께 보낸 추가 데이터

 

Response 탭 살펴보기

이제 Headers탭에서 Response탭으로 바꿔보자

나의 이미지와 완전히 같지는 않을것이다. 어떤 알 수 없는 글자들이 막 써있는것이 보이면 OK

이것은 서버에서 브라우저로 반환해준 웹 페이지를 그려주기 위한 데이터다.

 

 

추가 데이터? 데이터? 뭐가 다른걸까?

위에서 개발자 도구로 직접 보면서 나온 애매한 단어들이 있었다.

Headers탭에서는 추가 데이터라고 많이 말했었고, Response 탭에서는 그냥 데이터라고 말했다.

이것에 대해서 조금 더 자세히 알아보도록 하자.

 

Method

- GET

이름 그대로 어떤 리소스를 "얻을 때" 사용

브라우저는 기본적으로 웹 서핑을 한다 가정하므로 모든 요청은 "GET" 메서드를 사용해서 서버에 요청을 보냄

- POST

일반적으로 웹 서버에 데이터를 "게시"할 때 사용

ex: 회원가입, 게시글 작성, 댓글 작성

 

Header (추가 데이터. 메타 데이터)

- 브라우저가 어떤 페이지를 원하는지

- 요청 받은 페이지를 찾았는지

- 성공적으로 찾았는지

 

Payload (데이터, 실질적인 데이터)

- 서버가 응답을 보낼 때에는 항상 Payload를 보낼 수 있다.

- 클라이언트(브라우저)가 요청을 할 때에도 Payload를 보낼 수 있다.

- "GET method를 제외하곤 모두 Payload를 보낼 수 있다" 는게 HTTP에서의 약속이다.

- 추가적으로 DELETE method에서 Payload를 보낼수있지만, 보통의 경우에는 Payload를 보내지않고 있다.