Programming/Spring

[스프링의 정석] HTTP 요청과 응답

Supreme_YS 2021. 10. 28. 15:37

* 프로토콜이란?

- 서로 간의 통신을 위한 약속, 규칙

- 주고 받을 데이터에 대한 형식을 정의한 것

 

* HTTP

- Hyper Text Transfer Protocol 

- 단순하고 읽기 쉽다. 텍스트 기반의 프로토콜

- 상태를 유지하지 않는다. (Stateless), 클라이언트 정보를 저장하지 않는다.

- 똑같은 사람이 두 번 요청을 보내도 똑같은 사람이 두 번 요청을 보냈는지 구분하지 못한다. 상태를 유지하지 않기 때문이다.

- 이를 보완하기 위해 쿠키와 세션을 사용한다.

- 확장 가능하다. 커스텀 헤더 추가 가능 

- 헤더 / 바디로 구성이 되어있으며, 헤더는 대,소문자를 구분하지 않고 n개 생성가능하다. 헤더와 바디는 줄바꿈으로 구분한다.

- 유저는 URL만 입력하지만 브라우저가 http 요청 메시지를 생성해서 서버에 전송한다.

HTTP/1.1 200 OK
Content-Length : 44
Content-Type : text/html
Date : 
공백 ------------헤더 / 바디 구분선
<html>
</html>
상태코드 의미
1xx Informational
2xx Success
3xx Redirect
4xx Client Error
5xx Server Error

- 요청 메서드 : get / post

GET POST
. 서버의 리소스를 가져오기 위해 설계
. Query String을 통해 데이터를 전송 (소용량)
. URL에 데이터가 노출되므로 보안에 취약
. 데이터 공유에 유리
예. 검색 엔진에서 검색 단어 전송에 이용
. 서버에 데이터를 올리기 위해 설계
. 전송 데이터의 크기에 상관 없음 (대용량)
. 데이터를 요청 메시지의 body에 담아 전송
. 보안에 유리, 데이터 공유에는 불리
예. 게시판에 글쓰기, 로그인, 회원가입

- Https : HTTP + TLS (암호화) 

- POSTMAN 설치를 통해 테스트를 용이하게 할 수 있다.

 

GET 방식의 데이터 전송
POST 방식의 전송

- GET 방식은 쿼리 스트링에 데이터를 담아서 전송하고 있다.

- POST 방식은 바디에 데이터를 담아서 전송하고 있다. 

 

* 텍스트 파일 vs 바이너리 파일

- 텍스트 파일 : 문자만 저장되어 있는 파일, 숫자를 문자로 변환 후 쓴다.

- 바이너리 파일 : 문자 + 숫자가 저장되어 있는 파일, 데이터를 있는 그대로 읽고 쓴다.

 

* MIME ( Multipurpose Internet Mail Extension ) 

- 텍스트 기반의 프로토콜에 바이너리 데이터를 전송하기 위해 고안

- HTTP의 Content-Type 헤더에 사용. 데이터의 타입을 명시

- 텍스트와 바이너리를 하나의 메시지 안에 함께 보내기 위해 boundary가 생성이 된다. 

텍스트와 바이너리를 하나의 메시지에 담는 방법

* Base64

- 64진법 : '0'~'9', 'A'~'Z', 'a'~'z', ', '+', '/' 모두 64개 (6 bit)의 문자로 구성.

- 바이너리 데이터를 텍스트 데이터로 변환할 때 사용한다.