220 votes

Que signifie "406-Not Acceptable Response" dans le protocole HTTP ?

Dans mon application Ruby on Rails, j'ai essayé de télécharger une image par le biais de POSTMAN. REST client en Base64 format. Lorsque je POST l'image, j'obtiens une 406 Réponse non acceptable . Lorsque j'ai vérifié ma base de données, l'image était présente et a été enregistrée avec succès.

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

Ma demande :

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

En-tête :

Content-Type  -  application/json

Données brutes :

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

313voto

TheWhiteRabbit Points 4985

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

Votre service dorsal indique que le type de réponse qu'il renvoie n'est pas fourni dans la base de données de l'utilisateur. Accepter HTTP dans votre requête 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 Accept de votre demande.

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

50voto

ashutosh raina Points 1936

406 Non acceptable La ressource identifiée par la demande est seulement capable de générer des entités de réponse qui ont des caractéristiques de contenu non acceptables selon les en-têtes acceptés envoyés dans la demande.

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

9voto

itamaryu Points 126

Vous avez mentionné que vous utilisiez Ruby on Rails comme backend. Vous n'avez pas posté le code de la méthode concernée, mais je pense qu'elle 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 marché pour moi :)

6voto

rogerdpack Points 12806

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

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

4voto

etusm Points 3010

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, lorsque vous exécutez localement un serveur Rails en mode Dev.

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 locale différente.

Cela m'est arrivé... j'ai trébuché pendant une minute. En regardant dans le navigateur > Mode Développeur > Réseau, on le voit.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X