프로그래밍

Http Response Code에 대한 간단한 정리

일태우 2020. 2. 21. 15:31

어느선생님의 간단명료한 정리..

400과 404의 차이에 대해 구글링하던 결과에 대해 정리해 보고자 한다.

자세한 사항은 표준문서 RFC 2616(https://tools.ietf.org/html/rfc2616#section-10.4)을 참고하자.

 

RFC 2616 - Hypertext Transfer Protocol -- HTTP/1.1

[Docs] [txt|pdf] [draft-ietf-http...] [Tracker] [Diff1] [Diff2] [Errata] Obsoleted by: 7230, 7231, 7232, 7233, 7234, 7235 DRAFT STANDARD Updated by: 2817, 5785, 6266, 6585 Errata Exist Network Working Group R. Fielding Request for Comments: 2616 UC Irvine

tools.ietf.org

결론 부터 보자면

400 : 클라이언트(요청자)의 파라미터를 서버에서 이해를 못하는 경우

404 : 서버에 매핑되는 uri가 존재하지 않는 경우

라고 정의되어 있다.

에러 내용으로는 400은 Bad Request404는 Not Found이니 비지니스에서 요청에 의한 결과를 못 찾으면 404를 반환 해야할 것 같지만 정답은 400 인 것이다.

 

표준 문서를 들여다보는 습관은 해답을 빠르게 찾게 해주는 것 같다.


Resource의 중복 처리에 대해서는 400 보다는 409 (Conflict)가 어울리는 것 같다.

https://stackoverflow.com/questions/3825990/http-response-code-for-post-when-resource-already-exists

 

HTTP response code for POST when resource already exists

I'm building a server that allows clients to store objects. Those objects are fully constructed at client side, complete with object IDs that are permanent for the whole lifetime of the object. I...

stackoverflow.com

400은 서버에서 이해를 못하는 경우인데 리소스의 중복은 서버 입장에서는 클라이언트의 요청을 이해를 하지만 이미 존재하여 충돌이 생긴거니 409 Conflict가 정확하다고 본다.


400 : 클라이언트(요청자)의 파라미터를 서버에서 이해를 못하는 경우

404 : 서버에 매핑되는 uri가 존재하지 않는 경우

409 : 자원의 현재 상태와 충돌하여 요청을 처리할 수 없는 경우