HTTP 메소드 중 GET 과 POST에 대해 자세히 살펴보려 한다.
GET
클라이언트에서 서버로 어떠한 리소스로부터 정보를 요청하기 위해 사용되는 메서드
데이터를 읽거나, 검색할 때 사용된다고 할 수 있다.
GET을 통한 요청은 URL 주소 끝에 파라미터로 포함되어 전송되며, 이 부분을 query string이라고 부른다.
파라미터인 name1과 name2를 통해 값을 전달 받을 수 있다. 요청 파라미터가 여러개면 &로 연결한다.
ex) www.example.com/show?name1=value&name2=value2
특징
- 캐시가 가능하다.
- GET을 통해 서버에 리소스를 요청할 때 웹 캐시가 요청을 가로채 서버로부터 리소스를 다시 다운로드 하는 대신 리소스의 복사본을 반환한다. HTTP 헤더를 통해 캐시 옵션을 지정할 수 있다.
- 파라미터에 정보가 노출되어 버리기 때문에 중요한 정보를 다루면 안된다.
- 데이터를 요청할 때만 사용된다.
- 길이 제한이 있다.(브라우저마다 제한이 다르다)
- 브라우저 히스토리에 남는다.
- 북마크에 추가할 수 있다.
- 성공시, 200(Ok) HTTP 응답 코드를 XML, JSON뿐만 아니라 여러 데이터(html, txt등..), 여러 형식의 데이터와 함께 반환한다.
POST
클라이언트에서 서버로 리소스를 생성하거나 업데이트하기 위해 데이터를 보낼 때 사용되는 메서드
전송할 데이터를 HTTP 메시지의 body 부분에 담아서 서버로 보낸다.
body의 타입은 요청 헤더의 Content-Type에 따라서 결정 된다.
특징
- 캐시되지 않는다.
- 브라우저 히스토리에 남지 않는다.
- 데이터 길이에 제한이 없어 GET과 달리 대용량 데이터를 전송할 수 있다.
- 북마크에 추가할 수 없다.
- 자원 생성은 201(Created) HTTP 응답 코드를 반환한다.
GET과 POST의 차이점
- 사용 목적
- GET은 서버의 리소스에서 데이터를 요청할 때, POST는 서버의 리소스를 새로 생성하거나 업데이트할 때 사용한다.
- DB로 따지면 GET은 SELECT 에 가깝고, POST는 Create 에 가깝다고 보면 된다.
- 요청에 body 유무
- GET 은 URL 파라미터에 요청하는 데이터를 담아 보내기 때문에 HTTP 메시지에 body가 없다.
- POST 는 body 에 데이터를 담아 보내기 때문에 당연히 HTTP 메시지에 body가 존재한다.
- 멱등성
- GET 요청은 멱등이며, POST는 멱등이 아니다.
여기서 멱등이란, 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질을 의미한다.
GET은 리소스를 조회한다는 점에서 여러 번 요청하더라도 응답이 똑같을 것 이다.
반대로 POST는 리소스를 새로 생성하거나 업데이트할 때 사용되기 때문에 멱등이 아니라고 볼 수 있다. (POST 요청이 발생하면 서버의 상태가 변경될 수 있다.)
참고
https://www.w3schools.com/tags/ref_httpmethods.asp
'CS > 네트워크' 카테고리의 다른 글
[네트워크] HTTP (무상태성, 비연결성) (1) | 2024.01.31 |
---|---|
[네트워크] URI와 웹 브라우저 요청 흐름 (0) | 2023.02.05 |
인터넷 네트워크 (IP, TCP/UDP, PORT, DNS) (0) | 2023.02.04 |
[네트워크] 웹 액세스의 흐름, HTTP 프로토콜 (0) | 2022.12.22 |
[네트워크] TCP와 UDP (0) | 2022.12.11 |