HTTP में "406-Not स्वीकार्य प्रतिक्रिया" क्या है?


185

अपने रूबी ऑन रेल्स एप्लिकेशन में मैंने बेस64 प्रारूप में POSTMAN REST क्लाइंट के माध्यम से एक छवि अपलोड करने का प्रयास किया । जब मैं छवि पोस्ट करता हूं तो मुझे 406 नहीं स्वीकार्य प्रतिक्रिया मिल रही है । जब मैंने अपने डेटाबेस की जाँच की, तो छवि वहाँ थी और सफलतापूर्वक बच गई थी।

इस त्रुटि का कारण क्या है, क्या मुझे अपने हेडर में निर्दिष्ट करने की आवश्यकता है?

मेरा अनुरोध:

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

हैडर:

Content-Type  -  application/json

कच्चा डेटा:

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

जवाबों:


263

आपका ऑपरेशन विफल नहीं हुआ।

आपकी बैकएंड सेवा कह रही है कि यह जिस प्रकार की प्रतिक्रिया दे रही है वह आपके क्लाइंट अनुरोध में HTTP हेडर स्वीकार नहीं है ।

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

  1. सेवा द्वारा दी गई प्रतिक्रिया (सामग्री प्रकार) का पता लगाएं।
  2. अपने अनुरोध में यह (सामग्री प्रकार) प्रदान करें हेडर स्वीकार करें।

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


5
नमस्ते, जब आप कहते हैं कि "सेवा द्वारा दी गई प्रतिक्रिया (सामग्री प्रकार) का पता लगाएं"? मैं इसकी जांच कैसे कर सकता हूं? मैं एक php फ़ाइल से json लौटा रहा हूँ, इसलिए मान लें कि सामग्री प्रकार json होगा (या क्या मुझे इसे php फ़ाइल के शीर्षलेखों में निर्दिष्ट करने की आवश्यकता है?) मैंने भी इस सामग्री प्रकार को अपने अनुरोध शीर्षलेख जैसे 'Accept' में प्रदान किया है? 'आवेदन / json'। क्या यह सही होगा? धन्यवाद
सारा

41

406 स्वीकार्य नहीं है अनुरोध द्वारा पहचाना गया संसाधन केवल प्रतिक्रिया देने वाली संस्थाओं को उत्पन्न करने में सक्षम है जिनके पास अनुरोध में भेजे गए हेडर के अनुसार सामग्री विशेषताएँ स्वीकार्य नहीं हैं।

406 तब होता है जब सर्वर अनुरोध में निर्दिष्ट स्वीकार-हेडर के साथ प्रतिक्रिया नहीं दे सकता है। आपके मामले में ऐसा लगता है कि प्रतिक्रिया / आवेदन सर्वर के लिए स्वीकार्य नहीं हो सकता है।


7
आपने हेडर नहीं हटाया है, आपको एक अलग आपूर्ति करनी होगी जो सर्वर के लिए स्वीकार्य है। en.wikipedia.org/wiki/…
ashutosh raina

7

आपने उल्लेख किया कि आप एक बैकएंड के रूप में रूबी ऑन रेल्स का उपयोग कर रहे हैं। आपने संबंधित विधि के लिए कोड पोस्ट नहीं किया है, लेकिन मेरा अनुमान है कि यह कुछ इस तरह दिखता है:

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

इसे इसमें बदलें:

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

और यह आपकी समस्या का समाधान करेगा। यह मेरे लिए काम :)


2

जब आप अमान्य कुकीज़ को ब्राउज़र में संग्रहीत या संदर्भित करते हैं, तो आप 406 प्रतिक्रिया भी प्राप्त कर सकते हैं - उदाहरण के लिए, जब स्थानीय रूप से देव मोड में रेल सर्वर चल रहा हो।

यदि आप एक ही पोर्ट पर दो अलग-अलग प्रोजेक्ट चलाने के लिए हुए हैं, तो ब्राउजर एक अलग लोकलहोस्ट सेशन से कुकी का संदर्भ ले सकता है।

मेरे साथ ऐसा हुआ है ... मुझे एक मिनट के लिए फंसाया गया। ब्राउज़र में देख रहे हैं> डेवलपर मोड> नेटवर्क ने इसे दिखाया।


2

"कभी-कभी इसका मतलब यह हो सकता है कि सर्वर में एक आंतरिक त्रुटि थी, और एक त्रुटि संदेश के साथ जवाब देना चाहता था (उदाहरण: JSON पेलोड के साथ 500) लेकिन जब से अनुरोध हेडर ने यह नहीं कहा कि यह JSON स्वीकार करता है, इसके बजाय यह 406 देता है। जाओ पता लगाओ। (इस मामले में: स्प्रिंग बूट वेबैप)।

किस स्थिति में, आपका ऑपरेशन विफल हो गया। लेकिन विफलता संदेश दूसरे द्वारा अस्पष्ट था।


1

मेरे मामले में, मैंने जोड़ा:

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

मेरी समस्या का पूरी तरह से हल किया।


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

.NET-Core में API के लिए मेरे मामले में, एपीआई एक्सएमएल के साथ काम करने के लिए तैयार है (डिफ़ॉल्ट रूप से JSON के साथ प्रतिक्रिया के लिए सेट है), इसलिए मैं इस एनोटेशन को अपने नियंत्रक में जोड़ता हूं:

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

मुझे रास्ते पर लगाने के लिए धन्यवाद!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.