Che cos’è “406-Not Acceptable Response” in HTTP?

Nell’applicazione Ruby on Rails ho provato a caricare un’immagine tramite il client POSTMAN REST in formato Base64 . Quando I POST l’immagine ottengo una risposta 406 non accettabile . Quando ho controllato il mio database, l’immagine era lì ed è stata salvata con successo.

Qual è la ragione di questo errore, c’è qualcosa che devo specificare nella mia intestazione?

La mia richiesta:

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

Intestazione:

 Content-Type - application/json 

Dati grezzi:

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

La tua operazione non ha fallito.

Il servizio di back-end sta dicendo che il tipo di risposta che sta restituendo non è fornito nell’intestazione Accetta HTTP nella richiesta del Cliente.

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

  1. Scopri la risposta (tipo di contenuto) restituita dal Servizio.
  2. Fornire questo (tipo di contenuto) nella richiesta Accetta intestazione.

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

406 Non accettabile La risorsa identificata dalla richiesta è in grado di generare solo quadro di risposta che hanno caratteristiche di contenuto non accettabili secondo le intestazioni di accettazione inviate nella richiesta.

406 si verifica quando il server non può rispondere con l’header accept specificato nella richiesta. Nel tuo caso sembra che application / json per la risposta potrebbe non essere accettabile per il server.

Hai detto che stai usando Ruby on Rails come back-end. Non hai pubblicato il codice per il metodo pertinente, ma suppongo che assomigli a questo:

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

Cambiarlo in:

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

E risolverà il tuo problema. Ha funzionato per me 🙂

È inoltre ansible ricevere una risposta 406 quando i cookie non validi vengono memorizzati o referenziati nel browser, ad esempio quando si esegue un server Rails in modalità Dev localmente.

Se ti è capitato di eseguire due progetti diversi sulla stessa porta, il browser potrebbe fare riferimento a un cookie da una diversa sessione localhost.

Questo è successo a me … mi ha fatto inciampare per un minuto. Guardando nel browser> Modalità sviluppatore> Rete lo ha mostrato.

Nel mio caso, ho aggiunto:

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

risolto completamente il mio problema.

“A volte” questo può significare che il server ha avuto un errore interno e ha voluto rispondere con un messaggio di errore (es: 500 con payload JSON) ma dal momento che le intestazioni delle richieste non hanno detto di accettare JSON, restituisce invece un 406. Vai a capire. (in questo caso: webapp di avvio a molla).

In tal caso, l’operazione ha avuto esito negativo. Ma il messaggio di errore è stato oscurato da un altro.

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