이론을 싫어!

HTTP 요청과 응답 GET, POST 그리고 실행 결과까지 본문

Spring and Springboot

HTTP 요청과 응답 GET, POST 그리고 실행 결과까지

이론을 싫어! 2023. 3. 9. 01:19
반응형

HTTP 란 무엇일까?

 

HTTP 는 Hyper Text Transfer Protocol 이며 

 

Hyper Text -> html 를 의미하고 

 

Transfer -> 전송을 말한다. 

 

그리고 Protocol은 서로간의 통신을 하기 위한 약속 또는 규칙이라고 한다.

 

즉, 텍스트 또는 html 의 기반을 전송하기 위한 프로토콜이라고 한다.

 

그리고 HTTP는 상태를 유지 하지 않는다고 한다. (stateless) 

 

무슨 말이냐면 , 예를 들어서 맨처음에  클라이언트 쪽에서 요청이 한번 들어왔고 

 

다시 똑같은 클라이언트에서 한번더 요청이 들어와도 같은 클라이언트에서 요청이 왔다는 것을 모른다는 것이다.

 

 

HTTP의 메소드 -GET, POST

 

GET 

 - 서버의 리소스를 가져오기 위해 설계 (Read 을 하기 위해서 설계되었다.)

- Query String 을 통해 데이터를 전달 ( 소용량)-

- URL에 데이터 노출되기 때문에 보안에 취약하다.(예시) http://localhost:8080/ch2/getyoil?year=2021&month=10&day=1)

- 데이터 공유에 유리하다. 

- 그래서 GET은 검색하는데 많이 이용된다. ( 인터넷 검색, 구글링 등등)

 

POST

- 서버에 데이터를 올리기 위해서 설계됨 

- 전송 데이터 크기의 제한이 없음 ( 대용량)

- 데이터를 요청 메시지의  body에 담아 전송

- 보안에 유리하지만, 데이터 공유에는 불리하다. 

- 그래서 POST는 게시판 글쓰기, 로그인,회원가입에 많이 이용된다. 

 

 

조금 더 쉽게 설명을 하자면 만약 택배 상자를 각 지역마다 분류작업을 한다고 하면 GET은 상자 에 택배 송장 번호에 지역이 적혀있어 보고

 

바로 분류하는것이고 , POST는 상자에 바코드를 찍어서 지역을 확인 하고 분류하는 방식이라고 보면 된다. 

 

그러니 GET방식은 주소지가 보이는 곳에 있으니 보안에는 취약하나 빠르게 분류를 할수 있는것이고

 

POST방식은 바코드로 되어져있어서 일일히 찍어서 주소지를 확인해야니 분류 속도는 느리나, 아무나 볼수 없기 때문에 보안에는 강하다.

 

 

HTTP 요청 메시지

 

우리가 보통은 클라이언트에서 URL을 치고 난위 엔터를 누르지만 사실은 우리가 URL 엔터를 치고 난뒤에 HTTP요청 메시지를 만들어서 서버에 전송이 된다. 

 

GET 방식을 요청 메시지

위의 메시지는 GET 방식으로 요청했을때의 요청 메시지이다. 

 

POST 요청 메시지

 

위의 사진은 POST 방식으로 요청했을때의 요청 메시지이다. 

 

GET과 POST방식의 차이점을 말했을때 GET은 URL에 데이터를 넣어서 보낸다고 했다. 

 

GET 요청 메시지를 보게 되면 실제로 URL 뒤에 데이터가 있는것을 확인할 수 있다. 

 

POST의 방식은 URL뒤에 데이터가 들어가는 것이 아닌 밑에 한줄을 띄우고 데이터가 들어가져있는 것을 볼수 있다. 

 

요청 메시지 구분법 

 

메시지 구분 법은 

 

1
2
3
4
5
6
POST /ch2/getyoil HTTP/1.1 -> 요청라인
Host: localhost:8080 -> 요청 헤더
Cache-Control: no-cache -> 요청 헤더
Content-Type: application/x-www-form-urlencoded -> 요청 헤더
-> 빈줄
year=2021&month=10&day=1 -> body
cs

 

GET과 POST 둘다 맨위에는 요청 라인 이다.

 

그리고 또한 요청라인 밑에는 빈줄 있기 전까지는 전부다 요청 헤더이다. 

하지만 마지막 body는 POST에 만 있고 GET방식은 없다. 

 

빈줄이 있는 이유는 body부분과 헤더 부분을 구분하기 위해서이다. 

 

HTTP 응답 메시지 

 

응답 메시지 헤더

 

 

 

body부분

 

 

http://localhost:8080/ch2/getyoil?year=2021&month=10&day=1 로 내가 요청을 했을 때 응답온 메시지 들이다.

 

헤더 쪽에는 200 이라고 적혀있는데 200이라고 하면 정상으로 작동되었다 라고 생각하면된다.

 

상태 코드 의미 
1xx Informational
2xx Success
3xx Redirect
4xx Client Error
5xx Server Error

 

 

404 에러가 났다 위의 표를 보면 400대는 클라이언트 에러라고 적혀있다. 

 

그렇다 클라이언트에서 내가 http://localhost:8080/ch2/getyooil?year=2021&month=10&day=1  o를 하나더 붙여서 요청을 했기

 

때문에 클라이언트 에러이다. 라고 응답 메시지가 온것이다. 

 

 

이 캡처본은 500 에러이다 . 표를 보면 500번대는 서버 에러이다.

 

http://localhost:8080/ch2/getyoil?year=2021&month=10   이렇게 클라이언트에서 보냈다. 

 

클라이언트에서 요청 단계에서는 문제가 없다. 하지만 여기서는 day의 데이터가 빠져있다. 

 

그러다보니 서버에서 에러를 낸것이다. 

 

 

결과 확인은  f12을 눌러서 Network -> 밑에 내가 요청한 정보 클릭 하면 확인 할수 있다.