Wat is “406-niet acceptabel antwoord” in HTTP?

In mijn Ruby on Rails-applicatie probeerde ik een afbeelding te uploaden via de postbode rust client in Base64 -indeling. Wanneer ik de afbeelding post krijg ik een 406 niet acceptabel antwoord . Toen ik mijn database controleerde, was de afbeelding daar en werd het succesvol opgeslagen.

Wat is de reden voor deze fout, is er iets dat ik in mijn header moet specificeren?

Mijn aanvraag:

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

Header:

Content-Type  -  application/json

RAW-gegevens:

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

Antwoord 1, Autoriteit 100%

Uw bewerking niet faalde.

Uw back-Service zegt dat het antwoordtype dat het retourneert, niet in de Accept HTTP-header in uw klantverzoek wordt verstrekt.

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

  1. Ontdek het antwoord (inhoudstype) geretourneerd per service.
  2. Geef dit (inhoudstype) op in uw verzoek Accepteer de koptekst.

http://en.wikipedia.org/wiki/http_status_code – & GT; 406


Antwoord 2, Autoriteit 15%

406 niet acceptabel
De bron die door het verzoek wordt geïdentificeerd, is alleen in staat om respons-entiteiten te genereren die geen inhoudskarakteristieken hebben
aanvaardbaar volgens de Accept-headers die in het verzoek worden verzonden.

406 gebeurt wanneer de server niet kan reageren met de Accept-header die is opgegeven in het verzoek.
In uw geval lijkt het een aanvraag / JSON voor het antwoord is mogelijk niet acceptabel op de server.


Antwoord 3, Autoriteit 3%

Noemde je dat je ruby ​​op rails gebruikt als een backend. Je hebt de code niet gepost voor de relevante methode, maar mijn gok is dat het er zoiets uitziet:

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

Wijzig het naar:

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

en het zal uw probleem oplossen. Het werkte voor mij 🙂


Antwoord 4

U kunt ook een respons van 406 ontvangen wanneer ongeldige cookies worden opgeslagen of verwezen in de browser – bijvoorbeeld bij het lokaal werken van een rails-server in Dev-modus.

Als u er nog twee verschillende projecten in dezelfde poort uitvoerde, kan de browser een cookie van een andere localhost-sessie verwijzen.

Dit is me overkomen … stond me een minuutje op. Kijkend in browser & gt; Ontwikkelaarsmodus & GT; Netwerk toonde het.


Antwoord 5

“Soms” kan dit betekenen dat de server een interne fout had en wilde reageren met een foutmelding (ex: 500 met JSON Payload), maar aangezien de aanvraag headers niet zei dat het JSON heeft geaccepteerd, keert het een 406 in plaats daarvan. Ga figuur. (In dit geval: Spring Boot WebApp).

In dat geval faalde uw operatie. Maar het faalbericht werd door een andere verduisterd.


Antwoord 6

In mijn geval heb ik toegevoegd:

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

loste mijn probleem volledig op.


Antwoord 7

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);
});

Antwoord 8

Als u ‘Request.js’ gebruikt, kunt u het volgende gebruiken:

var options = {
  url: 'localhost',
  method: 'GET',
  headers:{
    Accept: '*/*'
  }
}
request(options, function (error, response, body) {
  ...
})

Antwoord 9

In mijn geval voor een API in .NET-CORE, is de API ingesteld op Werk met XML (standaard is ingesteld op reactie met JSON), dus ik voeg deze annotatie toe in mijn controller:

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

Bedankt voor het plaatsen van mij op het pad!

Other episodes