본문 바로가기
Code/개발지식

HTTP 프로토콜과 데이터 전달 방식

by 코드포휴먼 2019. 11. 17.

HTTP(HyperText Transfer Protocol)은 웹 브라우저와 웹 서버가 서로 소통하기 위한 프로토콜, 즉 통신 규약이다.

우리가 말하는 웹도 HTTP가 제공하는 서비스를 바탕으로 이루어진다. 웹 페이지에서의 폼(form) 양식 처리를 이해하려면 먼저 HTTP의 동작원리를 이해해야 한다.

 

HTTP 통신 규약

 

HTTP 통신 규약에 의한 데이터 흐름

 

웹 브라우저가 HTTP 통신 규약에 의해 웹 서버에 데이터를 요청하면 웹 서버는 이를 처리하여 결과를 웹 브라우저에 돌려준다. 이러한 데이터 흐름은 아래와 같다.

 

  1. 사용자가 웹 브라우저 주소 창에 URL을 입력하거나 웹 페이지의 링크를 클릭한다.
  2. HTTP 통신 규약에 의해 사용자의 요청이 웹 서버로 전달된다.
  3. 웹 서버는 사용자의 요청을 처리하여 그 결과를 HTTP 통신 규약에 의해 사용자의 웹 브라우저로 전송한다.
  4. 웹 브라우저는 웹 서버가 보낸 데이터를 분석하여 화면에 출력한다.
  5. 웹 브라우저 화면에 텍스트, 글자, 동영상 등의 형태로 나타난 요청 결과를 사용자가 확인한다.

 

 

데이터 전달 방식

 

서버에 보내는 요청 메시지의 양식

 

웹 브라우저에서 웹 서버로 데이터를 전달하는 데에는 메소드(method) 방식과 동적 파라미터 방식이 있다. 동적 파라미터 방식의 경우 메소드 방식과 혼용해서 사용이 가능하다. 

 

 

1. 메소드(method) 방식

1.1. POST

- HTTP 프로토콜 요청 메시지의 Body를 타고 데이터 전달된다(body에 숨겨져서 보내지며 암호화 개념은 아니다).

- POST 방식은 보안성이 우수하여 대량으로 보낼 때 주로 사용한다.

- 회원가입 양식이나 게시판에 글을 쓸 때처럼 사용자가 폼 양식에 입력한 데이터를 웹 서버로 전달할 때 사용한다. 이미지와 같은 바이너리 파일도 웹 서버로 전달할 수 있다. POST는 서버로 데이터를 하여 서버의 상태 등을 바꾸기 위해서 사용된다. 

 

 

1.2. GET

URL 뒤에  '?' 를 붙여서 문자열의 시작을 알리고 그 뒤에  '키 = 값 & 키 = 값 & ...'   형태의 query string을 붙여서 전송하는 방식이다. 이는 단지 문자열이기 때문에  route와는 관계가 없다.  여기서 말하는  '헤더' 와  '바디' 는  HTML에서 쓰는 태그와 전혀 다른 개념이니 혼동하지 않아야 한다.

- HTTP 프로토콜 요청 메시지의 Header를 타고 데이터 전달된다. 데이터가 직접적으로 노출되기 때문에 보안성이 떨어지는 편이다. 

- GET 방식은 POST와 반대의 특성을 가져서 소량으로 보낼 때 사용한다. GET URL 주소 뒤에 데이터를 입력하여 웹 서버로 전달하기 때문에 많은 양의 데이터를 보내기에는 적합하지 않다.

- GET 방식은 POST 방식과 달리 캐싱이 가능하기 때문에 더 빠르다. 캐싱이란 한 번 접근한 사이트를 다시 재요청할 때 빠르게 접근하기 위해서 데이터를 저장해두는 것을 말한다.

- 흔히 GET 방식은 어떤 데이터를 져와서 보여주는 경우, 예를 들면 특정 웹 페이지를 띄우는 요청하는 경우에 적합하다.

 

GETURL로 노출되기 때문에 보안성이 약하다고 하였는데, POST 역시 message body를 타고 올 뿐이지 안전한 방식은 아니다. 애초에 보안이 강화된 HTTPS를 사용하거나, 보안에 민감한 데이터는 암호화를 거쳐서 전송하는 것이 옳다. GET 방식은 주로 데이터를 가져와서 보여줄 때(페이지 요청), POST 방식은 주로 서버의 상태를 변경, 데이터를 수정할 때 등등에 사용된다.

 

 

2. 동적 파라미터 방식

데이터(파라미터)를 URL에 실어서 전송하는 방식이다. 동적 파라미터 방식은 보안에 민감하지 않은 데이터를 보낼 때 사용한다.

'주소에 데이터가 있다' = '간단하다' = '보안에 취약하다' = '보안에 민감하지 않은 데이터 보낼 때 사용한다'

 

 

 


<출처>

HTTP 요약

https://ko.wikipedia.org/wiki/HTTP

 

데이터 전달 방식

https://blog.outsider.ne.kr/312

 

댓글