HTTP 메소드 - GET/POST
브라우저가 서버에 요청하는 것
GET 방식
GET은 요청을 전송할 때 필요한 데이터를 Body에 담지 않고, 쿼리 스트링을 통해 전송한다.
쿼리 스트링이란?
URL의 끝에 ?와 함께 이름과 값으로 쌍을 이루는 요청 파라미터
만약, 요청 파라미터가 여러 개이면 &으로 연결한다.
ex) www.hyeonjis.tistory.com/example?name=shj&age=27
여기에서 요청 파라미터명은 name, age이고
각각의 파라미터는 shj, 27으로 서버에 요청을 보내게 된다
쿼리 스트링을 사용하게 되면 URL에 조회 조건을 표시하기 때문에 특정 페이지를 링크하거나 북마크할 수 있다.
그리고 GET은 불필요한 요청을 제한하기 위해 요청이 캐시될 수 있다.
js, css, 이미지 같은 정적 컨텐츠는 데이터 양이 크고, 변경될 일이 적어서 반복해서 동일한 요청을 보낼 필요가 없다. 정적 콘텐츠를 요청하고 나면 브라우저에서는 요청을 캐시해 두고, 동일한 요청이 발생할 때 서버로 요청을 보내지 않고 캐시된 데이터를 사용한다.
종종 프론트엔드 요소를 변경해도 반영이 안 되는 경우가 있는데, 이때 브라우저의 캐시를 지워 주면 다시 컨텐츠를 조회하기 위해 서버로 요청을 보내게 된다.
- GET 요청은 캐시가 가능하다
- GET 요청은 브라우저 히스토리에 남는다.
- GET 요청은 길이 제한이 있다.
- GET 요청은 중요한 정보를 다루면 안 된다.
POST 방식
POST 방식은 리소스를 생성/변경하기 위해 설계되었기 때문에 GET과 달리 전송해야 될 데이터를 HTTP 메시지 Body에 담아서 서버로 보낸다. (body의 타입은 Content-Type 헤더에 따라 결정된다)
GET에서 쿼리 스트링으로 보냈던 게 body에 담겨 보내진다고 생각하면 된다.
POST로 데이터를 보낼 때는 길이 제한이 따로 없어 용량이 큰 데이터를 보낼 때 사용하거나 외부적으로 데이터를 드러내지 않기 때문에 보안이 필요한 부분에 많이 사용된다. (데이터를 암호화하지 않으면 body의 데이터를 볼 수 있다)
POST를 통한 데이터 전송은 보통 html form을 통해 서버로 전송된다.
- POST 요청은 캐시되지 않는다.
- POST 요청은 브라우저 히스토리에 남지 않는다.
- POST 요청은 북마크되지 않는다.
- POST 요청은 데이터 길이에 제한이 없다.
GET과 POST의 차이점
- 사용 목적
- GET: 서버의 리소스에서 데이터를 요청할 때 사용한다.
- POST: 서버의 리소스를 새로 생성하거나 업데이트할 때 사용한다.
- DB로 따지면 GET은 SELECT에 가깝고, POST는 CREATE에 가깝다고 본다.
- 요청에 Body 유무
- GET: 쿼리 스트링으로 요청하는 데이터를 담아 보내기 때문에 HTTP 메시지에 Body가 없다.
- POST: body에 데이터를 담아 보내기 때문에 당연히 HTTP 메시지에 Body가 존재한다.
- 멱등
- GET: 멱등
- POST: 멱등 x
멱등이란?
사전적 정의로는 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질을 의미한다.
GET은 리소스를 조회한다는 점에서 여러 번 요청하더라도 응답이 똑같다.
POST는 리소스를 생성하거나 업데이트할 때 사용되기 때문에 멱등이 아니라고 볼 수 있다.
참고 자료
'CS' 카테고리의 다른 글
브라우저와 작동 원리 (0) | 2023.01.06 |
---|---|
CI/CD (0) | 2022.12.27 |
HTTP란? (0) | 2022.12.25 |
인터넷의 작동 원리 (2) | 2022.12.23 |