¿Qué es "406-Respuesta no aceptable" en HTTP?


185

En mi aplicación Ruby on Rails intenté cargar una imagen a través del cliente POSTMAN REST en formato Base64 . Cuando PUBLICO la imagen obtengo una respuesta 406 no aceptable . Cuando revisé mi base de datos, la imagen estaba allí y se guardó con éxito.

¿Cuál es la razón de este error? ¿Hay algo que deba especificar en mi encabezado?

Mi petición:

URL --- http://localhost:3000/exercises.json

Encabezamiento:

Content-Type  -  application/json

Datos sin procesar:

{
    "exercise": {
        "subbodypart_ids": [
            "1",
            "2"
        ],
        "name": "Exercise14"
    },
    "image_file_name": "Pressurebar Above.jpg",
    "image":"******base64 Format*******"
}

Respuestas:


263

Su operación no falló.

Su servicio de fondo dice que el tipo de respuesta que está devolviendo no se proporciona en el encabezado Aceptar HTTP en su solicitud de Cliente.

Ref: http://en.wikipedia.org/wiki/List_of_HTTP_header_fields

  1. Descubra la respuesta (tipo de contenido) devuelta por el Servicio.
  2. Proporcione esto (tipo de contenido) en su solicitud Aceptar encabezado.

http://en.wikipedia.org/wiki/HTTP_status_code -> 406


66
Hola, cuando dices "Averigua la respuesta (tipo de contenido) devuelta por el servicio"? ¿Cómo puedo verificar esto? Estoy devolviendo json de un archivo php, así que supongo que el tipo de contenido será json (¿o necesito especificar esto en los encabezados del archivo php?) También proporcioné este tipo de contenido en el encabezado de mi solicitud como 'Aceptar': 'application / json'. ¿Sería esto correcto? gracias
Sarah

41

406 No aceptable El recurso identificado por la solicitud solo es capaz de generar entidades de respuesta que tienen características de contenido no aceptables de acuerdo con los encabezados de aceptación enviados en la solicitud.

406 ocurre cuando el servidor no puede responder con el encabezado de aceptación especificado en la solicitud. En su caso, parece que application / json para la respuesta puede no ser aceptable para el servidor.


77
No tiene que eliminar el encabezado, deberá proporcionar uno diferente que sea aceptable para el servidor. en.wikipedia.org/wiki/…
ashutosh raina

7

Mencionaste que estás usando Ruby on Rails como backend. No publicó el código para el método relevante, pero supongo que se parece a esto:

def create
  post = Post.create params[:post]
  respond_to do |format|
    format.json { render :json => post }
  end
end

Cámbielo a:

def create
  post = Post.create params[:post])
  render :json => post
end

Y resolverá tu problema. Funcionó para mí :)


2

También puede recibir una respuesta 406 cuando se almacenan o se hace referencia a cookies no válidas en el navegador, por ejemplo, cuando se ejecuta un servidor Rails en modo Dev localmente.

Si ejecutó dos proyectos diferentes en el mismo puerto, el navegador podría hacer referencia a una cookie de una sesión localhost diferente.

Esto me ha pasado ... me hizo tropezar por un minuto. Buscando en el navegador> Modo desarrollador> Red lo mostró.


2

"A veces" esto puede significar que el servidor tenía un error interno y quería responder con un mensaje de error (por ejemplo, 500 con carga JSON), pero dado que los encabezados de la solicitud no decían que aceptaba JSON, en su lugar, devuelve un 406. Imagínate. (en este caso: spring boot webapp).

En cuyo caso, su operación falló. Pero el mensaje de fracaso fue oscurecido por otro.


1

En mi caso, agregué:

Content-Type: application/x-www-form-urlencoded

Resuelto mi problema por completo.


1
const request = require('request');

const headers = {
    'Accept': '*/*',
    'User-Agent': 'request',
};

const options = {
    url: "https://example.com/users/6",
    headers:  headers
};

request.get(options, (error, response, body) => {
    console.log(response.body);
});

0

Si está usando 'request.js', puede usar lo siguiente:

var options = {
  url: 'localhost',
  method: 'GET',
  headers:{
    Accept: '*/*'
  }
}

request(options, function (error, response, body) {
  ...
})

0

En mi caso para una API en .NET-Core, la API está configurada para funcionar con XML (de manera predeterminada está configurada para responder con JSON), así que agrego esta anotación en mi controlador:

[Produces("application/xml")]
public class MyController : ControllerBase {...}

¡Gracias por ponerme en el camino!

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.