[HTTP] Get과 Post

alirz-pixel·2022년 7월 30일
0

HTTP

목록 보기
1/2

Get은 서버로부터 어떤 데이터를 가져와서 보여줄 때 사용한다.
Post는 서버로 데이터 전송을 할 때 사용한다.

Get

Query Parameter

위의 사진처럼 GET 요청을 전송할 때는 URL 주소 끝에 파라미터 정보를 포함하여 전송되는데,
이 부분을 쿼리 스트링이라고 한다.

ex) https://search.naver.com/search.naver?ie=UTF-8&query=this+is+get&sm=chr_hty

이 예시는 파라미터인 where, sm, fbm, ie, query를 통해 값을 전달받는다.
위의 경우처럼 파라미터가 여러개라면 중간에 &을 적는다.

Path Variable

query paramater와 비슷하게 URL의 형태로 사용되지만 경로를 변수로서 사용한다.

ex) https://search.naver.com/search.naver/UTF-8/this_is_get/chr_hty

GET 요청의 경우, 오로지 데이터를 읽기 때만 사용되고 수정할 때는 사용하지 않는다.

Query vs variable

resource를 식별해야할 경우 : Path Variable
정렬이나 필터링을 해야하는 경우 : Query Parameter

어떤 resource를 식별해야하는 상황이라면
서버에서는 받아온 resource의 id로 쿼리를 날리게 된다.
만약 존재하지 않는 resource의 id가 들어온 경우라면 어떻게 될까?

  • Query parameter : 데이터가 없는 경우에 대한 에러 핸들링을 해줘야 한다.
  • Path variable : 저 경로에 존재하는 페이지가 없으므로 404 에러가 발생한다.

resoure가 존재하지 않는다는 의미로 404 에러를 발생시키는 것이 적절하므로 Path variable이 더 적합하다.

정렬이나 필터링을 해야하는 경우라면
만약 필터링 데이터가 없거나, 정의되지 않은 정렬기준이라면 어떻게 될까

  • Query parameter : 빈 리스트를 반환한다. (에러 핸들링)
  • Path variable : 404에러가 발생하게 된다.

필터링 또는 정렬을 하는 상황에서 404 에러는 부적절 하므로 Query Parameter가 더 적합하다.

+ 설명

쿼리 스트링을 포함한 URL이기 때문에

  • GET은 브라우저 기록에 남는다.
  • GET은 북마크에 추가할 수 있다.
  • GET은 데이터 길이에 제한이 있다.
  • GET은 민감한 데이터를 다룰 때, 보안에 취약해진다.

기타

GET은 불필요한 요청을 제한하기 위해 요청이 캐시될 수 있다.
-> 정적 컨텐트츨 요청하고 나면 브라우저에서는 요청을 캐시해두고, 동일한 요청이 발생할 때 서버로 요청을 보내지 않고 캐시된 데이터를 사용한다. (js, css, 이미지 같은 정적 컨텐츠는 데이터양이 큰 반면에 변경될 일이 적어 반복해서 동일한 요청을 보낼 필요가 없기 때문)

POST

POST는 리소스를 생성/업데이트하기 위해 서버에 데이터를 보내는데 사용된다.

POST 방식으로 데이터를 보낼 때는 HTTP 메세지의 Body에 담아서 전송한다.
이 때문에 GET과 달리 대용량 데이터를 전송할 수 있으며, 전송할 데이터가 URL에 담기지 않기 때문에 보안적인 면에서 좀 더 안전하다.

단, 개발자 도구나 Fiddler 등을 통해 요청 내용을 확인할 수 있기 때문에 보안에 민감한 데이터는 반드시 암화해서 전송해야 한다.

+ 설명

데이터를 HTTP 메세지의 Body에 담기 때문에

  • POST는 브라우저 기록에 남지 않는다.
  • POST는 북마크에 추가할 수 없다.
  • POST는 데이터 길이에 대한 제한이 없다.

기타

POST는 데이터를 서버로 보내 값을 생성/수정 하는 일을 수행한다. 그렇기 때문에 요청이 캐시되지 않는다. (GET과 반대)

0개의 댓글