get 과 post

이지훈·2021년 6월 21일
0

TIL

목록 보기
27/33
post-thumbnail

클라이언트가 서버로 request하는 방법인 HTTP Method는 2가지 방법을 많이 사용합니다. 바로 get과 post 방식입니다. 두 개를 바교해보겠습니다.

1. GET

get은 말 그대로 정보를 가져와서 조회하기 위해 사용하는 방식입니다.

?id=123&age=100

"id" 와 "age" 를 key로 하여 조회하는 것을 보실 수 있습니다.

? 마크를 통해 URL의 끝을 알리고, id라는 키(Key)에 대해선 mang이라는 값(Value)를, pw라는 키(Key)에 대해서는 kyu라는 값(Value)를 전송하는 것을 볼 수 있습니다. 여러개의 Key와 Value를 보내는 경우에 &를 사용하여 이어주는 GET방식은 최소한의 보안유지도 하지 않기 때문에 실제 웹사이트에서 ID와 PW같은 중요한 정보를 GET방식으로 사용하면 개인정보가 노출되는 문제가 발생합니다. GET방식을 사용하여 데이터를 노출시키는 경우는 개인정보가 포함되지 않는 상황에서 *캐싱을 하여 속도를 높이거나 즐겨찾기를 편리하기 위해 사용되는 경우가 많습니다. 우리가 어떤 물건 a에 대해서 즐겨찾기를 추가하면 그 물건의 이름이 a라는 정보를 url에 추가하여 즐겨찾기를 생성할 수 있는 것입니다.

MangKyu's Diary에서 더 자세한 설명을 보실 수 있습니다.

1-1. GET의 특징

  • get 요청은 캐시가 가능하다.(get을 통해 서버에 리소스를 요청할 때, 웹 캐시가 요청을 가로채 서버로부터 리소스를 다시 다운로드하는 대신 리소스의 복사본을 반환합니다. HTTP-Header에서 chche-control-header를 통해 캐시 옵션을 지정할 수 있습니다.)

  • 주소에 값이 나온다.

  • get 요청은 브라우저 히스토리에 남는다.

  • get 요청은 북마크 될 수 있고, 조회가 가능하다.

	/recommend/bookmark 와 같이 조회할 수 있다.
  • get 요청은 길이 제한이 있는데, 브라우저마다 제한이 다르다.(ms internet explorer는 2048자 제한, chrome은 37748자 제한, firefox는 100만 이상, safari는 400000만 이상, 오페라는 30만 이상 등)

  • get 요청은 파라미터를 노출시켜버리기 때문에 보안을 위해서 중요한 정보를 담으면 안됩니다.

1-2. GET 올바르게 작성

민감한 정보를 담지 않게 작성한다.

/category?categoryId=3&page=3 

2. POST

post 방식은 주소창에 나오지 않습니다.

POST는 클라이언트에서 서버로 리소스를 생성하거나 업데이트하기 위해 데이터를 보낼 때 사용 되는 메서드입니다. 예를들면 게시판에 게시글을 작성하는 작업 등을 할 때 사용합니다.

POST는 전송할 데이터를 HTTP 메시지 body 부분에 담아서 서버로 보냅니다. ( body 의 타입은 Content-Type-header에 따라 결정)

GET에서 URL 의 파라미터로 보냈던 name1=value1&name2=value2 가 body에 담겨 보내진다 생각하면 됩니다.

POST 로 데이터를 전송할 때 길이 제한이 따로 없어 용량이 큰 데이터를 보낼 때 사용하거나 GET처럼 데이터가 외부적으로 드러나는건 아니라서 보안이 필요한 부분에 많이 사용됩니다.
( 하지만 데이터를 암호화하지 않으면 body의 데이터도 결국 볼 수 있습니다.)

POST를 통한 데이터 전송은 보통 HTML form 을 통해 서버로 전송됩니다.

2-1. POST의 특징

  • 캐시되지 않는다.

  • 브라우저 히스토리에 남지않는다.

  • 북마크되지 않는다.

  • 데이터 길이에 제한이 없다.

  • 주소에 값이 나타나지 않는다.

3. GET과 POST 차이점

목적 : get은 서버의 리소스에서 데이터를 요청할 때, post는 서버의 리소스를 새로 생성하거나 업데이트할 때 사용

body 유무 : get은 url파라미터에 요청하는 데이터를 담아 보내기 때문에 HTTP message에 body가 없다. 하지만 post는 body에 데이터를 담아 보내서 HTTP message에 body가 존재한다.

불변성 : get은 리소스를 조회하기만 하기 때문에 여러번 요청해도 response가 똑같다. post는 리소스를 새로 생성하거나 업데이트할 때 사용되므로 response가 달라진다.(서버가 변경될 수 있다)

긴 파일이나 이미지 : post가 데이터 길이에 제한이 없기 때문에 긴 내용이나 그림파일일 경우 post, 간단한 텍스트 내용은 get으로 넘긴다.


참고 자료

https://korbillgates.tistory.com/182
https://noahlogs.tistory.com/35
https://www.w3schools.com/tags/ref_httpmethods.asp
https://blog.outsider.ne.kr/312
https://mangkyu.tistory.com/17
https://developer.mozilla.org/ko/docs/Web/HTTP/Caching

profile
꾸준하게 🐌

0개의 댓글