2012-02-26 9 views
46

Tengo varias páginas diseñadas para ser llamadas con AJAX - Les pido que devuelvan un código de estado anormal si no se pueden mostrar, y mi javascript mostrará un cuadro de error en consecuencia.¿Qué código de estado HTTP usar para los parámetros requeridos no provistos?

Por ejemplo, si el usuario no está autenticado o si su sesión ha expirado y tratan de llamar a una de las páginas AJAX, devolverá 401 Unathorized.

También tengo alguna devolución 500 Internal Server Error si algo realmente extraño sucede en el servidor.

¿Qué código de estado debo devolver si se llamó a una de estas páginas sin los parámetros necesarios? (y por lo tanto no puede devolver ningún contenido).

que tenía un aspecto en el wikipedia article on HTTP status codes, pero la más cercana que pude encontrar para el código que estoy buscando era la siguiente:

422 Unprocessable Entity
The request was well-formed but was unable to be followed due to semantic errors.

Editar: El código anterior es WebDAV específica y por lo tanto poco probable que ser apropiado en este caso

¿Alguien puede pensar en un código apropiado para regresar?

+1

Ver también (si eso no es un duplicado par): [código de estado HTTP para los malos datos] (http://stackoverflow.com/questions/1364527/http-status-code-for- datos incorrectos) – hakre

+1

422 es totalmente apropiado. –

+0

@JulianReschke Creo que 4918 podría hacer con algunas erratas, primero para especificar que actualiza 2616, y en segundo lugar para aclarar que los nuevos códigos de estado HTTP no son todos específicos de WebDAV. – Alnitak

Respuesta

32

What status code should I return if one of these pages was called without required parameters? (and therefore can't return any content).

usted podría escoger 404 Not Found:

The server has not found anything matching the Request-URI [assuming your required parameters are part of the URI, i.e. $_GET ]. No indication is given of whether the condition is temporary or permanent. The 410 (Gone) status code SHOULD be used if the server knows, through some internally configurable mechanism, that an old resource is permanently unavailable and has no forwarding address. This status code is commonly used when the server does not wish to reveal exactly why the request has been refused, or when no other response is applicable.

(resaltado por mí)

404 Not Found es un subconjunto de 400 Bad Request que podría tomarse así porque es muy claro acerca de lo que es esto:

The request could not be understood by the server due to malformed syntax. The client SHOULD NOT repeat the request without modifications.

No puedo sugerir que lo que hace ka Código de respuesta WEBDAV que no existe para los clientes HTTP que usan hipertexto, pero podría, es totalmente válido, usted es el codificador del servidor, puede tomar cualquier código de estado de resonse HTTP que considere adecuado para su cliente HTTP del cual usted es el diseñador también:

11.2. 422 Unprocessable Entity

The 422 (Unprocessable Entity) status code means the server understands the content type of the request entity (hence a 415(Unsupported Media Type) status code is inappropriate), and the syntax of the request entity is correct (thus a 400 (Bad Request) status code is inappropriate) but was unable to process the contained instructions. For example, this error condition may occur if an XML request body contains well-formed (i.e., syntactically correct), but semantically erroneous, XML instructions.

entidad de solicitud de IIRC es el cuerpo de la solicitud. Entonces, si estás operando con cuerpos de solicitud, podría ser apropiado como escribió Julian.


Ha comentado:

IMHO, the text for 400 speaks of malformed syntax. I would assume the syntax here relates to the syntax of HTTP string that the client sends across to the server.

Eso podría ser, pero puede ser cualquier cosa expresada sintácticamente, toda la solicitud, sólo algunas cabeceras de petición, o una cabecera de la solicitud específica, la petición URI etc .. 400 no está específicamente sobre "sintaxis de cadena HTTP", es de hecho la respuesta general a un error del cliente:

The 4xx class of status code is intended for cases in which the client seems to have erred. Except when responding to a HEAD request, the server SHOULD include an entity containing an explanation of the error situation, and whether it is a temporary or permanent condition. These status codes are applicable to any request method. User agents SHOULD display any included entity to the user.

la parte importante es ahí donde se debe decirle al cliente lo que salió mal. El código de estado solo indica que algo salió mal (en la clase 4xx), pero HTTP no se ha diseñado específicamente para hacer que un parámetro de parte consulta-información faltable como una condición de error.De hecho, URI solo sabe que hay una parte consulta-info y no lo que significa.

Si crees que 400 es demasiado amplio, te sugiero que elijas 404 si el problema está relacionado con el URI, p. $_GET variables.

+0

En mi humilde opinión, el texto de 400 habla de malformados * sintaxis *. Supongo que la sintaxis aquí se relaciona con la sintaxis de la cadena HTTP que el cliente envía al servidor. En caso de que falten parámetros, la sintaxis seguirá siendo correcta, lo que me hace creer que 400 es una mala elección. Corrígeme si estoy equivocado en cualquier lugar :) – SuperSaiyan

+0

@Thrustmaster: No estás equivocado, pero un poco estrecho de miras. Solo porque podría ser eso, no significa que no puede significar el otro. Especialmente para los códigos x00 que es cierto. Se agregó más información. – hakre

+0

Podría ser un poco estrecho de miras, jeje. Sigo sin estar convencido . Supongo que leeré el RFC por completo antes de seguir comentando. Gracias por la respuesta, votó :) – SuperSaiyan

