404-DriverNotFound / 200-OK

jikang, yunslee, ykoh project for Pass this project
2 stars 1 forks source link

[Fix] 204 상태코드 No Content #88

Closed ykoh42 closed 3 years ago

ykoh42 commented 3 years ago

https://developer.mozilla.org/ko/docs/Web/HTTP/Status/204

흔히 204를 반환하는 경우는 PUT 요청에 대한 응답으로, 사용자에게 보여지는 페이지를 바꾸지 않고 리소스를 업데이트할 때 쓰입니다. 리소스를 생성한 경우엔 201 Created를 대신 반환합니다. 새롭게 업데이트한 페이지를 보여줘야 할 경우 200을 사용해야 합니다.

컨텐츠가 없을때로 생각했었는데, 아닌 것같아서 한번 점검이 필요한듯

exgs commented 3 years ago

MDN(https://datatracker.ietf.org/doc/html/rfc7231#section-6.3.5)

The 204 (No Content) status code indicates that the server has successfully fulfilled the request and that there is no additional content to send in the response payload body. Metadata in the response header fields refer to the target resource and its selected representation after the requested action was applied.

For example, if a 204 status code is received in response to a PUT request and the response contains an ETag header field, then the PUT was successful and the ETag field-value contains the entity-tag for the new representation of that target resource. The 204 response allows a server to indicate that the action has been successfully applied to the target resource, while implying that the user agent does not need to traverse away from its current "document view" (if any). The server assumes that the user agent will provide some indication of the success to its user, in accord with its own interface, and apply any new or updated metadata in the response to its active representation.

For example, a 204 status code is commonly used with document editing interfaces corresponding to a "save" action, such that the document being saved remains available to the user for editing. It is also frequently used with interfaces that expect automated data transfers to be prevalent, such as within distributed version control systems. A 204 response is terminated by the first empty line after the header fields because it cannot contain a message body. A 204 response is cacheable by default; i.e., unless otherwise indicated by the method definition or explicit cache controls.

exgs commented 3 years ago

204 (콘텐츠 없음) 상태 코드는 서버가 요청을 성공적으로 이행했으며 응답 페이로드 본문에 보낼 추가 콘텐츠가 없음을 나타냅니다. 메타 데이터 응답 헤더 필드는 요청 된 작업이 적용된 후 대상 리소스 및 선택한 표현을 참조합니다.

예를 들어, PUT 요청에 대한 응답으로 204 상태 코드가 수신되고 응답에 ETag 헤더 필드가 포함 된 경우 PUT는 성공했으며 ETag 필드 값에는 해당 대상 리소스의 새 표현에 대한 엔티티 태그가 포함됩니다. 204 응답을 통해 서버는 작업이 대상 리소스에 성공적으로 적용되었음을 나타내면서 사용자 에이전트가 현재 "문서보기"(있는 경우)에서 벗어날 필요가 없음을 의미합니다. 서버는 사용자 에이전트가 자체 인터페이스에 따라 사용자에게 성공에 대한 일부 표시를 제공하고 활성 표현에 대한 응답에서 새롭거나 업데이트 된 메타 데이터를 적용한다고 가정합니다.

예를 들어, 204 상태 코드는 일반적으로 "저장"작업에 해당하는 문서 편집 인터페이스와 함께 사용되므로 저장중인 문서는 사용자가 편집 할 수있는 상태로 유지됩니다. 또한 분산 버전 제어 시스템 내에서와 같이 자동화 된 데이터 전송이 널리 보급 될 것으로 예상하는 인터페이스와 함께 자주 사용됩니다. 204 응답은 메시지 본문을 포함 할 수 없기 때문에 헤더 필드 다음의 첫 번째 빈 줄로 종료됩니다. 204 응답은 기본적으로 캐시 가능합니다. 즉, 메서드 정의 또는 명시 적 캐시 제어에서 달리 명시하지 않는 한.

exgs commented 3 years ago

답이 잘 나오지 않아서, 다른 분들의 깃허브를 참고하였다. pork_belly, iamteapot 두 팀은 PUT과 DELETE에서 한번씩 사용하였고, sujung팀은 DELETE에서만 사용한 것으로 보인다. DELETE일 떄는 명확히 삭제할 리소스가 없을 때, 204를 보내면된다. PUT 일 때는 대게 Update가 되는 상황에서 보내는 것으로 되어있는 것 같다

69 에서 다뤘던 내용과 연관이 있는 것 같아서 해당 issue에서 rfc 파일을 타고 들어갔더니 이런 내용이 있다.

If the target resource does not have a current representation and the PUT successfully creates one, then the origin server MUST inform the user agent by sending a 201 (Created) response. If the target resource does have a current representation and that representation is successfully modified in accordance with the state of the enclosed representation, then the origin server MUST send either a 200 (OK) or a 204 (No Content) response to indicate successful completion of the request. 대상 리소스에 현재 표현이없고 PUT가 성공적으로 생성하면 원 서버는 반드시 201 (Created) 응답을 전송하여 사용자 에이전트에 알려야합니다. 대상 자원이 현재 표현을 가지고 있고 그 표현이 동봉 된 표현의 상태에 따라 성공적으로 수정 된 경우, 원 서버는 성공적인 완료를 표시하기 위해 반드시 200 (OK) 또는 204 (No Content) 응답을 보내야합니다.

선택사항 정도로 보여진다.

exgs commented 3 years ago

선택사항이기때문에 자유도를 준다면, 내가 생각했을 때, 이미 존재하는 폴더에 같은 이름의 파일을 쓰려고 할 때 204를 보내는 것이 어떻겠냐는 제안을 하고 싶다. mkdir hello 를 하고 touch hello 를 하면 폴더는 그대로 있고, echo $?는 0 값을 출력한다. 이러한 경우 리소스는 존재하지만(물론 우리가 Request로 던진 body의 파일이 생기지도 않았다.) 출력할 경우가 없는 경우와 유사한 것 같아서, 현재 구현된대로 그대로 두면 될 것 같다 (server_execute*.cpp line: 99)

확인 후 닫아주거나 코멘트 남기길 요청 @kohyounghwan