본문 바로가기

SpringBoot

ch2 04. HTTP 요청과 응답

1. 프로토콜(protocol)이란?

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

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

- http도 프로토콜 중 하나이다. 

 

 

2. HTTP(Hyper Text Transfer Protocol)란? (1)

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

- Hyper Text -> HTML 

 

- 파일에 데이터를 기록하는 방식
1) 텍스트 : Human Readable
2) 바이너리 : 읽기 어렵다. 

 

 

클라이언트 & 서버 간 텍스트 메시지를 주고 받아서 읽기가 쉽다.

서버가 보내주는 HTML 응답을 보내주면, 브라우저가 받아서 보여준다. 

브라우저는 HTTP 프로토콜에 맞게 요청 메시지를 만들어준다.
해당 메시지를 서버에게 보내면, 응답메시지를 보내준다.  

 

 

2. HTTP(Hyper Text Transfer Protocol)란? (2)

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

 

IF) 클라이언트 요청을 보내고, 그 다음 또 요청을 보낸다면 서버 입장에서는 이 요청이 같은 클라이언트인지 
구별할 방법이 없다. 
왜냐하면, 첫 번째 요청을 누가 보냈는지 클라이언트 정보를 저장하지 않기 때문에 요청을 누가 보냈는지 
상관없이 응답을 해준다. 
그렇기 때문에 같은 클라이언트가 여러 번 요청을 보내도 그걸 구별할 수 없다.

 

-> 이를 구별하기 위해 '쿠키'라는 '클라이언트 식별 기술'을 사용한다. 

상태를 유지하지 않아 클라이언트 정보를 다 저장하지 않는건 서버의 부담이 적어진다는 장점이 있다. 

웹 사이트에 많은 사람이 오기 때문에 서버에 클라이언트 정보를 다 저장하게 되면 부담이 커진다. 

그렇기때문에 상태를 저장하지 않는 방법을 선택했는데, 클라이언트를 식별하기 위해 고안된 기술이 '쿠키'

 

 

2. HTTP(Hyper Text Transfer Protocol)란? (3)

- 확장 가능하다. 

- 커스텀 헤더(header) 추가 가능

이 헤더에 우리가 원하는 내용을 맘대로 추가할 수 있다. 

한 줄에 하나 씩 '헤더 이름 : 값'이 들어가고, 중간에 '빈 줄'이 나오면 헤더가 끝나는 것이다. 

 

 

3. HTTP 메시지 (1)

- HTTP 응답 메시지도 똑같이 되어있다. (요청 메시지인 경우 요청 정보)

1)  첫번째 상태줄

2) 헤더

3) 빈줄

4) 바디

 

3. HTTP 메시지 (2)

- 일반적으로 HTTP 통신이 이루어지는 과정 

1) 브라우저로 요청을 보낸다. -> 자동으로 브라우저 요청 메시지 생성

2) 서버가 요청을 받는다. -> 응답 메시지 작성

3) 서버가 응답 메시지를 클라이언트에게 전송

4) 클라이언트가 응답 내용을 받아서 보여준다. 

 

 

4. HTTP 메시지 - 응답 메시지 

 

5. HTTP 메시지 - 요청 메시지 (GET / POST) 

 

- HTTP 요청 메시지 : GET

-> 서버로부터 어떤 리소스를 얻어올 때 사용(Read)

GET은 단순히 얻어오는 것이기 때문에 요청에 '바디'가 없다. 

바디가 없으니 전송할 데이터를 URL뒤에 쿼리 스트링을 붙이는 것. 

내가 무엇을 원하지는만 적어주고, 그 다음에 전송할 데이터를 적어준다. 

 

 - HTTP 요청 메시지 : POST

-> 글쓰기, 데이터 전송(Write)

전송할 데이터를 '바디'에 넣는다. 바디가 있기 때문에 전송할 데이터를 URL에 붙이지 않고, 바디에 넣는다. 

 

 

6. HTTP 메소드 - GET, POST

GET POST
- 서버의 리소스를 가져오기 위해 설계(Read)
- QUERY STRING을 통해 데이터를 전달(소용량)
-> 크롬 8,000글자 정도.. 
- URL에 데이터 노출되므로 보안에 취약
-> 노출되어도 문제없는 경우도 많다. ex) 유튜브 링크 보낼 때

- 데이터 공유에 유리

ex. 검색엔진에서 검색단어 전송에 이용
- 서버에 데이터를 올리기 위해 설계됨(Write)
- 전송 데이터 크기의 제한이 없음(대용량)
- 데이터를 요청 메시지의 body에 담아 전송
- 보안에 유리, 데이터 공유에는 불리

ex. 게시판에 글쓰기, 로그인, 회원가입

- 리소스는 파일, 프로그램의 실행 결과와 같은 것

 

 

7. 텍스트 파일과 바이너리 파일

- 바이너리 파일 : 문자와 숫자가 저장되어 있는 파일 (*.exe / *.png ...)

- 텍스트 파일 : 문자만 있는 저장되어 있는 파일( *.txt / *.html.. )

 

-> 파일을 저장할 때

- 바이너리 파일 : 데이터를 있는 그대로 읽고 쓴다. 

- 텍스트 파일 : 숫자를 문자로 변환 후 쓴다. 

파일 종류 쓰기 읽기
바이너리 문자 -> 문자
숫자 -> 숫자
문자 -> 문자
숫자 -> 숫자
텍스트 문자 -> 문자
숫자 -> 문자
문자 -> 문자
문자 -> 숫자

ex) 텍스트에서 12를 저장할 때 문자 '1','2'로 저장하는 것.
다시 읽을 때는 되돌리는게 불가능(원래 문자였는지 숫자였는지 알 수 없기 때문)

이런식으로 저장된다. 

 

 

8. MIME(Multipurpose Internet Mail Extension) 

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

- HTTP의 Content-Type헤더에 사용. 데이터의 타입을 명시 -> 그래야 브라우저가 올바르게 해석 가능

text인데 plain, text인데 html.. 이런식이다.