https://developer.mozilla.org/ko/docs/Web/HTTP/Status
https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods
서버는 클라이언트와 HTTP로 데이터를 주고 받을 때, 응답 헤더에 상태코드(Status Code)를 같이 보낸다. 이 HTTPS Status Code는 특정한 HTTP요청이 성공적으로 수행되고 완료되었는지를 클라이언트에게 알려준다.
HTTP Status Code는 HTTP 표준으로 정의되어 있어, 각기 다른 브라우저나 서버단에서도 항상 동일한 형식과 의미를 지닌다.
응답은 3자리 숫자로 이루어져 있으며, 맨 앞자리 숫자 1~5에 따라서 각각 정보(Informational), 성공(Successful), 리다이렉트(Redirection), 클라이언트 에러(Client Error), 서버 에러(Server Error)로 응답코드의 그룹이 나뉘어진다.
: 요청을 받았으며 프로세스를 계속 진행합니다.
: 요청을 성공적으로 받았으며 인식했고 수용하였습니다.
: 요청 완료를 위해 추가 작업 조치가 필요합니다.
301 Moved Permanently
와 동일한 의미를 지니며, 307 Temporary Redirect
와 마찬가지로 클라이언트가 이전 메소드와 동일한 메소드를 사용해야 한다.: 요청의 문법이 잘못되었거나 요청을 처리할 수 없습니다.
400: Bad Request
- 클라이언트측의 잘못된 문법(query 혹은 API)으로 인해 서버가 요청을 이해할 수 없음을 나타낸다.
401: Unauthorized
- 비록 HTTP 표준에서는 "미승인(unauthorized)"를 명확히 하고 있지만, 의미상 이 응답은 "비인증(unauthenticated)"을 의미한다. 클라이언트는 요청한 응답을 받기 위해서는 반드시 스스로를 인증해야 한다.
403: Forbidden
- 클라이언트가 요청한 리소스에 접근할 권한이 없음을 나타낸다. 401 Unauthorized
와 다른 점은, 서버는 클라이언트가 누구인지 알고 있다는 점이다.
404: Not Found
- 웹에서 가장 자주 보이기에 가장 유명한 코드이다. 클라이언트가 요청한 리소스를 서버가 찾을 수 없음을 나타낸다.
405: Method Not Allowed
- 해당 URL에 한해서, 쓰거나 삭제하는 기능이 허용되지 않음을 나타낸다.
409: Conflict
- 클라이언트가 만들고자 하는 리소스가 이미 존재하거나, 충돌이 날 때 사용한다.
: 서버가 명백히 유효한 요청에 대한 충족을 실패했습니다.
GET
: get
POST
: create
PUT
: replace
DELETE
: delete
PATCH
: replace partially
HEAD
: get without body (get header only)
OPTIONS
: all supported methods for URL
TRACE
: echoes the received request
MDN 사이트에서 Request Method 페이지의 아무 메소드나 선택해서 들어가보면 해당 표가 나온다.
이 테이블에서 Safe와 Idempotent에 대해 살펴보자면,
MDN의 해석을 보자
An HTTP method is safe if it doesn't alter the state of the server. In other words, a method is safe if it leads to a read-only operation. Several common HTTP methods are safe: GET, HEAD, or OPTIONS. All safe methods are also idempotent, but not all idempotent methods are safe. For example, PUT and DELETE are both idempotent but unsafe.
메소드가 서버의 상태를 변경하지 않으면, 그 메소드는 Safe하다고 한다.
그러니까, Request Method가 서버의 데이터를 변경하지 않는, 읽기 전용 상태를 유지하게 한다면, 그 메소드는 Safe하다는 것이다.
GET
, HEAD
, OPTION
이 대표적인 Safe 메소드이다.
모든 Safe 메소드는 Idempotent하지만, 모든 Idempoent한 메소드는 Safe하지 않다고 한다.
한국어로 번역하면 멱등의, 멱등원이다. (뭔소리여?)
그냥 MDN 사이트에 나온 영어로 알아보자.
An HTTP method is idempotent if an identical request can be made once or several times in a row with the same effect while leaving the server in the same state. In other words, an idempotent method should not have any side-effects (except for keeping statistics). Implemented correctly, the GET, HEAD, PUT, and DELETE methods are idempotent, but not the POST method. All safe methods are also idempotent.
이를 해석해보자면, 동일한 요청을 여러번 했을 때, 몇번을 해도, 얼마나 빠르게 하였던 상관없이
서버에게 항상 같은 효과를 지니고, 서버의 상태 또한 동일하게 남을 때 Idempotent하다고 표현한다.
대표적인 Idempotent한 메소드가 GET
, HEAD
, PUT
, DELETE
이며, Idempotent 하지 않은 메소드는 대표적으로 Patch
, POST
가 있다. 그 차이는 요청의 횟수와 상관없이 항상 같은 효과를 지니느냐, 아니느냐, 서버의 상태가 변하느냐, 변하지 않느냐이다.
200
: OK | 데이터를 찾았고 보내줄게
401
: Unauthorized | 인증된 사람만(로그인한 사람) 볼 수 있어
403
: Forbidden | 인증되었지만(로그인 했지만) 너는 권한이 없어
404
: Not Found | 요청한 데이터가 없어
405
: Method Not Allowed | GET 메소드는 허용되지 않았어
201
: Created | 요청한 것을 만들었어
401
: Unauthorized | 인증된 사람만(로그인한 사람) 볼 수 있어
403
: Forbidden | 인증되었지만(로그인 했지만) 너는 권한이 없어
404
: Not Found | 요청한 경로가 존재하지 않아
409
: Conflict | 만드려고 하는 리소스가 이미 있어서 충돌이 일어났어
200
: OK
204
: No Content | 콘텐츠가 없어
403
: Forbidden | 인증되었지만(로그인 했지만) 너는 권한이 없어
404
: Not Found |
405
: Method Not Allowed | 해당 메소드는 허용되지 않았어
200
: OK
401
: Unauthorized | 인증된 사람만(로그인한 사람) 볼 수 있어
403
: Forbidden | 인증되었지만(로그인 했지만) 너는 권한이 없어
404
: Not Found | 요청한 경로가 존재하지 않아
405
: Method Not Allowed | 해당 메소드는 허용되지 않았어