php - para - http/1.1 200 ok
Establecer código de estado de respuesta (6)
PHP <= 5.3
La función header()
tiene un parámetro para el código de estado. Si lo especifica, el servidor se encargará de eso desde allí.
header(''HTTP/1.1 401 Unauthorized'', true, 401);
PHP> = 5.4
Ver la respuesta de Gajus: https://stackoverflow.com/a/14223222/362536
Esta pregunta ya tiene una respuesta aquí:
- PHP: ¿Cómo enviar un código de respuesta HTTP? 7 respuestas
Tengo una llamada de API para la que necesito poder ejecutar algunos controles y devolver varios códigos de estado. No necesito vistas personalizadas ni nada, solo necesito devolver el código correcto. Si el usuario no ha aprobado las credenciales adecuadas, necesito devolver un estado 401. Si no han enviado un formato de solicitud compatible, necesito devolver un estado de 400.
Debido a que es una API, todo lo que realmente quiero hacer es establecer el estado de la respuesta y salir con un mensaje simple y estúpido sobre por qué la solicitud falló (probablemente utilizando una exit
). Solo lo suficiente para hacer el trabajo, pero no he podido hacer que esto funcione bien. He intentado usar el header()
de PHP header()
y Cake $this->header()
(todo esto está en el controlador), pero aunque obtengo el mensaje de salida, el encabezado muestra un estado de 200 OK
.
Usando el siguiente código, recibo el mensaje, pero el encabezado no está configurado. ¿Qué me estoy perdiendo?
if( !$this->auth_api() ) {
header( ''401 Not Authorized'' );
exit( ''Not authorized'' );
}
¿Por qué no usar Cakes Response Class? Puede establecer el código de estado de la respuesta simplemente con esto:
$this->response->statusCode(200);
A continuación, simplemente renderice un archivo con el mensaje de error, que se adapta mejor a JSON.
Como fue escrito antes, pero para principiantes como yo no olvides incluir el regreso.
$this->response->statusCode(200);
return $this->response;
Desde PHP 5.4 puedes usar http_response_code .
http_response_code(404);
Esto se encargará de configurar los encabezados HTTP adecuados.
Si está ejecutando PHP <5.4, entonces tiene dos opciones:
- Mejorar.
- Utilice esta función
http_response_code
implementada en PHP.
No creo que esté configurando el header() correctamente, intente esto:
header(''HTTP/1.0 401 Unauthorized'');
Tuve el mismo problema con CakePHP 2.0.1
Intenté usar
header( ''HTTP/1.1 400 BAD REQUEST'' );
y
$this->header( ''HTTP/1.1 400 BAD REQUEST'' );
Sin embargo, ninguno de estos resolvió mi problema.
Finalmente lo resolví usando
$this->header( ''HTTP/1.1 400: BAD REQUEST'' );
Después de eso, no hay errores o advertencias de php / CakePHP.
* editar: en la última llamada a la función de $this->header
, coloque dos puntos (:) entre el 400 y el texto de descripción del error.