web-dev-qa-db-fra.com

Qu'est-ce que "406-Not Acceptable Response" dans HTTP?

Dans mon application Ruby sur Rails, j'ai essayé de télécharger une image par l'intermédiaire du POSTMAN RESTE client au format Base64 . Lorsque je POST l'image, je reçois une réponse 406 non acceptable . Lorsque j'ai vérifié ma base de données, l'image était là et a été enregistrée avec succès.

Quelle est la raison de cette erreur, dois-je spécifier quelque chose dans mon en-tête?

Ma demande:

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

Entête:

Content-Type  -  application/json

Données brutes:

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

Votre opération n'a pas échoué.

Votre service principal dit que le type de réponse qu'il renvoie n'est pas fourni dans l'en-tête HTTP Accepter de votre demande client.

Réf.: http://en.wikipedia.org/wiki/List_of_HTTP_header_fields

  1. Découvrez la réponse (type de contenu) renvoyée par le service.
  2. Indiquez-le (type de contenu) dans l'en-tête Accepter de votre demande.

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

248
TheWhiteRabbit

406 Non acceptable La ressource identifiée par la demande est uniquement capable de générer des entités de réponse dont les caractéristiques de contenu ne sont pas acceptables en fonction des en-têtes d'acceptation envoyés dans la demande.

406 se produit lorsque le serveur ne peut pas répondre avec l'en-tête accept spécifié dans la demande. Dans votre cas, il semble que application/json pour la réponse ne soit pas acceptable pour le serveur.

38
ashutosh raina

Vous avez mentionné que vous utilisiez Ruby sur Rails en tant que backend. Vous n'avez pas posté le code de la méthode correspondante, mais je suppose que cela ressemble à quelque chose comme ceci:

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

Changez le en:

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

Et cela résoudra votre problème. Cela a fonctionné pour moi :)

7
itamaryu

"Parfois", cela peut signifier que le serveur avait une erreur interne et qu'il voulait répondre par un message d'erreur (ex: 500 avec une charge JSON), mais comme les en-têtes de requête ne disaient pas qu'il acceptait JSON, il renvoyait un 406 à la place. Allez comprendre. (dans le cas présent: webapp de démarrage de printemps).

Dans ce cas, votre opération a échoué. Mais le message d'échec a été obscurci par un autre.

2
rogerdpack

Vous pouvez également recevoir une réponse 406 lorsque des cookies non valides sont stockés ou référencés dans le navigateur - par exemple, lors de l'exécution d'un serveur Rails en mode Dev localement.

Si vous exécutez deux projets différents sur le même port, le navigateur peut faire référence à un cookie provenant d'une session localhost différente.

Cela m'est arrivé ... m'a fait trébucher pendant une minute. Rechercher dans le navigateur> Mode développeur> Le réseau l'a montré.

2
etusm

Dans mon cas, j'ai ajouté:

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

résolu mon problème complètement.

1
Kadir Erturk
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
JP Ventura