본문 바로가기

Java & Spring/SpringFramework

07. HTTP 요청과 응답 - 이론 36:22

728x90

 

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

@ 데이터를 어떻게 주고받을지 약속하지 않으면?

 1. 데이터가 와도 이 데이터가 어디부터 어디까지 어떤 내용인지를 해석할 수 없음.

 2. 그래서 데이터를 주고받으려면 서로 간의 약속이 있어야 하는데.

 3. 어떤 형식으로 데이터를 주고 받을 건지 미리 정의한 것

 4. 즉 주고 받을 데이터에 대한 형식을 정의한 것

 

@ 야구로 예를 들어본다면

(야구감독)    ---------> sign (타자)

감독 왈 : 내가 모자를 만지면 번트를 해

                    코를 만지면 희생플라이

                    귀를 만지면 히트&run

이렇게 미리 약속을 하고 타자와 sign을 약속해야 소통할 수 있음.

서로 간의 통신을 위한 약속(protocol), 규칙을 정한다.

 

@ 편지로 예를 들어 보면.

보내는 사람, 받는 사람, 우표 ==> protocol

프로토콜 예시

2. HTTP(Hyper Text Transfer Proctocol)란?

- 텍스트를 전송하기 위한 Protocol

- Hyper Text -> HTML

HTTP 구조

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

+ 헤더는 대소문자를 구분하지 않는다. 그래서 여러 개 나올 수 있음.

 

- 단순하고 읽기 쉽다.(Human readable) - 사람이 읽을 수 있는 텍스트 기반의 프로토콜

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

                                 상태가 없다.

- 클라이언트에서 2개의 요청을 보내면 서버는 그 요청이 같은 요청인지 모름, 구별을 못함.

- 그래서 이것을 보완하기 위해 쿠키와 세션을 사용하여 클라이언트의 정보를 구분한다.

 

3. HTTP 메시지

HTTP 응답 메시지 == 편지(business letter)

헤더(편지에 대한 설명)와 바디(전달할 내용)로 구성되어 있다.

HTTP 메세지

@ HTTP 메시지의 요청과 응답의 흐름은..

요청 편지를 보내면 ------------------> 받아서

보낸 사람에게. <------------------ 응답 편지를 보낸다.

                                    

1. Browser을 통해 URL을 입력하면

여기서 Browser가 요청 메시지를 이런 형태로 만들어줌.

요청메시지

 

2. 요청 메시지는 서버로 받아오는데 URL("/hello")을 통해 Browser로 응답 메시지를 전송한다.

응답 메세지

 

3. 해당 내용을 전송해준다.

응답 내용

4. http://localhost:8080/hello

응답 받은 브라우저 화면

 

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

        상태코드
HTTP/1.1 200 OK         //상태라인(설명)
Content-Length : 44
Content-Type : text/html
Data : Sat, 20 Oct 2021 19:03:38 GMT

@ 응답 메시지 구조

 - HTTP/1.1 protocol로 통신했고.

 - 상태 코드는 200이다.

상태코드 의미
1xx Informational(정보교환)
2xx Success(성공)
3xx Redirect(다른 URL 요청, 재요청)
4xx Client Error(클라이언트 에러)
5xx Server Error(서버 에러)

@ 상태 코드 404 Not Found에러

- 클라이언트가 요청을 잘못한 거!

404에러

- URL을 보면 /dice로 요청받는 매핑이 없기 때문에 404 에러를 출력한다.

 

@ 5xx 에러는

- 요청은 OK, 서버가 처리 中 에러...

500 에러

- 요청은 제대로 했는데 요청을 처리하다가 프로그램에 문제가 있어서 에러난 경우 500 에러를 출력한다.

 

5. HTTP 메시지 - 요청 메시지

- 요청 메시지 전송 방식(요청 메서드)에는 크게 GET 방식POST 방식이 있다.

GET(Read) POST(Wrier)
- 서버의 리소스를 가져오기 위해 설계
- QUERY STRING을 통해 데이터를 전달(소용량)
- URL에 데이터 노출되므로 보안에 취약
-
데이터 공유에 유리

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

ex. 게시판에 글쓰기, 로그인, 회원가입 데이터를 은닉해야하는 경우 사용한다.

GET과 POST

@ 요청 메시지 구조

1. 첫 줄은 요청 라인(request line)

2. header, n 줄일 수 있다

3.    (빈 줄)

4. body

 

 

728x90