스크립트에서 예외가 발생하면 어떤 HTTP 상태를 반환해야합니까?예외에 대한 올바른 HTTP 상태는 무엇입니까?
200 OK
또는
500 내부 서버 오류
은의 사용자 요청 매개 변수가 올바른지하지만 적절한 응답 대신에 표시하는 오류 메시지가 발생 내 스크립트에 버그가 있다고 가정 해 봅시다 (XML, JSON 또는 다른 형식). HTTP 상태는 무엇입니까?
스크립트에서 예외가 발생하면 어떤 HTTP 상태를 반환해야합니까?예외에 대한 올바른 HTTP 상태는 무엇입니까?
200 OK
또는
500 내부 서버 오류
은의 사용자 요청 매개 변수가 올바른지하지만 적절한 응답 대신에 표시하는 오류 메시지가 발생 내 스크립트에 버그가 있다고 가정 해 봅시다 (XML, JSON 또는 다른 형식). HTTP 상태는 무엇입니까?
500 Internal Server Error
은 클라이언트가 요청을 변경하여 오류를 수정할 수없는 경우 올바른 상태입니다.
클라이언트가 오류를 피하기 위해 요청을 수정할 수있는 경우 4XX
상태 (리소스를 찾을 수없는 경우 404
)를 사용하십시오. 다음 클라이언트는 상황이 정상적으로 실행되고 생각 (가되지 않는)와 같은 오류를 일으키는 요청을 계속 할 수 있기 때문에
200 OK
는 하지 거의 모든 오류 상황에서 적절한 상태입니다.
available status codes in RFC2616을 숙지하고 상황에 가장 적합한 것을 찾으십시오.
+1은 "일반적인 웹 서비스 오류"가 아니라 "찾을 수 없음"을 의미합니다. –
다른 5xx 코드가 존재합니다. 예를 들어 데이터베이스 연결이 부족한 경우 503을 반환 할 수 있습니다. –
@DietrichEpp - 물론입니다. 더 많은 정보없이 가능한 모든 상황을 다루기가 어렵습니다. 따라서 OP가 결정을 내리는 데 도움이되는 RFC에 대한 링크. –
Status Code Definitions을 검토하십시오. 500 또는 400은 일반적인 문제에 대해서는 도움이되지만, 더 자세히 설명하면 반환 상태가 더 유용 할 수 있습니다.
PHP가 예외를 던질 때쯤에, 당신은 합법적 인 '400'의 사용 시점을 통과했다고 말할 수 있습니다. 웹 서버는'잘못된 요청'을 구성하는 것을 잡아야하고 PHP는 호출되지 않습니다.예외를 던질 수있는 것은 아마도 서버 측과 마찬가지로 * 아마 * 5xx 오류입니다. 요청한 무효 리소스를 인증하는 것과 같이 이것이 사실이 아닌 경우가 분명하지만 자체 코드 ('401','403','404')를 가지며'400 Bad Request'를 구성하지 않습니다. – DaveRandom
@DaveRandom - "웹 서버는 잘못된 요청을 구성하는 것을 잡아야하며 PHP는 호출되지 않습니다."* - 꼭 그런 것은 아닙니다. 구체적으로 형식화 된 요청 본문을 기대할 수는 있지만 잘못된 형식의 요청을 받았을 수 있으며 이는 '400 Bad Request (잘못된 요청)'에 해당합니다 (서버가 처리하지 않을 것입니다). 상태는 API (특히 일반 사용자의 웹 페이지 요청보다는 유용합니다.하지만 여전히 유용 할 수는 있지만)에 특히 유용합니다. –
@RobHruska 잘 만들어진 점 – DaveRandom
거의 모든 오류에 대해 사용할 수 있기 때문에 예외가 throw 된 이유에 따라 다릅니다. URI에있는 일부 ID가 데이터베이스에 없기 때문에 throw됩니다. 반면에 404라고 말하고 싶습니다. 다른 한편으로는 데이터베이스가 다운 되었기 때문에 500을 던질 것입니다. 예외가 throw되지만 결과 페이지가 여전히 남아있는 경우 사용자에게 유용합니다. 반환 200이라고 말합니다.
나는 예외가 던져지면 여전히 500 개의 오류가 발생하지만 응답 본문에는 여전히 유용한 내용이 포함될 수 있다고 주장합니다. – cdeszaq
@cdeszaq 이는 오류 응답을 시각적으로 검사하는 사용자에게 유용 할 수 있지만 500 개의 상태 코드가 제공되면 많은 HTTP 클라이언트가 응답 본문을 읽지 않으므로 클라이언트는 오류 메시지의 원인에 따라 동작을 조정할 수 없습니다. 오류. 따라서 WCF 예외는 오류 유형 응답과 함께 200으로 반환 될 수 있습니다. – tomfumb
@cdeszaq 대부분의 경우 나는 당신에게 동의 하겠지만 나는 여전히 그것이 달려 있다고 주장한다. HTTP 상태 코드는 클라이언트의 (웹 사용자/검색 엔진 봇) 소비에 대한 것입니다. 따라서 일부 오류를 기록하기를 원하지만 응답 본문이 영향을받지 않을 것이라고 확신하기 때문에 예외를 throw한다고 가정 해 봅니다. 클라이언트는 여전히 페이지가 ok (상태 코드를 사용하여 확인해야 함)라고 가정 할 수 있습니다. 이렇게하면 분석 시스템이 파손되어 Google이 색인에서 페이지를 삭제하지 않습니다. –
나는 404라고 말하고 싶다. 얼마 전 나는 프로젝트에서 같은 질문을했고, 나는 모든 코드와 그 의미를 읽은 후에 404와 함께 머물렀다. 예외의 원인은 중요합니다. 잘못된 사용자 입력시 404 오류 (잘못된 제품 ID 등)를 주면 오류 500에 표시됩니다. – Notinlist
그것은 최종 사용자를위한 예외와 의미에 달려 있습니다! 의미있는 대답을 얻으려면 훨씬 더 정확해야합니다! –
@Notinlist 사실 프로그래밍 오류가 발생했다면 누군가에게 리소스가 존재하지 않는다고 말하겠습니까? Google은 페이지가 존재하지 않는다고 말하면 검색 결과에 귀하의 URL 표시를 신속하게 중단합니다 :) ** 404 Not Found **는 요청 된 리소스가 존재하지 않는 경우에만 적합합니다 (실제로는 존재하지 않는 경우에만 해당) . – rdlowrey