HTTP

웹 상에서 클라이언트와 서버 간에 데이터를 주고 받을 수 있는 프로토콜인
HTTP 메소드에는 크게 2가지 방식이 있는데
그것이 GET 방식과 POST 방식



GET 

'가져오다'
어떠한 정보를 가져와서 조회하기 위해서 사용되는 방식
  • URL에 변수(데이터)를 포함시켜 요청
  • 데이터를 header에 포함시켜 전송
  • URL에 데이터가 노출되어 보안에 취약
  • 캐싱 가능

GET은 URL끝에 ?와 함께 이름과 값으로 쌍을 이루는 요청 파라미터(쿼리 스트링)를 통해 필요한 데이터를 서버로 전송한다. 쿼리 스트링이 여러개일 경우 &로 연결해준다.

 

불필요한 요청을 제한하기 위해 요청이 캐시될 수 있다.

ex. js, css와 같은 데이터 양이 크고 변경될 일이 적은 정적 컨텐츠

정적 컨텐츠를 요청하고 나면 브라우저에서는 요청을 캐시한다. 동일 요청 발생시 서버로 요청을 보내지 않고 캐시된 데이터를 사용한다.

프론트앤드 개발시 정적 컨텐츠가 캐시되어 컨텐츠를 변경해도 적용되지 않는 경우 브라우저의 캐시를 지워주면 해결된다.

 

POST

'제출하다'
데이터를 서버로 제출하여 추가 또는 수정하기 위해 사용하는 방식, 작업 수행 시 사용됨
  • URL에 변수(데이터)를 노출하지 않고 요청
  • 데이터를 body에 포함시켜 전송
  • URL에 데이터가 노출되지 않아서 기본 보안이 되어있음
  • 캐싱 불가능

GET과 달리 http 메세지의 길이 제한이 없는 body에 담아서 보내기 때문에 대용량 데이터를 전송할 수 있다. 

 

GET보다는 보안성이 높지만 크롬 개발자 도구나 Fiddler와 같은 툴로 요청 내용 확인이 가능하기 때문에 민감 데이터 전송시에는 반드시 암호화를 해야한다.

 

POST는 요청 헤더의 content-type에 요청 데이터 타입을 표시해야 한다.

표시하지 않으면 서버는 내용이나 URL에 포함된 리소스 확장자명 등으로 데이터 타입을 유추하고, 알 수 없는 경우엔 aplication/octet-stream로 요청을 처리함

 

 

 

 

 

GET과 POST와 멱등성

멱등 - 동일한 연산을 여러 번 수행하더라도 동일한 결과가 나타나는 것

 

GET은 서버에게 동일한 요청을 여러번 전송하더라도 동일한 응답이 돌아와야하는 멱등성을 갖도록 설계되어있다.

서버의 데이터나 상태를 변경시키지 않아야 멱등성을 갖게 되기 때문에 GET은 주로 조회시 사용되는 것이다.

 

POST는 서버에게 동일한 요청을 여러 번 전송하더라도 응답은 다 다를 수 있다.

따라서 서버의 상태나 데이터를 변경시킬 때 사용이 된다.

 

 

 

 

 


<참고>

https://mangkyu.tistory.com/17 https://hongsii.github.io/2017/08/02/what-is-the-difference-get-and-post/ 

'🔥 > Network' 카테고리의 다른 글

[네트워크] OSI 7계층  (0) 2021.09.09
[네트워크] 웹 통신의 큰 흐름  (0) 2021.08.31
[네트워크] DNS round robin 방식  (0) 2021.08.25
[네트워크] HTTP와 HTTPS의 차이점  (0) 2021.08.18
[네트워크] TCP와 UDP 차이점  (0) 2021.08.10

+ Recent posts