Що таке "406 - неприйнятна відповідь" у HTTP?


185

У своєму додатку Ruby on Rails я спробував завантажити зображення через клієнта POSTMAN REST у форматі Base64 . Коли я розміщую зображення, я отримую 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

Ваша операція не пройшла.

Ваша сервісна служба повідомляє, що тип відповіді, яку він повертає, не міститься в заголовку Accept HTTP у вашому запиті клієнта.

Посилання: http://en.wikipedia.org/wiki/List_of_HTTP_header_fields

  1. Дізнайтеся відповідь (тип вмісту), повернуту Сервісом.
  2. Надайте це (тип вмісту) у своєму запиті Прийняти заголовок.

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


6
Привіт, Коли ви говорите "Дізнайтеся відповідь (тип вмісту), повернутий службою"? Як я можу це перевірити? Я повертаю json з файлу php, тому я припускаю, що тип вмісту буде json (чи мені потрібно вказати це в заголовках файлу php?), А також я вказав цей тип вмісту в заголовку запиту, як-от "Прийняти": 'додаток / json'. це було б правильно? дякую
Сара

41

406 Неприйнятний Ресурс, ідентифікований запитом, здатний генерувати лише об'єкти відповідей, які мають змістові характеристики, неприйнятні відповідно до заголовків прийняття, надісланих у запиті.

406 трапляється, коли сервер не може відповісти заголовком accept, зазначеним у запиті. У вашому випадку здається, що application / json для відповіді може бути неприйнятним для сервера.


7
У вас немає заголовка для видалення, вам доведеться надати інший, прийнятний для сервера. en.wikipedia.org/wiki/…
ашутош райна

7

Ви згадали, що використовуєте Ruby on Rails як бекенд. Ви не опублікували код відповідного методу, але я гадаю, що він виглядає приблизно так:

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, коли в браузері зберігаються або посилаються недійсні файли cookie - наприклад, при локальному запуску сервера Rails в режимі Dev.

Якщо вам траплялося запускати два різні проекти на одному і тому ж порту, браузер може посилатися на cookie з іншого сеансу localhost.

Це сталося зі мною ... спонукало мене на хвилину. Заглянувши в браузер> Режим розробника> Мережа показала це.


2

"Іноді" це може означати, що у сервера була внутрішня помилка, і він хотів відповісти повідомленням про помилку (наприклад: 500 з корисним навантаженням JSON), але оскільки заголовки запитів не сказали, що він приймає JSON, він замість цього повертає 406. Піди розберися. (в даному випадку: весняний завантажувач webapp).

У такому випадку ваша операція не вдалася. Але повідомлення про відмову було затьмарено іншим.


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

Якщо ви використовуєте 'request.js', ви можете використовувати наступне:

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

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

0

У моєму випадку для API в .NET-Core, api налаштовано на роботу з XML (за замовчуванням встановлено відповідь з JSON), тому я додаю цю примітку до свого контролера:

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

Дякую, що ви поставили мене на шлях!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.