제공되지 않은 필수 매개 변수에 사용할 HTTP 상태 코드는 무엇입니까?
AJAX로 호출하도록 설계된 여러 페이지가 있습니다. 표시 할 수없는 경우 비정상 상태 코드를 반환하고 그에 따라 내 자바 스크립트에 오류 상자가 표시됩니다.
예를 들어 사용자가 인증되지 않았거나 세션 시간이 초과되어 AJAX 페이지 중 하나를 호출하려고하면을 반환 401 Unathorized
합니다.
500 Internal Server Error
서버 측에서 정말 이상한 일이 발생하면 일부 수익을 얻습니다.
이러한 페이지 중 하나가 필수 매개 변수없이 호출 된 경우 어떤 상태 코드를 반환해야합니까? (따라서 콘텐츠를 반환 할 수 없습니다).
HTTP 상태 코드에 대한 위키피디아 기사를 봤지만 제가 찾고있는 코드에서 가장 가까운 것은 다음과 같습니다.
422 Unprocessable Entity
요청이 잘 구성되었지만 의미 오류로 인해 따를 수 없습니다.
편집 : 위의 코드는 WebDAV와 관련이 있으므로이 경우에는 적절하지 않을 수 있습니다.
누구든지 반환 할 적절한 코드를 생각할 수 있습니까?
이러한 페이지 중 하나가 필수 매개 변수없이 호출 된 경우 어떤 상태 코드를 반환해야합니까? (따라서 콘텐츠를 반환 할 수 없습니다).
선택할 수 있습니다 404 Not Found
.
서버가 Request-URI와 일치하는 것을 찾지 못했습니다. [필요한 매개 변수가 URI의 일부라고 가정하면
$_GET
] . 상태가 일시적인지 영구적인지에 대한 표시는 제공되지 않습니다. 410 (사라짐) 상태 코드는 서버가 내부적으로 구성 가능한 메커니즘을 통해 이전 리소스를 영구적으로 사용할 수없고 전달 주소가 없음을 알고있는 경우 사용해야합니다. 이 상태 코드는 서버가 요청이 거부 된 이유를 정확히 밝히고 싶지 않거나 다른 응답을 적용 할 수 없을 때 일반적으로 사용됩니다.
(내가 강조 표시)
404 Not Found
400 Bad Request
이것이 무엇인지 매우 명확하기 때문에 일부를 취할 수 있습니다.
잘못된 구문으로 인해 서버에서 요청을 이해할 수 없습니다. 클라이언트는 수정없이 요청을 반복해서는 안됩니다.
실제로 하이퍼 텍스트를 사용하여 HTTP 클라이언트에 존재하지 않는 WEBDAV 응답 코드를 선택하라고 제안 할 수는 없지만 완전히 유효하고 서버 코더이며 실제로 적합하다고 생각되는 모든 HTTP resonse 상태 코드를 취할 수 있습니다. 자신이 디자이너 인 HTTP 클라이언트의 경우 :
11.2. 422 처리 할 수없는 엔티티
422 (Unprocessable Entity) 상태 코드는 서버가 요청 엔티티의 콘텐츠 유형을 이해하고 (따라서 415 (Unsupported Media Type) 상태 코드가 부적절 함) 요청 엔티티의 구문이 정확함 (따라서 400 (Bad Request) ) 상태 코드가 부적절 함) 포함 된 지침을 처리 할 수 없습니다. 예를 들어, XML 요청 본문에 올바른 형식 (즉, 구문 적으로 올바른)이 포함되어 있지만 의미 상 잘못된 XML 명령이 포함 된 경우이 오류 조건이 발생할 수 있습니다.
IIRC 요청 엔티티는 요청 본문입니다. 따라서 요청 본문으로 작업하는 경우 Julian이 작성한대로 적절할 수 있습니다.
댓글 :
400의 텍스트 인 IMHO는 잘못된 구문을 말합니다. 여기서 구문은 클라이언트가 서버로 보내는 HTTP 문자열 구문과 관련이 있다고 가정합니다.
그럴 수도 있지만, 전체 요청, 일부 요청 헤더 또는 특정 요청 헤더, 요청 URI 등 구문으로 표현 된 모든 것이 될 수 있습니다. 400 "HTTP 문자열 구문"에 대한 것이 아니라 실제로는 다음과 같은 일반적인 대답입니다. 클라이언트 오류 :
4xx 클래스의 상태 코드는 클라이언트가 오류가있는 것으로 보이는 경우를위한 것입니다. HEAD 요청에 응답 할 때를 제외하고 서버는 오류 상황에 대한 설명과 그것이 일시적 또는 영구적 인 상태인지를 포함하는 엔티티를 포함해야합니다. 이러한 상태 코드는 모든 요청 방법에 적용 할 수 있습니다. 사용자 에이전트는 포함 된 모든 엔티티를 사용자에게 표시해야합니다.
중요한 부분은 고객에게 무엇이 잘못되었는지 알려 주어야한다는 것입니다. 상태 코드는 (4xx 클래스에서) 문제가 발생했음을 알려주지 만 HTTP는 누락 된 query-info 부분 매개 변수를 오류 조건으로 주목할 수 있도록 특별히 설계되지 않았습니다. 사실 URI는 그것이 의미하는 것이 아니라 query-info 부분이 있다는 것만 알고 있습니다.
400이 너무 광범위하다고 생각하면 문제가 URI와 관련된 경우 404를 선택하는 것이 좋습니다 (예 : $_GET
변수).
RFC 작성자의 의도는 알지 못하지만이 경우에 사용 된 상태 코드는 400 Bad Request 입니다.
422는 일반 HTTP 상태 코드입니다. 그것은 되어 외부 WebDAV를 사용했다. 다른 사람들이 말하는 것과는 달리 문제가 없습니다. HTTP에는 이유에 대한 상태 코드 레지스트리가 있습니다.
참조 http://www.iana.org/assignments/http-status-codes를
400에 대해 인용 된 설명
잘못된 구문 으로 인해 서버가 요청을 이해할 수 없습니다 . 클라이언트는 수정없이 요청을 반복해서는 안됩니다.
(강조 광산)
이는 브라우저가 서버에 요청을 보내는 경우가 아닌 잘못된 구문을 말합니다. 매개 변수가 누락 된 경우 일뿐입니다 (잘못된 구문은 없지만).
나는 404를 고수하는 것이 좋습니다 :)
(내가 어디에서나 틀리면 전문가가 나를 바로 잡는다 :))
이 내용을주의 깊게 읽으십시오.
https://en.wikipedia.org/wiki/List_of_HTTP_status_codes
422는 WebDAV 전용이며 다른 용도로 사용되는 것을 본 적이 없습니다.
400은이 특별한 목적을위한 것은 아니지만 일반적인 선택 인 것 같습니다.
404는 API가 RESTful이거나 유사한 경우에도 실행 가능한 선택입니다 (검색 매개 변수를 나타 내기 위해 URI의 경로 부분 사용).
'programing' 카테고리의 다른 글
자바에서 KDTree 구현 (0) | 2021.01.15 |
---|---|
json은 튜플을 키로 사용하여 사전을 직렬화합니다. (0) | 2021.01.15 |
React Native 앱을 브라우저에서 테스트 할 수 있습니까? (0) | 2021.01.15 |
Jackson과 Lombok이 함께 작동하도록 만들 수 없습니다. (0) | 2021.01.15 |
머리글과 바닥 글 div 사이의 모든 공간을 채우기 위해 div를 만드는 방법 (0) | 2021.01.15 |