it-swarm.com.de

Was ist "406-Not Acceptable Response" in HTTP?

In meiner Anwendung Ruby on Rails habe ich versucht, ein Bild über den POSTMAN REST -Client im Format Base64 hochzuladen. Wenn ich das Bild POST bekomme ich eine 406 Nicht akzeptable Antwort . Als ich meine Datenbank überprüfte, war das Bild dort und wurde erfolgreich gespeichert.

Was ist der Grund für diesen Fehler? Muss ich irgendetwas in meinem Header angeben?

Meine Anfrage:

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

Header:

Content-Type  -  application/json

Rohdaten:

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

Ihre Operation ist nicht fehlgeschlagen.

Ihr Back-End-Service gibt an, dass der von ihm zurückgegebene Antworttyp nicht im HTTP-Header Accept in Ihrer Client-Anfrage enthalten ist.

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

  1. Finden Sie die Antwort (Inhaltstyp) heraus, die vom Service zurückgegeben wurde.
  2. Geben Sie dies (Inhaltstyp) in Ihre Anfrage ein Überschrift akzeptieren.

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

248
TheWhiteRabbit

406 Nicht akzeptabel Die von der Anforderung identifizierte Ressource kann nur Antwortentitäten generieren, deren Inhaltseigenschaften gemäß den in der Anforderung gesendeten Annahmeheader nicht akzeptabel sind.

406 passiert, wenn der Server nicht mit dem in der Anfrage angegebenen Accept-Header antworten kann. In Ihrem Fall scheint application/json für die Antwort für den Server möglicherweise nicht akzeptabel zu sein.

38
ashutosh raina

Sie haben erwähnt, dass Sie Ruby auf Rails als Backend verwenden. Sie haben den Code für die entsprechende Methode nicht gepostet, aber ich vermute, dass er ungefähr so ​​aussieht:

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

Ändern Sie es in:

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

Und es wird Ihr Problem lösen. Es hat bei mir funktioniert :)

7
itamaryu

"Manchmal" kann dies bedeuten, dass der Server einen internen Fehler hatte und mit einer Fehlermeldung antworten wollte (z. B. 500 mit JSON-Payload), aber da die Anforderungsheader nicht sagten, dass sie JSON akzeptiert haben, wird stattdessen eine 406 zurückgegeben. Stelle dir das vor. (in diesem fall: spring boot webapp).

In diesem Fall ist Ihre Operation fehlgeschlagen. Aber die Fehlermeldung wurde von einem anderen verdeckt.

2
rogerdpack

Sie können auch eine 406-Antwort erhalten, wenn ungültige Cookies im Browser gespeichert oder darauf verwiesen wird, z. B. wenn ein Rails Server lokal im Dev-Modus ausgeführt wird.

Wenn Sie zufällig zwei verschiedene Projekte auf demselben Port ausgeführt haben, verweist der Browser möglicherweise auf ein Cookie aus einer anderen localhost-Sitzung.

Das ist mir passiert ... hat mich für eine Minute gestolpert. Suchen im Browser> Entwicklermodus> Netzwerk zeigte es.

2
etusm

In meinem Fall habe ich hinzugefügt:

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

mein problem komplett gelöst.

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