HTTP 메소드 | 안전 | 멱등 | 캐시가능 | 요청에 Body 있음 | 응답 Body 있음 |
---|---|---|---|---|---|
GET | 예👌 | 예👌 | 예👌 | 놉❌ | 예👌 |
POST | 놉❌ | 놉❌ | 예👌 | 예👌 | 예👌 |
PUT | 놉❌ | 예👌 | 놉❌ | 예👌 | 예👌 |
PATCH | 놉❌ | 놉❌ | 예👌 | 예👌 | 예👌 |
DELETE | 놉❌ | 예👌 | 놉❌ | 놉❌ | 예👌 |
HEAD | 예👌 | 예👌 | 예👌 | 놉❌ | 놉❌ |
CONNECT | 놉❌ | 놉❌ | 놉❌ | 예👌 | 예👌 |
OPTIONS | 예👌 | 예👌 | 놉❌ | 선택🎶 | 예👌 |
TRACE | 예👌 | 예👌 | 놉❌ | 놉❌ | 예👌 |
계속해서 메소드를 호출해도 리소스를 변경하지 않는 것을 뜻한다.
즉 데이터 변경이 일어나지 않는다.
Method 예시)
데이터를 가져오는 GET 메서드로 예를 들면, 조회를 여러 번 진행해도 데이터는 변하지 않는다.
따라서 GET 방식은 '안전'한 속성을 가지고 있다.
어떤 대상에 같은 연산을 여러 번 적용해도(계속해서 메소드를 호출해도) 결과가 똑같을 때 멱등한다고 한다.
ex)
X*1과 같은 함수는 변수에 1번을 적용해도 1000번을 적용해도 결과값은 똑같다. 이럴 때는 멱등성이 보장된다고 말한다.
하지만 X-1와 같은 함수라면 함수가 한번 호출될 때마다 결과가 달라진다. 이런 연산은 멱등성을 보장하지 않는 것을 뜻한다.
Method 예시)
GET 메소드는 단지 리소스를 읽어 오는 행위를 의미하기에 메소드를 여러번 수행해도 결과가 변경되지 않는다. 마찬가지로 요청에 담긴 리소스로 기존 리소스를 그대로 대체해버리는 PUT 메소드도 여러번 메소드를 수행해도 요청에 담긴 리소스가 변하지 않는 이상 연산 결과가 동일하다.
POST 메소드는 요청시마다 리소스를 새롭게 생성하기 때문에 여러번 메소드를 수행하게 되면 매번 새로운 리소스가 생성된 것이고, 연산을 수행한 결과가 매번 달라진다.
캐싱을 해서 데이터를 효율적으로 가져올 수 있다는 뜻이다. GET, HEAD, POST, PATCH가 캐시가 가능하지만 실제로는 GET과 HEAD만 주로 캐싱에 쓰인다.
HTTP Request/response Message는 공백(blank line)을 제외하고 3가지 부분으로 나누어진다.
GET /search?q=hm&nuri=ko HTTP/1.1
Host: www.google.com
POST /members HTTP/1.1
Content-Type: application/json
{
"username": "nuri",
"age": 10
}
PUT /members/100 HTTP/1.1
Content-Type: application/json
{
"username": "nuri",
"age": 10
}
PATCH /members/100 HTTP/1.1
Content-Type: application/json
{
"age": 50
}
DELETE /members/1004 HTTP/1.1
Host: localhost:8080
GET 🆚 POST
*보안 측면
POST 방식은 URL에 데이터의 정보가 들어 있지 않으므로 GET 방식과 비교했을 때 조금 더 안전하다고 볼 수 있다.
*속도 측면
방식은 캐싱을 한다. 따라서 여러번 요청이 올 때, 저장된 데이터를 활용하므로 GET 방식이 POST 방식에 비해 조금 더 빠를 수 있다.
POST 🆚 PUT
POST 방식은 요청시마다 새로운 데이터를 생성하지만,
PUT 방식은 사용자가 데이터를 지정하고 수정하는 것이기 때문에 같은 요청을 계속하더라도 새로운 데이터가 생기는 것이 아니다.
PUT 🆚 PATCH
PUT은 지정한 데이터를 전부 수정하는 메소드지만,
PATCH는 정보의 일부분이 변경되는 방법이다.
그래서 PUT은 멱등한 속성이 있지만, PATCH는 멱등하다고 볼 수 없다.
⑴리소스 : 웹 사이트에 접속하거나 API 호출을 할 때, 서버로부터 제공받는 식별 가능한 자원들을 의미한다.
ex) 텍스트나 이미지, 동영상 등과 같은 것
클라이언트는 원하는 리소스에 접근하기 위해 URI이나 URL을 사용한다.
참고 자료
HTTP 사진 출처
: https://developer.mozilla.org/ko/docs/Web/HTTP/Overview
HTTP 메서드 사진 출처
: https://incheol-jung.gitbook.io/docs/q-and-a/computer-science/http-method
HTTP 메서드 설명 참고 자료
1) https://rachel0115.tistory.com/entry/HTTP-%EB%A9%94%EC%84%9C%EB%93%9C-%EC%A0%95%EB%A6%AC-GET-POST-PUT-PATCH-DELETE
2) https://velog.io/@haron/HTTP-%EB%A9%94%EC%84%9C%EB%93%9C%EC%97%90-%EB%8C%80%ED%95%B4-%EC%95%84%EB%8A%94%EB%8C%80%EB%A1%9C-%EB%A7%90%ED%95%B4%EC%A3%BC%EC%84%B8%EC%9A%94
끗!