O que é "406-resposta inaceitável" em HTTP?

na minha aplicação Ruby on Rails tentei enviar uma imagem através do carteiro resto cliente no formato Base64. Quando eu postar a imagem eu estou recebendo uma resposta 406 Não aceitável . Quando eu verifiquei meu banco de dados, a imagem estava lá e foi salva com sucesso.

Qual é a razão para este erro, há alguma coisa que eu precise especificar no meu cabeçalho?

o meu pedido:

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

cabeçalho:

Content-Type  -  application/json

Em Bruto data:

{
    "exercise": {
        "subbodypart_ids": [
            "1",
            "2"
        ],
        "name": "Exercise14"
    },
    "image_file_name": "Pressurebar Above.jpg",
    "image":"******base64 Format*******"
}
Author: ekad, 2013-01-10

7 answers

A sua operação não falhou.

O seu serviço de infra-estrutura está a dizer que o tipo de resposta que está a devolver não é fornecido no Accept HTTP header no pedido do seu cliente.

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

  1. Descubra a resposta (Tipo de conteúdo) devolvida pelo Serviço.
  2. indique isto (tipo de conteúdo) no seu pedido aceite cabecalho.

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

 216
Author: TheWhiteRabbit, 2015-03-31 06:30:27

406 Não É Aceitável O recurso identificado pelo pedido só é capaz de gerar entidades de resposta que tenham características de conteúdo não aceitável de acordo com os cabeçalhos accept enviados no pedido.

406 acontece quando o servidor não consegue responder com o cabeçalho de aceitação especificado no pedido. No seu caso, parece que a aplicação / json para a resposta pode não ser aceitável para o servidor.

 34
Author: ashutosh raina, 2013-01-10 06:17:03
Disseste que estás a usar o Ruby nos carris como infra-estrutura. Você não postou o código para o método relevante, mas meu palpite é que se parece com algo assim:
def create
  post = Post.create params[:post]
  respond_to do |format|
    format.json { render :json => post }
  end
end

Muda para:

def create
  post = Post.create params[:post])
  render :json => post
end
E vai resolver o teu problema. Funcionou comigo.
 6
Author: itamaryu, 2014-09-14 13:40:50

Você também pode receber uma resposta 406 quando cookies inválidos são armazenados ou referenciados no navegador - por exemplo, ao executar um servidor Rails no modo Dev localmente.

Se por acaso executou dois projectos diferentes no mesmo porto, o navegador poderá referenciar um cookie de uma sessão localhost diferente.

Isto aconteceu-me...fez-me tropeçar por um minuto. A procura no navegador > modo de desenvolvimento > rede mostrou-o.
 2
Author: etusm, 2016-07-31 22:50:24

No meu caso, eu acrescentei:

Content-Type: application/x-www-form-urlencoded
Resolvi completamente o meu problema.
 1
Author: Kadir Erturk, 2016-08-29 23:39:49

" Às vezes " isso pode significar que o servidor teve um erro interno, e queria responder com uma mensagem de erro (ex: 500 com a carga JSON), mas como os cabeçalhos do pedido não disseram que ele aceitou JSON, ele retorna um 406 em vez disso. Quem diria. (neste caso: webapp de arranque de molas).

Nesse caso, a sua operação falhou. Mas a mensagem de fracasso foi obscurecida por outro.
 1
Author: rogerdpack, 2018-05-08 22:08:09
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
Author: JP Ventura, 2016-12-09 19:56:00