HTTP'de “406-Kabul Edilemez Yanıt” nedir?


185

Ruby on Rails uygulamamda POSTMAN REST istemcisi aracılığıyla Base64 biçiminde bir resim yüklemeye çalıştım . Resmi POST yaptığımda 406 Kabul Edilemez Yanıt alıyorum . Veritabanımı kontrol ettiğimde, görüntü oradaydı ve başarıyla kaydedildi.

Bu hatanın nedeni nedir, başlığımda belirtmem gereken bir şey var mı?

Benim ricam:

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

Başlık:

Content-Type  -  application/json

İşlenmemiş veri:

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

Yanıtlar:


263

İşleminiz başarısız oldu.

Arka uç hizmetiniz, döndürdüğü yanıt türünün İstemci isteğinizdeki HTTP Kabul Et üstbilgisinde sağlanmadığını söylüyor .

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

  1. Servis tarafından verilen yanıtı (içerik türü) bulun.
  2. İsteğinizde bunu (içerik türü) sağlayın Kabul üstbilgisi.

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


6
Merhaba, "Hizmet tarafından döndürülen yanıtı (içerik türü) bulun" dediğinde? Bunu nasıl kontrol edebilirim? Ben bir php dosyasından json döndürüyorum böylece içerik türü json olacağını varsayarak (ya da ben php dosyasının başlıklarında bu belirtmek gerekir?) Ayrıca ben de 'Kabul' gibi benim istek başlığında bu içerik türü sağladı: 'uygulama / json'. bu doğru olur mu? teşekkürler
Sarah

41

406 Kabul Edilemez İstek tarafından tanımlanan kaynak, yalnızca istekte gönderilen kabul başlıklarına göre kabul edilemez içerik özelliklerine sahip yanıt veren varlıklar oluşturabilir.

406, sunucu istekte belirtilen kabul üstbilgisiyle yanıt veremediğinde gerçekleşir. Sizin durumunuzda, yanıt için application / json sunucu tarafından kabul edilemeyebilir.


7
Başlığı kaldırmanız gerekmez, sunucu için kabul edilebilir farklı bir başlık sağlamanız gerekir. en.wikipedia.org/wiki/…
ashutosh raina

7

Ruby on Rails'ı arka uç olarak kullandığınızı söylemiştiniz. İlgili yöntem için kod göndermediniz, ancak tahminim şu şekilde görünüyor:

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

Bunu şu şekilde değiştirin:

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

Ve sorununuzu çözecek. Benim için çalıştı :)


2

Tarayıcıda geçersiz çerezler saklandığında veya referans verildiğinde 406 yanıtı alabilirsiniz - örneğin, Rails sunucusunu yerel olarak Dev modunda çalıştırırken.

Aynı bağlantı noktasında iki farklı proje çalıştırdıysanız, tarayıcı farklı bir yerel ana bilgisayar oturumundan bir çereze başvurabilir.

Bu benim başıma geldi ... bir dakikalığına beni tetikledi. Tarayıcıya bakma> Geliştirici Modu> Ağ bunu gösterdi.


2

"Bazen", sunucunun dahili bir hatası olduğu ve bir hata mesajıyla (ör: JSON yükü ile 500) yanıt vermek istediği anlamına gelebilir, ancak istek üstbilgileri JSON'u kabul ettiğini söylemediğinden, bunun yerine 406 döndürür. Git şekil. (bu durumda: yay önyükleme webapp).

Bu durumda işleminiz başarısız oldu. Ancak başarısızlık mesajı bir başkası tarafından gizlendi.


1

Benim durumumda ekledim:

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

sorunumu tamamen çözdüm.


1
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

'Request.js' kullanıyorsanız aşağıdakileri kullanabilirsiniz:

var options = {
  url: 'localhost',
  method: 'GET',
  headers:{
    Accept: '*/*'
  }
}

request(options, function (error, response, body) {
  ...
})

0

Benim durumumda .NET-Core'da bir API için, api XML ile çalışmak üzere ayarlanmıştır (varsayılan olarak JSON ile yanıt olarak ayarlanmıştır), bu yüzden Denetleyicime bu ek açıklamayı ekliyorum:

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

Beni yola koyduğun için teşekkürler!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.