8

No sé acerca de las intenciones de los escritores RFC, pero el código de estado que he visto utilizado en la naturaleza para ese caso es 400 Bad Request.

+0

400 es, IMO, una mala elección. Mira mi comentario debajo de la respuesta de hakre. Dime si estoy equivocado de alguna manera :) – SuperSaiyan

+3

Solo te equivocas al no hacer una mejor sugerencia. :) – AndreKR

+0

Lo hice (probablemente no en el comentario), 404 :) – SuperSaiyan

0

Lee esto cuidadosamente:

https://en.wikipedia.org/wiki/List_of_HTTP_status_codes

422 es una cosa-WebDAV específica, y no he visto que se usa para otra cosa.

400, aunque no esté destinado a este fin en particular, parece ser una opción común.

404 es también una opción viable si su API es REST o similar (utilizando la parte de la ruta de la URI para indicar parámetros de búsqueda)

+0

gracias - ahora se actualizó la pregunta –

+2

422 es * no * WebDAV-specific, y * es * utilizado en otros contextos. –

1

Descripción citado contra 400

The request could not be understood by the server due to malformed syntax. The client SHOULD NOT repeat the request without modifications.

(El énfasis es mío)

Habla de sintaxis mal formada, que no es el caso cuando el navegador envía una solicitud al servidor. Es solo el caso de los parámetros faltantes (mientras que no hay sintaxis mal formada).

Yo sugeriría palo con 404 :)

(Expertos corrígeme si estoy equivocado en cualquier lugar :))

+3

Ver http://trac.tools.ietf.org/wg/httpbis/trac/ticket/303; la revisión de RFC 2616 aclarará que "Sintaxis mal formada" es solo una de las muchas razones posibles. –

6

422 es un código de estado HTTP normal; y es es usado fuera de WebDAV. Al contrario de lo que otros dicen, no hay problema con eso; HTTP tiene un registro de código de estado por una razón.

Ver http://www.iana.org/assignments/http-status-codes

+0

Claro que puedes usar 478 también, es tu elección, no estás obligado a ningún RFC. Sin embargo, no recomendaría reutilizar un código específico de WEBDAV para esta pregunta. Y técnicamente tampoco necesita confiar en IANA, siempre y cuando sea algo 4xx, esté claro para cualquier agente HTTP, consulte las especificaciones HTTP. Es solo una pregunta de lo que quieres. – hakre

+1

Bueno, 422 es un código en el registro del código de estado IANA, definido en un RFC de seguimiento de estándares IETF. 478 no es. –

+1

¿Y qué? Pasarán años hasta que se use 478 y cuando ese sea el caso y usted haya establecido áreas comunes a su alrededor, IETF lo reflejará. Especialmente si el cliente es su propio cliente AJAX controlado, no hay mucho por lo que preocuparse fuera de su dominio. Probablemente sea más inteligente utilizar un código de estado no utilizado que reutilizar algo de lo que IANA ya indica que se usa para un propósito específico, una conexión WEBDAV. – hakre

Cuestiones relacionadas